ตำแหน่งติดตั้งแอป

เริ่มตั้งแต่ API ระดับ 8 คุณสามารถอนุญาตให้ติดตั้งแอปพลิเคชันของคุณใน ที่จัดเก็บข้อมูลภายนอก (เช่น การ์ด SD ของอุปกรณ์) นี่คือฟีเจอร์ที่ไม่บังคับซึ่งคุณประกาศได้ สำหรับแอปพลิเคชันที่มีแอตทริบิวต์ไฟล์ Manifest android:installLocation หากอยากรู้ ไม่ประกาศแอตทริบิวต์นี้ ระบบจะติดตั้งแอปพลิเคชันของคุณในที่จัดเก็บข้อมูลภายใน เท่านั้น และไม่สามารถย้ายไปยังที่จัดเก็บข้อมูลภายนอก

หากต้องการอนุญาตให้ระบบติดตั้งแอปพลิเคชันของคุณในที่จัดเก็บข้อมูลภายนอก ให้แก้ไข ไฟล์ Manifest ที่จะรวมแอตทริบิวต์ android:installLocation ในองค์ประกอบ <manifest> ที่มีค่าเป็น "preferExternal" หรือ "auto" ดังตัวอย่างต่อไปนี้

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:installLocation="preferExternal"
    ... >

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

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

เมื่อติดตั้งแอปพลิเคชันในที่จัดเก็บข้อมูลภายนอกแล้ว

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

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

ความเข้ากันได้แบบย้อนหลัง

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

เพื่ออนุญาตการติดตั้งในที่จัดเก็บข้อมูลภายนอกและยังคงใช้งานร่วมกับเวอร์ชันที่ต่ำกว่า API ได้ ระดับ 8:

  1. ระบุแอตทริบิวต์ android:installLocation ด้วยค่า "auto" หรือ "preferExternal" ใน<manifest>
  2. ปล่อยแอตทริบิวต์ android:minSdkVersion ไว้ตามเดิม (บางส่วน น้อยลง "8") และตรวจสอบว่าโค้ดของแอปพลิเคชันใช้เฉพาะ API ที่เข้ากันได้กับ
  3. หากต้องการคอมไพล์แอปพลิเคชัน ให้เปลี่ยนเป้าหมายบิลด์เป็น API ระดับ 8 นี่คือ จำเป็นเพราะไลบรารี Android รุ่นเก่าไม่เข้าใจ android:installLocation และจะไม่คอมไพล์แอปพลิเคชันหากมี

เมื่อติดตั้งแอปพลิเคชันในอุปกรณ์ที่มีระดับ API ต่ำกว่า 8 ระบบจะไม่สนใจแอตทริบิวต์ android:installLocation และจะมีการติดตั้งแอปพลิเคชันในอุปกรณ์ภายใน พื้นที่เก็บข้อมูล

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

แอปพลิเคชันที่ไม่ควรติดตั้งบนที่จัดเก็บข้อมูลภายนอก

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

