Uygulama yükleme konumu

API Düzeyi 8'den itibaren, uygulamanızın harici depolama alanına (örneğin, cihazın SD kartı) yüklenmesine izin verebilirsiniz. Bu, uygulamanız için android:installLocation manifest özelliğiyle beyan edebileceğiniz isteğe bağlı bir özelliktir. Bu özelliği beyan etmezseniz uygulamanız yalnızca dahili depolama alanına yüklenir ve harici depolamaya taşınamaz.

Sistemin uygulamanızı harici depolamaya yüklemesine izin vermek için manifest dosyanızı, <manifest> öğesindeki android:installLocation özelliğini "preferExternal" veya "auto" değeriyle içerecek şekilde değiştirin. Örneğin:

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

"preferExternal" için boyut belirtirseniz uygulamanızın harici depolamaya yüklenmesini istemiş olursunuz, ancak sistem, uygulamanızın harici depolamaya yükleneceğini garanti etmez. Harici depolama alanı doluysa sistem bunu dahili depolama alanına yükler. Ayrıca kullanıcı, uygulamanızı iki konum arasında taşıyabilir.

"auto" özelliğini beyan ederseniz uygulamanızın harici depolamaya yüklenebileceğini belirtirsiniz ancak yükleme konumu tercihiniz yoktur. Uygulamanızın nereye yükleneceğine sistem, çeşitli faktörlere göre karar verir. Ayrıca kullanıcı da uygulamanızı iki konum arasında taşıyabilir.

Uygulamanız harici depolama cihazına yüklendiğinde:

  • Harici depolama birimi cihaza takıldığı sürece uygulama performansı üzerinde herhangi bir etkisi olmaz.
  • .apk dosyası harici depolamaya kaydedilir ancak tüm gizli kullanıcı verileri, veritabanları, optimize edilmiş .dex dosyaları ve çıkarılan yerel kod dahili cihaz belleğine kaydedilir.
  • Uygulamanızın depolandığı benzersiz kapsayıcı, rastgele oluşturulan bir anahtarla şifrelenir. Bu anahtarın şifresini yalnızca uygulamayı ilk yükleyen cihaz çözebilir. Bu nedenle, SD karta yüklenen bir uygulama yalnızca bir cihazda çalışır.
  • Kullanıcı, sistem ayarlarını kullanarak uygulamanızı dahili depolama alanına taşıyabilir.

Uyarı: Kullanıcı, USB yığın depolama alanının bir bilgisayarla dosya paylaşmasını etkinleştirdiğinde veya sistem ayarlarını kullanarak SD kartın bağlantısını kestiğinde, harici depolama biriminin cihazdaki bağlantısı kaldırılır ve harici depolama biriminde çalışan tüm uygulamalar hemen sonlandırılır.

Geriye dönük uyumluluk

Uygulamanızın harici depolamaya yüklenebilmesi, yalnızca API Düzeyi 8 (Android 2.2) veya üstünü çalıştıran cihazlarda kullanılabilen bir özelliktir. API Düzeyi 8'den önce oluşturulmuş mevcut uygulamalar her zaman dahili depolama alanına yüklenir ve harici depolama alanına taşınamaz (API Düzeyi 8 olan cihazlarda bile). Ancak uygulamanız 8'den düşük bir API Düzeyi'ni destekleyecek şekilde tasarlandıysa API Düzeyi 8 veya üstü olan cihazlarda bu özelliği desteklemeyi seçebilir ve 8'in altında bir API Düzeyi kullanan cihazlarla uyumlu olmaya devam edebilirsiniz.

