<ไฟล์ 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>

ที่อยู่ใน:
ไม่มี

ต้องมีข้อมูลต่อไปนี้
<application>
สามารถมีข้อมูลต่อไปนี้
<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" เพื่อหลีกเลี่ยงการใช้การแชร์ user ID ในการติดตั้งของผู้ใช้ใหม่

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

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

แซนด์บ็อกซ์ระดับ 2 มีข้อจำกัดดังต่อไปนี้

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

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

เมื่อติดตั้งแอปแล้ว คุณจะอัปเดตค่าแซนด์บ็อกซ์เป้าหมายให้เป็นค่าที่สูงขึ้นได้เท่านั้น หากต้องการดาวน์เกรดค่าแซนด์บ็อกซ์เป้าหมาย ให้ถอนการติดตั้งแอป และแทนที่ด้วยเวอร์ชันที่ 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
หมายเลขเวอร์ชันที่แสดงต่อผู้ใช้ แอตทริบิวต์นี้ตั้งค่าเป็นไฟล์ข้อมูล RAW หรือเป็นการอ้างอิงไปยังแหล่งข้อมูลสตริง สตริงไม่มีวัตถุประสงค์อื่น มากกว่าที่จะแสดงต่อผู้ใช้ การคงไว้ชั่วคราวของแอตทริบิวต์ versionCode หมายเลขเวอร์ชันนัยสำคัญที่ใช้เป็นการภายใน
android:installLocation
ตำแหน่งเริ่มต้นสำหรับติดตั้งของแอป ระบบยอมรับสตริงคีย์เวิร์ดต่อไปนี้

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

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

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

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

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

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

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

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

ดูเพิ่มเติม
<application>