Dimulai dengan API Level 8, Anda dapat mengizinkan aplikasi diinstal di penyimpanan eksternal (misalnya, kartu SD perangkat). Ini adalah fitur opsional yang dapat Anda deklarasikan
untuk aplikasi dengan atribut manifes android:installLocation
. Jika Anda
tidak mendeklarasikan atribut ini, aplikasi Anda hanya akan diinstal di penyimpanan internal
dan tidak dapat dipindahkan ke penyimpanan eksternal.
Untuk mengizinkan sistem menginstal aplikasi Anda di penyimpanan eksternal, modifikasi file manifes Anda untuk menyertakan atribut android:installLocation
dalam elemen <manifest>
, dengan nilai "preferExternal
" atau "auto
". Misalnya:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="preferExternal" ... >
Jika Anda mendeklarasikan "preferExternal
", Anda meminta agar aplikasi diinstal di penyimpanan eksternal, tetapi sistem tidak menjamin bahwa aplikasi akan diinstal di penyimpanan eksternal. Jika penyimpanan eksternal penuh, sistem akan menginstalnya di penyimpanan internal. Pengguna juga dapat memindahkan aplikasi Anda di antara dua lokasi.
Jika Anda mendeklarasikan "auto
", Anda mengindikasikan bahwa aplikasi mungkin diinstal pada penyimpanan eksternal, tetapi Anda tidak memiliki preferensi untuk lokasi penginstalan. Sistem akan memutuskan di mana menginstal aplikasi Anda berdasarkan beberapa faktor. Pengguna juga dapat memindahkan aplikasi Anda di antara dua lokasi.
Saat aplikasi Anda diinstal di penyimpanan eksternal:
- Tidak ada efek pada kinerja aplikasi selama penyimpanan eksternal dipasang pada perangkat.
- File
.apk
disimpan di penyimpanan eksternal, tetapi semua data pengguna pribadi, database, file.dex
yang dioptimalkan, dan kode native yang diekstraksi disimpan di memori perangkat internal. - Penampung unik tempat aplikasi Anda disimpan dienkripsi dengan kunci yang dibuat secara acak, yang hanya dapat didekripsi oleh perangkat yang awalnya menginstalnya. Dengan demikian, aplikasi yang diinstal di kartu SD hanya berfungsi untuk satu perangkat.
- Pengguna dapat memindahkan aplikasi Anda ke penyimpanan internal melalui setelan sistem.
Peringatan: Saat pengguna mengaktifkan penyimpanan massal USB untuk berbagi file dengan komputer atau melepas kartu SD melalui setelan sistem, penyimpanan eksternal dilepas dari perangkat dan semua aplikasi yang berjalan di penyimpanan eksternal segera ditutup.
Kompatibilitas mundur
Kemampuan aplikasi Anda untuk menginstal di penyimpanan eksternal adalah fitur yang hanya tersedia pada perangkat yang menjalankan API Level 8 (Android 2.2) atau lebih tinggi. Aplikasi yang sudah ada yang dibangun sebelum API Level 8 akan selalu diinstal di penyimpanan internal dan tidak dapat dipindahkan ke penyimpanan eksternal (bahkan pada perangkat dengan API Level 8). Namun, jika aplikasi Anda didesain untuk mendukung Level API lebih rendah dari 8, Anda dapat memilih untuk mendukung fitur ini untuk perangkat dengan API Level 8 atau lebih tinggi dan tetap kompatibel dengan perangkat yang menggunakan Level API lebih rendah dari 8.
Untuk mengizinkan penginstalan di penyimpanan eksternal dan tetap kompatibel dengan versi yang lebih rendah dari API Level 8:
- Sertakan atribut
android:installLocation
dengan nilai "auto
" atau "preferExternal
" dalam elemen<manifest>
. - Biarkan atribut
android:minSdkVersion
yang telah ditetapkan (sesuatu kurang dari "8") dan pastikan kode aplikasi Anda hanya menggunakan API yang kompatibel dengan level tersebut. - Untuk mengompilasi aplikasi Anda, ubah target build Anda ke API Level 8. Ini diperlukan karena library Android yang lama tidak memahami atribut
android:installLocation
dan tidak akan mengompilasi aplikasi Anda saat ada.
Bila aplikasi Anda diinstal pada perangkat dengan API Level lebih rendah dari 8, atribut android:installLocation
diabaikan dan aplikasi diinstal di penyimpanan
internal.
Perhatian: Meskipun markup XML seperti ini akan diabaikan oleh
platform yang lebih lama, Anda harus berhati-hati untuk tidak menggunakan API pemrograman yang diperkenalkan di API Level 8, sementara minSdkVersion
Anda kurang dari "8", kecuali jika Anda melakukan pekerjaan yang diperlukan untuk memberikan kompatibilitas mundur dalam kode Anda.
Aplikasi yang TIDAK boleh diinstal di penyimpanan eksternal
Saat pengguna mengaktifkan penyimpanan massal USB untuk berbagi file dengan komputer mereka (atau melepaskan atau menghapus penyimpanan eksternal), aplikasi apa pun yang diinstal di penyimpanan eksternal dan yang sedang berjalan akan ditutup. Sistem secara efektif menjadi tidak mengetahui aplikasi sampai penyimpanan massal dinonaktifkan dan penyimpanan eksternal dipasang kembali pada perangkat. Selain menutup aplikasi dan membuatnya tidak tersedia bagi pengguna, ini dapat merusak beberapa jenis aplikasi dengan cara yang lebih serius. Agar aplikasi Anda secara konsisten berperilaku seperti yang diharapkan, Anda tidak boleh mengizinkan aplikasi Anda diinstal di penyimpanan eksternal jika menggunakan salah satu dari fitur berikut, karena konsekuensi yang disebut saat penyimpanan eksternal dilepas:
- Layanan
Service
Anda ditutup dan tidak dimulai ulang saat penyimpanan eksternal dipasang lagi. Aplikasi yang terikat pada layanan ini dapat mendaftar untuk intent siaranACTION_EXTERNAL_APPLICATIONS_AVAILABLE
, yang memberi tahu semua aplikasi yang tidak diinstal di penyimpanan eksternal bila aplikasi yang diinstal di penyimpanan eksternal telah tersedia lagi untuk sistem. Setelah menerima siaran ini, aplikasi dapat berusaha untuk mengikat ke layanan Anda.- Layanan Alarm
- Alarm Anda yang terdaftar dengan
AlarmManager
akan dibatalkan. Anda harus mendaftar ulang alarm secara manual saat penyimpanan eksternal dipasang kembali. - Mesin Metode Input
- IME Anda akan diganti oleh IME default. Saat penyimpanan eksternal dipasang kembali, pengguna dapat membuka pengaturan sistem untuk mengaktifkan IME Anda lagi.
- Wallpaper Animasi
- Wallpaper Animasi Anda yang berjalan akan digantikan oleh Wallpaper Animasi default. Saat penyimpanan eksternal dipasang kembali, pengguna dapat memilih Wallpaper Animasi Anda lagi.
- Widget Aplikasi
- Widget Aplikasi Anda akan dihapus dari layar utama. Saat penyimpanan eksternal dipasang kembali, Widget Aplikasi Anda tidak akan tersedia bagi pengguna untuk dipilih sampai sistem mereset aplikasi utama (biasanya tidak sampai sistem dimulai ulang).
- Manajer Akun
- Akun Anda yang dibuat dengan
AccountManager
akan hilang sampai penyimpanan eksternal dipasang kembali. - Adaptor Sinkronisasi
AbstractThreadedSyncAdapter
Anda dan semua fungsi sinkronisasi tidak akan berfungsi sampai penyimpanan eksternal dipasang kembali.- Administrator Perangkat
DeviceAdminReceiver
Anda dan semua kemampuan adminnya akan dinonaktifkan, yang dapat memiliki konsekuensi yang tidak terduga untuk fungsi perangkat, yang dapat bertahan setelah penyimpanan eksternal dipasang kembali.- Penerima siaran yang memproses "boot selesai"
- Sistem mengirimkan siaran
ACTION_BOOT_COMPLETED
sebelum penyimpanan eksternal dipasang ke perangkat. Jika aplikasi Anda diinstal pada penyimpanan eksternal, ia tidak akan pernah bisa menerima siaran ini.
Jika aplikasi Anda menggunakan salah satu fitur yang tercantum di atas, Anda tidak boleh membiarkan
aplikasi Anda menginstal pada penyimpanan eksternal. Secara default, sistem tidak akan membiarkan
aplikasi Anda menginstal pada penyimpanan eksternal, jadi Anda tidak perlu mengkhawatirkan
aplikasi yang ada. Namun, jika Anda yakin aplikasi Anda tidak akan pernah diinstal pada penyimpanan eksternal, Anda harus menjelaskannya dengan mendeklarasikan android:installLocation
dengan nilai "internalOnly
". Meskipun ini tidak mengubah perilaku default, itu secara eksplisit menyatakan bahwa aplikasi Anda hanya boleh diinstal pada penyimpanan internal dan berfungsi sebagai pengingat bagi Anda dan developer lain bahwa keputusan ini telah dibuat.
Aplikasi yang harus diinstal pada penyimpanan eksternal
Secara sederhana, apa pun yang tidak menggunakan fitur yang tercantum di bagian sebelumnya aman saat diinstal pada penyimpanan eksternal. Game besar biasanya jenis aplikasi yang memungkinkan penginstalan pada penyimpanan eksternal, karena game biasanya tidak menyediakan layanan tambahan saat tidak aktif. Saat penyimpanan eksternal menjadi tidak tersedia dan proses game dimatikan, seharusnya tidak ada efek yang terlihat ketika penyimpanan menjadi tersedia lagi dan pengguna merestart game (dengan asumsi bahwa game dengan benar menyelamatkan kondisinya selama Siklus proses aktivitas normal).
Jika aplikasi Anda memerlukan beberapa megabyte untuk file APK, Anda harus mempertimbangkan apakah akan mengaktifkan aplikasi untuk menginstal pada penyimpanan eksternal sehingga pengguna dapat menghemat ruang pada penyimpanan internal mereka.
Untuk informasi terkait lainnya, lihat: <manifes>