<ไฟล์ Manifest>

ไวยากรณ์:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="string"
          android:sharedUserId="string"
          android:sharedUserLabel="string resource" 
          android:sharedUserMaxSdkVersion="integer"
          android:versionCode="integer"
          android:versionName="string"
          android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
    ...
</manifest>
อยู่ใน
none
ต้องมีข้อมูลต่อไปนี้
<application>
อาจมีข้อมูลต่อไปนี้
<attribution>
<compatible-screens>
<instrumentation>
<permission>
<permission-group>
<permission-tree>
<queries>
<supports-gl-texture>
<supports-screens>
<uses-configuration>
<uses-feature>
<uses-permission>
<uses-permission-sdk-23>
<uses-sdk>
description:
องค์ประกอบรูทของไฟล์ AndroidManifest.xml โดยต้องมีองค์ประกอบ <application> และระบุแอตทริบิวต์ xmlns:android และ package
แอตทริบิวต์
xmlns:android
กำหนดเนมสเปซ Android แอตทริบิวต์นี้จะตั้งค่าเป็น "http://schemas.android.com/apk/res/android" เสมอ
package
ค่าของแอตทริบิวต์ package ในไฟล์ Manifest ของ APK แสดงถึงรหัสแอปพลิเคชันที่ไม่ซ้ำกันทั่วโลกของแอป โดยจะมีการจัดรูปแบบเป็นชื่อแพ็กเกจสไตล์ภาษา Java แบบเต็มสำหรับแอป Android ชื่อดังกล่าวอาจมีตัวอักษรพิมพ์ใหญ่หรือพิมพ์เล็ก ตัวเลข และขีดล่าง ("_") อย่างไรก็ตาม ส่วนต่างๆ ของชื่อแพ็กเกจต้องขึ้นต้นด้วยตัวอักษรเท่านั้น

โปรดอย่าเปลี่ยนค่า package เนื่องจากจะเป็นการสร้างแอปใหม่โดยพื้นฐาน ผู้ใช้แอปเวอร์ชันก่อนหน้าจะไม่ได้รับอัปเดตและโอนข้อมูลระหว่างเวอร์ชันเก่าและเวอร์ชันใหม่ไม่ได้

ในระบบการสร้างที่ใช้ Gradle ตั้งแต่ AGP 7.3 เป็นต้นไป อย่าตั้งค่าpackageในไฟล์ Manifest ต้นทางโดยตรง ดูข้อมูลเพิ่มเติมได้ที่ตั้งค่ารหัสแอปพลิเคชัน

android:sharedUserId

ค่าคงที่นี้เลิกใช้งานแล้วตั้งแต่ API ระดับ 29
รหัสผู้ใช้ที่แชร์จะทําให้ตัวจัดการแพ็กเกจทํางานแบบไม่แน่นอน เราจึงขอแนะนำอย่างยิ่งว่าอย่าใช้แอปดังกล่าวและอาจนำแอปเหล่านี้ออกจาก Android เวอร์ชันในอนาคต แต่ให้ใช้กลไกการสื่อสารที่เหมาะสม เช่น บริการและผู้ให้บริการเนื้อหา เพื่ออำนวยความสะดวกในการทำงานร่วมกันระหว่างคอมโพเนนต์ที่แชร์ แอปที่มีอยู่จะนำค่านี้ออกไม่ได้ เนื่องจากระบบไม่รองรับการย้ายข้อมูลออกจากรหัสผู้ใช้ที่แชร์ ในแอปเหล่านี้ ให้เพิ่ม android:sharedUserMaxSdkVersion="32" เพื่อหลีกเลี่ยงการใช้รหัสผู้ใช้ที่แชร์ในการติดตั้งของผู้ใช้ใหม่