บริการ
การวิ่งของคุณ Service คือ หยุดทำงานและไม่รีสตาร์ทเมื่อต่อเชื่อมที่จัดเก็บข้อมูลภายนอกอีกครั้ง การสมัครงาน ที่เชื่อมโยงกับบริการนี้สามารถลงทะเบียนสำหรับ ACTION_EXTERNAL_APPLICATIONS_AVAILABLE จุดประสงค์ในการออกอากาศ ซึ่งจะแจ้งเตือนแอปพลิเคชันทั้งหมดที่ไม่ได้ ติดตั้งบนที่จัดเก็บข้อมูลภายนอกเมื่อแอปพลิเคชันติดตั้งภายนอก ใช้ที่เก็บข้อมูลได้อีกครั้งในระบบ หลังจากได้รับอีเมลนี้ ออกอากาศ แอปพลิเคชันอาจพยายามเชื่อมโยงกับบริการของคุณได้
บริการเตือนภัย
ระบบจะยกเลิกการปลุกที่คุณลงทะเบียนกับ AlarmManager คุณต้อง ลงทะเบียนการปลุกทั้งหมดด้วยตนเองอีกครั้งเมื่อต่อเชื่อมที่จัดเก็บข้อมูลภายนอกอีกครั้ง
เครื่องมือวิธีการป้อนข้อมูล
IME ของคุณจะ จะแทนที่ด้วย IME เริ่มต้น เมื่อต่อเชื่อมที่จัดเก็บข้อมูลภายนอกอีกครั้ง ผู้ใช้จะเปิดการตั้งค่าระบบได้ เพื่อเปิดใช้ IME อีกครั้ง
วอลเปเปอร์เคลื่อนไหว
วอลเปเปอร์เคลื่อนไหวของคุณ จะถูกแทนที่ด้วยวอลเปเปอร์เคลื่อนไหวเริ่มต้น เมื่อต่อเชื่อมที่จัดเก็บข้อมูลภายนอกอีกครั้ง ผู้ใช้สามารถ ให้เลือกวอลเปเปอร์เคลื่อนไหวอีกครั้ง
แอปวิดเจ็ต
ระบบจะนำวิดเจ็ตแอปของคุณออก จากหน้าจอหลัก เมื่อต่อเชื่อมที่จัดเก็บข้อมูลภายนอกอีกครั้งแล้ว วิดเจ็ตแอปจะไม่ เพื่อให้ผู้ใช้เลือกจนกว่าระบบจะรีเซ็ตแอปพลิเคชันเริ่มต้น (โดยปกติจะไม่ทำจนกระทั่ง รีบูตระบบ)
ผู้จัดการฝ่ายดูแลลูกค้า
บัญชีของคุณที่สร้างด้วย AccountManager จะหายไปจนถึง ต่อเชื่อมที่จัดเก็บข้อมูลภายนอกอีกครั้งแล้ว
ซิงค์อะแดปเตอร์
AbstractThreadedSyncAdapter และฟังก์ชันการซิงค์ทั้งหมด จะไม่ทำงานจนกว่าจะต่อเชื่อมที่จัดเก็บข้อมูลภายนอกอีกครั้ง
ผู้ดูแลระบบอุปกรณ์
DeviceAdminReceiver และความสามารถทั้งหมดของผู้ดูแลระบบจะ ซึ่งอาจส่งผลกระทบที่คาดไม่ถึงต่อฟังก์ชันการทำงานของอุปกรณ์ ซึ่งอาจ ยังคงอยู่หลังจากต่อเชื่อมที่จัดเก็บข้อมูลภายนอกอีกครั้ง
เครื่องรับสัญญาณประกาศกำลังฟังคำว่า "บูตเสร็จแล้ว"
ระบบส่งการออกอากาศ ACTION_BOOT_COMPLETED ก่อนที่จะต่อเชื่อมที่จัดเก็บข้อมูลภายนอกกับอุปกรณ์ หากแอปพลิเคชันของคุณติดตั้งใน ที่จัดเก็บข้อมูลภายนอกก็จะไม่สามารถรับการออกอากาศนี้ได้

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

แอปพลิเคชันที่ควรติดตั้งบนที่จัดเก็บข้อมูลภายนอก

หรือพูดง่ายๆ ก็คือ ทุกสิ่งที่ไม่ได้ใช้คุณลักษณะตามที่แสดงในส่วนก่อนหน้านี้ ปลอดภัยเมื่อติดตั้งในที่จัดเก็บข้อมูลภายนอก เกมขนาดใหญ่มักเป็นเกมประเภท แอปพลิเคชันที่ควรอนุญาตให้ติดตั้งบนที่จัดเก็บข้อมูลภายนอกได้ เนื่องจากเกมมักไม่ ให้บริการเพิ่มเติมเมื่อไม่มีการใช้งาน เมื่อที่จัดเก็บข้อมูลภายนอกไม่พร้อมใช้งานและเกม หยุดการทำงาน จะไม่มีผลกระทบใดปรากฏเมื่อพื้นที่เก็บข้อมูลใช้งานได้อีกครั้ง และ ผู้ใช้รีสตาร์ทเกม (ในกรณีที่เกมบันทึกสถานะไว้อย่างถูกต้องในช่วง วงจรกิจกรรม)

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

สำหรับข้อมูลเพิ่มเติมที่เกี่ยวข้อง โปรดดูที่ <ประจักษ์>