เริ่มตั้งแต่ 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:
- ระบุแอตทริบิวต์
android:installLocation
ด้วยค่า "auto
" หรือ "preferExternal
" ใน<manifest>
- ปล่อยแอตทริบิวต์
android:minSdkVersion
ไว้ตามเดิม (บางส่วน น้อยลง "8") และตรวจสอบว่าโค้ดของแอปพลิเคชันใช้เฉพาะ API ที่เข้ากันได้กับ - หากต้องการคอมไพล์แอปพลิเคชัน ให้เปลี่ยนเป้าหมายบิลด์เป็น 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 คุณควร โปรดพิจารณาอย่างรอบคอบว่าจะเปิดใช้งานแอปพลิเคชันเพื่อติดตั้งลงในที่จัดเก็บข้อมูลภายนอกหรือไม่ เพื่อที่ ผู้ใช้สามารถรักษาพื้นที่ในที่จัดเก็บข้อมูลภายในของตนได้
สำหรับข้อมูลเพิ่มเติมที่เกี่ยวข้อง โปรดดูที่ <ประจักษ์>