ชื่อรหัสผู้ใช้ Linux ที่แชร์กับแอปอื่นๆ โดยค่าเริ่มต้น Android จะกำหนดรหัสผู้ใช้ที่ไม่ซ้ำกันให้กับแต่ละแอป อย่างไรก็ตาม หากตั้งค่าแอตทริบิวต์นี้ให้มีค่าเดียวกันสำหรับแอปตั้งแต่ 2 แอปขึ้นไป แอปทั้งหมดจะมีรหัสเดียวกัน ตราบใดที่ชุดใบรับรองเหมือนกัน แอปที่มีรหัสผู้ใช้เดียวกันจะเข้าถึงข้อมูลของกันและกันและทำงานในกระบวนการเดียวกันได้หากต้องการ

android:targetSandboxVersion
แซนด์บ็อกซ์เป้าหมายสําหรับแอปนี้ ยิ่งเวอร์ชันแซนด์บ็อกซ์สูง ระดับความปลอดภัยก็จะยิ่งสูงขึ้น ค่าเริ่มต้นคือ 1 แต่คุณตั้งค่าเป็น 2 ก็ได้ การตั้งค่าแอตทริบิวต์นี้เป็น 2 จะเปลี่ยนแอปไปยังแซนด์บ็อกซ์ SELinux อื่น

ข้อจํากัดต่อไปนี้มีผลกับแซนด์บ็อกซ์ระดับ 2

  • ค่าเริ่มต้นของ usesCleartextTraffic ในการกำหนดค่าความปลอดภัยของเครือข่ายคือเท็จ
  • ไม่อนุญาตให้แชร์รหัสผู้ใช้

สำหรับ Android Instant Apps ที่กําหนดเป้าหมายเป็น Android 8.0 (API ระดับ 26) ขึ้นไป ระบบจะตั้งค่าแอตทริบิวต์นี้เป็น 2 คุณสามารถตั้งค่าระดับแซนด์บ็อกซ์ในแอปเวอร์ชันที่ติดตั้งไว้เป็นระดับ1ที่เข้มงวดน้อยกว่าได้ แต่หากดำเนินการดังกล่าว แอปจะไม่เก็บข้อมูลแอปจากแอป Instant ไว้กับแอปเวอร์ชันที่ติดตั้งไว้ คุณต้องตั้งค่าแซนด์บ็อกซ์ของแอปที่ติดตั้งไว้เป็น 2 เพื่อให้ข้อมูลคงอยู่จากแอป Instant ไปยังเวอร์ชันที่ติดตั้ง

เมื่อติดตั้งแอปแล้ว คุณจะอัปเดตค่าแซนด์บ็อกซ์เป้าหมายของแอปเป็นค่าที่สูงขึ้นได้เท่านั้น หากต้องการดาวน์เกรดค่าแซนด์บ็อกซ์เป้าหมาย ให้ถอนการติดตั้งแอปแล้วแทนที่ด้วยเวอร์ชันที่มีไฟล์ Manifest ซึ่งมีค่าของแอตทริบิวต์นี้ต่ำกว่า

android:sharedUserLabel

ค่าคงที่นี้เลิกใช้งานแล้วตั้งแต่ API ระดับ 29
รหัสผู้ใช้ที่แชร์จะทําให้ตัวจัดการแพ็กเกจทํางานแบบไม่แน่นอน เราจึงขอแนะนำอย่างยิ่งว่าอย่าใช้แอปดังกล่าวและอาจนำแอปเหล่านี้ออกจาก Android เวอร์ชันในอนาคต แต่ให้ใช้กลไกการสื่อสารที่เหมาะสม เช่น บริการและผู้ให้บริการเนื้อหา เพื่ออำนวยความสะดวกในการทำงานร่วมกันระหว่างคอมโพเนนต์ที่แชร์ แอปที่มีอยู่จะนำค่านี้ออกไม่ได้ เนื่องจากระบบไม่รองรับการย้ายข้อมูลออกจากรหัสผู้ใช้ที่แชร์