Harici depolama alanına yüklemeye izin vermek ve API Düzeyi 8'den düşük sürümlerle uyumlu olmaya devam etmek için:

  1. android:installLocation özelliğini <manifest> öğesine "auto" veya "preferExternal" değeriyle ekleyin.
  2. android:minSdkVersion özelliğinizi olduğu gibi bırakın ("8'den küçük bir değer) ve uygulama kodunuzun yalnızca bu düzeyle uyumlu API'leri kullandığından emin olun.
  3. Uygulamanızı derlemek için derleme hedefinizi API Düzeyi 8 olarak değiştirin. Eski Android kitaplıkları android:installLocation özelliğini anlamadıkları ve mevcut olduğunda uygulamanızı derlemeyecekleri için bu gereklidir.

Uygulamanız, API Düzeyi 8'den düşük olan bir cihaza yüklendiğinde android:installLocation özelliği yok sayılır ve uygulama dahili depolama alanına yüklenir.

Dikkat: Bunun gibi XML işaretlemesi daha eski platformlar tarafından yoksayılacak olsa da, kodunuzda geriye dönük uyumluluk sağlamak için gerekli işleri yapmadığınız sürece, minSdkVersion değeri "8"den küçükken API Düzeyi 8'de sunulan programlama API'lerini kullanmamaya dikkat etmelisiniz.

Harici depolama cihazına YÜKLENMEMESİ GEREKEN uygulamalar

Kullanıcı, USB yığın depolama biriminin bilgisayarla dosya paylaşmasına izin verdiğinde (veya harici depolama biriminin başka bir şekilde bağlantısını kestiğinde veya kaldırdığında) harici depolama cihazına yüklü ve çalışmakta olan uygulamalar sonlandırılır. Yığın depolama devre dışı bırakılıp harici depolama birimi cihaza yeniden eklenene kadar sistem, uygulamayı etkin bir şekilde tanımaz. Bu, uygulamayı sonlandırıp kullanıcının kullanımına sunmanın yanı sıra bazı uygulama türlerini daha ciddi bir şekilde bozabilir. Uygulamanızın sürekli olarak beklendiği gibi davranması için aşağıdaki özelliklerden herhangi birini kullanması durumunda uygulamanızın harici depolama cihazına yüklenmesine izin vermemeniz gerekir.

Hizmetler
Harici depolama alanı yeniden eklendiğinde Service adlı çalışanınız sonlandırılır ve yeniden başlatılmaz. Bu hizmete bağlı uygulamalar, harici depolama alanına yüklenen uygulamalar sistem tarafından tekrar kullanılabilir hale geldiğinde harici depolama alanına yüklü olmayan tüm uygulamaları bildiren ACTION_EXTERNAL_APPLICATIONS_AVAILABLE yayın amacına kaydolabilir. Bu yayını aldıktan sonra uygulamalar hizmetinize bağlanmayı deneyebilir.
Alarm Hizmetleri
AlarmManager sağlayıcısına kayıtlı alarmlarınız iptal edilecek. Harici depolama alanı yeniden takıldığında tüm alarmları manuel olarak yeniden kaydetmeniz gerekir.
Giriş Yöntemi Motorları
IME'niz varsayılan IME ile değiştirilir. Harici depolama birimi yeniden eklendiğinde kullanıcı, IME'nizi tekrar etkinleştirmek için sistem ayarlarını açabilir.
Animasyonlu Duvar Kağıtları
Çalışan Animasyonlu Duvar Kağıdı, varsayılan Animasyonlu Duvar Kağıdı ile değiştirilecek. Harici depolama birimi tekrar takıldığında kullanıcı, Animasyonlu Duvar Kağıdınızı tekrar seçebilir.
Uygulama Widget'ları
Uygulama Widget'ınız ana ekrandan kaldırılacak. Harici depolama yeniden takıldığında, sistem ana ekran uygulamasını sıfırlayana kadar (genellikle sistem yeniden başlatılana kadar) kullanıcı, Uygulama Widget'ınızı seçemez .
Hesap Yöneticileri
Harici depolama alanı tekrar eklenene kadar, AccountManager ile oluşturulan hesaplarınız kaybolacak.
Senkronizasyon Adaptörleri
Harici depolama alanı yeniden takılana kadar AbstractThreadedSyncAdapter cihazınız ve tüm senkronizasyon işlevleri çalışmaz.
Cihaz Yöneticileri
DeviceAdminReceiver cihazınız ve tüm yönetici özellikleri devre dışı bırakılacak. Bu durum, cihaz işlevselliği üzerinde öngörülemeyen sonuçlar doğurabilir ve harici depolama tekrar takıldıktan sonra da devam edebilir.
Yayın Alıcıları "Başlatma tamamlandı" ifadesini dinliyor
Sistem, ACTION_BOOT_COMPLETED yayınını harici depolama cihaza takılmadan önce yayınlar. Uygulamanız harici depolama alanına yüklenirse bu yayını hiçbir zaman alamaz.

Uygulamanız yukarıda listelenen özelliklerden herhangi birini kullanıyorsa uygulamanızın harici depolamaya yüklenmesine izin vermemelisiniz. Sistem, varsayılan olarak uygulamanızın harici depolamaya yüklenmesine izin vermez. Bu nedenle mevcut uygulamalarınız için endişelenmenize gerek yoktur. Ancak, uygulamanızın harici depolama birimine asla yüklenmemesi gerektiğinden eminseniz, android:installLocation öğesini "internalOnly" değeriyle belirterek bunu net bir şekilde belirtmeniz gerekir. Bu, varsayılan davranışı değiştirmese de uygulamanızın yalnızca dahili depolama alanına yüklenmesi gerektiği açıkça belirtilir ve hem size hem de diğer geliştiricilere bu kararın alındığını hatırlatır.

Harici depolama cihazına yüklenmesi gereken uygulamalar

Basitçe açıklamak gerekirse, önceki bölümde listelenen özellikleri kullanmayan her şey harici depolamaya yüklendiğinde güvenlidir. Büyük oyunlar genellikle harici depolamaya yüklenmesine izin vermesi gereken uygulama türleridir. Çünkü oyunlar etkin değilken ek hizmetler sunmaz. Harici depolama alanı kullanılamaz duruma geldiğinde ve bir oyun işlemi sonlandırıldığında, depolama alanı tekrar kullanılabilir hale geldiğinde ve kullanıcı oyunu yeniden başlattığında (oyunun normal Etkinlik yaşam döngüsü içinde durumunu düzgün bir şekilde kaydettiği varsayılır) görünür bir etki olmamalıdır.

Uygulamanız APK dosyası için birkaç megabayt gerektiriyorsa kullanıcıların dahili depolama alanlarında yer tutabilmesi için uygulamayı harici depolamaya yüklemek üzere etkinleştirip etkinleştirmeyeceğinize dikkat etmeniz gerekir.

İlgili daha fazla bilgi için şuraya bakın: <manifest>