Lokasi instal aplikasi

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:

  1. Sertakan atribut android:installLocation dengan nilai "auto" atau "preferExternal" dalam elemen <manifest>.
  2. Biarkan atribut android:minSdkVersion yang telah ditetapkan (sesuatu kurang dari "8") dan pastikan kode aplikasi Anda hanya menggunakan API yang kompatibel dengan level tersebut.
  3. Untuk mengompilasi aplikasi, ubah target build Anda ke API Level 8. Hal ini diperlukan karena library Android lama tidak memahami atribut android:installLocation dan tidak akan mengompilasi aplikasi Anda saat atribut tersebut 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 siaran ACTION_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 sinkronisasinya 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>