ป้ายกำกับที่ผู้ใช้อ่านได้สำหรับรหัสผู้ใช้ที่แชร์ ป้ายกํากับได้รับการตั้งค่าเป็นการอ้างอิงทรัพยากรสตริง โดยต้องไม่ใช่สตริงดิบ

แอตทริบิวต์นี้เปิดตัวใน API ระดับ 3 แต่จะมีประโยชน์ก็ต่อเมื่อตั้งค่าแอตทริบิวต์ sharedUserId ด้วย

android:sharedUserMaxSdkVersion

รหัสผู้ใช้ที่แชร์ทําให้ตัวจัดการแพ็กเกจทํางานแบบไม่แน่นอน เราจึงขอแนะนำอย่างยิ่งว่าอย่าใช้แอปดังกล่าวและอาจนำแอปเหล่านี้ออกจาก Android เวอร์ชันในอนาคต แต่ให้ใช้กลไกการสื่อสารที่เหมาะสม เช่น บริการและผู้ให้บริการเนื้อหา เพื่ออำนวยความสะดวกในการทำงานร่วมกันระหว่างคอมโพเนนต์ที่แชร์

เวอร์ชัน SDK สูงสุดที่ระบบยังคงใช้ android:sharedUserId หากมีการติดตั้งแอปใหม่ในอุปกรณ์ที่ใช้ SDK เวอร์ชันสูงกว่าค่าที่ระบุไว้ แอปจะทํางานราวกับว่าคุณไม่เคยกําหนด android:sharedUserId

แอตทริบิวต์นี้เปิดตัวใน API ระดับ 33 แต่จะมีประโยชน์ก็ต่อเมื่อตั้งค่าแอตทริบิวต์ sharedUserId ด้วย

android:versionCode
หมายเลขเวอร์ชันภายใน หมายเลขนี้ใช้เพื่อระบุว่าเวอร์ชันหนึ่งใหม่กว่าอีกเวอร์ชันหนึ่งหรือไม่ โดยตัวเลขที่สูงกว่าหมายถึงเวอร์ชันที่ใหม่กว่า หมายเลขนี้ไม่ใช่หมายเลขเวอร์ชันที่แสดงต่อผู้ใช้ ซึ่งกำหนดโดยแอตทริบิวต์ versionName

ค่าจะตั้งเป็นจํานวนเต็มบวกที่มากกว่า 0 คุณกำหนดชื่อได้ตามต้องการ ตราบใดที่เวอร์ชันที่ตามมาแต่ละเวอร์ชันมีตัวเลขที่สูงกว่า เช่น อาจเป็นหมายเลขบิลด์ หรือจะแปลงหมายเลขเวอร์ชันในรูปแบบ "x.y" เป็นจำนวนเต็มก็ได้โดยการเข้ารหัส "x" และ "y" แยกกันในรูปแบบ 16 บิตที่ต่ำกว่าและสูงกว่า หรือจะเพิ่มหมายเลขขึ้น 1 รายการทุกครั้งที่เผยแพร่เวอร์ชันใหม่ก็ได้

android:versionName
หมายเลขเวอร์ชันที่แสดงต่อผู้ใช้ แอตทริบิวต์นี้ตั้งค่าเป็นสตริงดิบหรือเป็นข้อมูลอ้างอิงไปยังทรัพยากรสตริง สตริงไม่มีวัตถุประสงค์อื่นนอกจากแสดงต่อผู้ใช้ แอตทริบิวต์ versionCode จะเก็บหมายเลขเวอร์ชันที่สําคัญซึ่งใช้ในภายใน
android:installLocation
ตำแหน่งการติดตั้งเริ่มต้นของแอป ระบบยอมรับสตริงคีย์เวิร์ดต่อไปนี้
ค่านิยม คำอธิบาย
"internalOnly" แอปจะติดตั้งในที่จัดเก็บข้อมูลภายในของอุปกรณ์เท่านั้น หากตั้งค่าไว้ แอปจะไม่ติดตั้งในที่จัดเก็บข้อมูลภายนอก เช่น การ์ด SD หากพื้นที่เก็บข้อมูลภายในเต็ม ระบบจะไม่ติดตั้งแอป ลักษณะการทำงานนี้เป็นค่าเริ่มต้นหากคุณไม่ได้กำหนด android:installLocation
"auto" แอปสามารถติดตั้งในที่จัดเก็บข้อมูลภายนอกได้ แต่ระบบจะติดตั้งแอปไว้ในที่จัดเก็บข้อมูลภายในโดยค่าเริ่มต้น หากพื้นที่เก็บข้อมูลภายในเต็ม ระบบจะติดตั้งแอปลงในที่จัดเก็บข้อมูลภายนอก เมื่อติดตั้งแล้ว ผู้ใช้จะย้ายแอปไปยังพื้นที่เก็บข้อมูลภายในหรือภายนอกได้ผ่านการตั้งค่าระบบ
"preferExternal" แอปต้องการติดตั้งในพื้นที่เก็บข้อมูลภายนอก เราไม่รับประกันว่าระบบจะดำเนินการตามคำขอนี้ แอปอาจติดตั้งในที่เก็บข้อมูลภายในหากสื่อภายนอกไม่พร้อมใช้งานหรือเต็ม เมื่อติดตั้งแล้ว ผู้ใช้จะย้ายแอปไปยังพื้นที่เก็บข้อมูลภายในหรือภายนอกได้ผ่านการตั้งค่าระบบ

หมายเหตุ: โดยค่าเริ่มต้น แอปจะติดตั้งในที่จัดเก็บข้อมูลภายในและติดตั้งในที่จัดเก็บข้อมูลภายนอกไม่ได้ เว้นแต่คุณจะกำหนดแอตทริบิวต์นี้เป็น "auto" หรือ "preferExternal"

สิ่งที่จะเกิดขึ้นเมื่อแอปติดตั้งในที่จัดเก็บข้อมูลภายนอก

  • ระบบจะบันทึกไฟล์ APK ลงในที่จัดเก็บข้อมูลภายนอก แต่ข้อมูลแอป เช่น ฐานข้อมูล จะยังคงบันทึกอยู่ในหน่วยความจำภายในของอุปกรณ์
  • คอนเทนเนอร์ที่บันทึกไฟล์ APK ได้รับการเข้ารหัสด้วยคีย์ที่อนุญาตให้แอปทำงานได้เฉพาะในอุปกรณ์ที่ติดตั้งเท่านั้น ผู้ใช้จะโอนการ์ด SD ไปยังอุปกรณ์อื่นและใช้แอปที่ติดตั้งไว้ในการ์ดไม่ได้ คุณใช้การ์ด SD หลายใบกับอุปกรณ์เครื่องเดียวกันได้
  • ผู้ใช้สามารถย้ายแอปไปยังพื้นที่เก็บข้อมูลภายในได้ตามคำขอ

นอกจากนี้ ผู้ใช้อาจขอย้ายแอปจากพื้นที่เก็บข้อมูลภายในไปยังพื้นที่เก็บข้อมูลภายนอกด้วย อย่างไรก็ตาม ระบบจะไม่อนุญาตให้ผู้ใช้ย้ายแอปไปยังที่จัดเก็บข้อมูลภายนอกหากตั้งค่าแอตทริบิวต์นี้เป็น "internalOnly" ซึ่งเป็นการตั้งค่าเริ่มต้น

ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้แอตทริบิวต์นี้ รวมถึงวิธีรักษาความเข้ากันได้แบบย้อนหลังได้ที่ตำแหน่งการติดตั้งแอป

เปิดตัวใน: API ระดับ 8

เปิดตัวใน
API ระดับ 1 สำหรับแอตทริบิวต์ทั้งหมด เว้นแต่จะระบุไว้เป็นอย่างอื่นในคำอธิบายแอตทริบิวต์
ดูข้อมูลเพิ่มเติมได้ที่
<application>