Play Feature Delivery'ye genel bakış

Google Play'in uygulama sunma modeli, Android Uygulama Paketleri kullanarak her kullanıcının cihaz yapılandırması için optimize edilmiş APK'lar oluşturur ve sunar. Böylece kullanıcılar yalnızca uygulamanızı çalıştırmak için ihtiyaç duydukları kodu ve kaynakları indirir.

Play Feature Delivery, uygulamanızın belirli özelliklerinin koşullu olarak sunulmasına veya isteğe bağlı olarak indirilmesine olanak tanıyan uygulama paketlerinin gelişmiş özelliklerini kullanır. Bunu yapmak için önce bu özellikleri temel uygulamanızdan özellik modüllerine ayırmanız gerekir.

Özellik modülü derleme yapılandırması

Android Studio'yu kullanarak yeni bir özellik modülü oluşturduğunuzda IDE, modülün build.gradle dosyasına aşağıdaki Gradle eklentisini uygular.

// The following applies the dynamic-feature plugin to your feature module.
// The plugin includes the Gradle tasks and properties required to configure and build
// an app bundle that includes your feature module.

plugins {
  id 'com.android.dynamic-feature'
}

Standart uygulama eklentisinde kullanılabilen özelliklerin birçoğu özellik modülünüzde de kullanılabilir. Aşağıdaki bölümlerde, özellik modülünüzün derleme yapılandırmasına eklemeniz ve eklememeniz gereken özellikler açıklanmaktadır.

Özellik modülü derleme yapılandırmasına dahil edilmeyenler

Her özellik modülü temel modüle bağlı olduğundan belirli yapılandırmaları da devralır. Dolayısıyla, özellik modülünün build.gradle dosyasında aşağıdakileri çıkarmanız gerekir:

  • İmzalama yapılandırmaları: Uygulama paketleri, temel modülde belirttiğiniz imzalama yapılandırmaları kullanılarak imzalanır.
  • minifyEnabled özelliği: Yalnızca temel modülün derleme yapılandırmasından uygulama projenizin tamamı için kod küçültmeyi etkinleştirebilirsiniz. Bu nedenle, bu özelliği özellik modüllerinden çıkarmanız gerekir. Ancak, her özellik modülü için ek ProGuard kuralları belirtebilirsiniz.
  • versionCode ve versionName: Gradle, uygulama paketinizi oluştururken temel modülün sağladığı uygulama sürümü bilgilerini kullanır. Bu özellikleri, özellik modülünüzün build.gradle dosyasından çıkarmanız gerekir.

Temel modülle bir ilişki kurmak

Android Studio özellik modülünüzü oluşturduğunda, aşağıda gösterildiği gibi temel modülün build.gradle dosyasına android.dynamicFeatures özelliğini ekleyerek onu temel modüle görünür hale getirir:

// In the base module’s build.gradle file.
android {
    ...
    // Specifies feature modules that have a dependency on
    // this base module.
    dynamicFeatures = [":dynamic_feature", ":dynamic_feature2"]
}

Ayrıca Android Studio, aşağıda gösterildiği gibi özellik modülünün bir bağımlılığı olarak temel modülü içerir:

// In the feature module’s build.gradle file:
...
dependencies {
    ...
    // Declares a dependency on the base module, ':app'.
    implementation project(':app')
}

Ek ProGuard kuralları belirtme

Uygulama projeniz için kod küçültmeyi yalnızca temel modülün derleme yapılandırması etkinleştirebilir ancak aşağıda gösterildiği gibi proguardFiles özelliğini kullanarak her bir özellik modülüyle özel ProGuard kuralları sağlayabilirsiniz.

android.buildTypes {
     release {
         // You must use the following property to specify additional ProGuard
         // rules for feature modules.
         proguardFiles 'proguard-rules-dynamic-features.pro'
     }
}

Bu ProGuard kurallarının, derleme sırasında diğer modüllerdeki (temel modül dahil) kurallarla birleştirildiğini unutmayın. Dolayısıyla her özellik modülü, yeni bir dizi kural belirtebilir ancak bu kurallar, uygulama projesindeki tüm modüller için geçerli olur.

Uygulamanızı dağıtma

Uygulamanızı özellik modülleri desteğiyle geliştirirken, menü çubuğundan Çalıştır > Çalıştır'ı seçerek (veya araç çubuğundaki Çalıştır düğmesini tıklayarak) uygulamanızı her zamanki gibi bağlı bir cihaza dağıtabilirsiniz.

Uygulama projenizde bir veya daha fazla özellik modülü varsa mevcut çalıştırma/hata ayıklama yapılandırmanızı aşağıdaki gibi değiştirerek uygulamanızı dağıtırken hangi özellikleri dahil edeceğinizi seçebilirsiniz:

  1. Menü çubuğundan Çalıştır > Yapılandırmaları Düzenle'yi seçin.
  2. Çalıştır/Hata Ayıklama Yapılandırmaları iletişim kutusunun soldaki panelinden istediğiniz Android Uygulaması yapılandırmasını seçin.
  3. Genel sekmesinde yer alan Dağıtılacak dinamik özellikler bölümünde, uygulamanızı dağıtırken dahil etmek istediğiniz her özellik modülünün yanındaki kutuyu işaretleyin.
  4. Tamam'ı tıklayın.

Varsayılan olarak Android Studio, uygulamanızı dağıtmak için uygulama paketlerini kullanarak uygulamanızı dağıtmaz. Bunun yerine, IDE, APK boyutu yerine dağıtım hızı için optimize edilmiş APK'ları oluşturur ve cihazınıza yükler. Android Studio'yu bunun yerine bir uygulama paketinden APK'lar ve hazır uygulama deneyimleri derleyip dağıtacak şekilde yapılandırmak için çalıştırma/hata ayıklama yapılandırmanızı değiştirin.

Özel dağıtım için özellik modüllerini kullanın

Özellik modüllerinin benzersiz bir avantajı, uygulamanızın farklı özelliklerinin Android 5.0 (API düzeyi 21) veya sonraki sürümleri çalıştıran cihazlara nasıl ve ne zaman indirileceğini özelleştirebilmenizdir. Örneğin, uygulamanızın ilk indirme boyutunu küçültmek için belirli özellikleri talep üzerine gerektiğinde indirilecek veya yalnızca resim çekme ya da artırılmış gerçeklik özelliklerini destekleme gibi belirli özellikleri destekleyen cihazlar tarafından indirilecek şekilde yapılandırabilirsiniz.

Uygulamanızı uygulama paketi olarak yüklediğinizde varsayılan olarak son derece optimize edilmiş indirmeler elde edeceksiniz. Ancak, daha gelişmiş ve özelleştirilebilir özellik sunma seçenekleri, özellik modülleri kullanılarak uygulamanızın özelliklerinin ek yapılandırılması ve modüler hale getirilmesini gerektirir. Diğer bir deyişle, özellik modülleri, her biri için gerekli şekilde indirilebilecek şekilde yapılandırabileceğiniz modüler özellikler oluşturmak için gereken yapı taşlarını sağlar.

Kullanıcılarınızın online bir pazarda ürün alıp satmasına olanak tanıyan bir uygulama düşünün. Uygulamanın aşağıdaki işlevlerinin her birini makul bir şekilde ayrı özellik modüllerine modüler hale getirebilirsiniz:

  • Hesaba giriş ve hesap oluşturma
  • Pazar yerine göz atma
  • Bir ürünü satışa sunma
  • Ödemeleri işleme

Aşağıdaki tabloda, özellik modüllerinin desteklediği farklı yayınlama seçenekleri ve bunların örnek pazar yeri uygulamasının ilk indirme boyutunu optimize etmek için nasıl kullanılabileceği açıklanmaktadır.

Teslimat seçeneği Davranış Kullanım alanı örneği Başlarken
Yükleme zamanında teslimat Yukarıda açıklanan yayınlama seçeneklerinden hiçbirini yapılandırmayan özellik modülleri, varsayılan olarak uygulama yükleme sırasında indirilir. Gelişmiş yayınlama seçeneklerini kademeli olarak uygulamaya koyabileceğiniz anlamına geldiği için bu önemli bir davranıştır. Örneğin, uygulamanızın özelliklerini modülerleştirmeden yararlanabilir ve isteğe bağlı teslimatı ancak Play Feature Delivery Kitaplığı'nı kullanarak isteğe bağlı indirmeleri tam olarak uyguladıktan sonra etkinleştirebilirsiniz.

Ayrıca, uygulamanız daha sonra özelliklerin kaldırılmasını isteyebilir. Bu nedenle, uygulama yükleme sırasında belirli özelliklere ihtiyaç duyduysanız ancak daha sonra değil, özelliğin cihazdan kaldırılmasını isteyerek yükleme boyutunu küçültebilirsiniz.

Uygulamada belirli eğitim etkinlikleri varsa (örneğin, pazar yerinde öğelerin nasıl alınıp satılacağına dair etkileşimli bir kılavuz) bu özelliği varsayılan olarak uygulama yükleme sırasında dahil edebilirsiniz.

Bununla birlikte uygulama, kullanıcı eğitimi tamamladıktan sonra uygulamanın yüklü boyutunu küçültmek için özelliğin silinmesini isteyebilir.

Gelişmiş yayınlama seçeneği yapılandırmayan özellik modüllerini kullanarak uygulamanızı modüler hale getirin.

Kullanıcının artık ihtiyaç duymayabileceği belirli özellik modüllerini kaldırarak uygulamanızın yüklü boyutunu nasıl küçülteceğinizi öğrenmek için Yüklü modülleri yönetme bölümünü okuyun.

İsteğe bağlı teslimat Uygulamanızın gerektiğinde özellik modülleri istemesine ve indirmesine izin verir. Marketplace uygulamasındaki öğeleri kullananların yalnızca% 20'si satışa sunulan öğeleri yayınlıyorsa kullanıcıların çoğunluğunun ilk indirme boyutunu küçültmek için iyi bir strateji, öğe açıklaması da dahil olmak üzere fotoğraf çekme işlevini sunmak ve bir öğeyi istek üzerine indirilebilir şekilde satışa sunmaktır. Diğer bir deyişle, özellik modülünü, uygulamanın satış işleviyle ilgili olarak yalnızca kullanıcılar satılık öğeleri pazar yerine yerleştirmek istediğinde indirilecek şekilde yapılandırabilirsiniz.

Ayrıca, kullanıcı belirli bir süre sonra artık ürün satmıyorsa uygulama bu özelliğin kaldırılmasını isteyerek uygulamanın yüklü boyutunu küçültebilir.

Özellik modülü oluşturun ve isteğe bağlı teslimatı yapılandırın. Ardından uygulamanız, isteğe bağlı olarak modülü indirme isteğinde bulunmak için Play Özellik Yayınlama Kitaplığı'nı kullanabilir.
Koşullu yayın Modülerleştirilmiş bir özelliğin uygulama yükleme sırasında indirilip indirilmeyeceğini belirlemek için donanım özellikleri, yerel ayar ve minimum API düzeyi gibi belirli kullanıcı cihazı gereksinimlerini belirtmenize olanak tanır. Marketplace uygulaması dünya çapında erişime sahipse yalnızca belirli bölgelerde veya yerel bölgelerde popüler olan ödeme yöntemlerini desteklemeniz gerekebilir. İlk uygulama indirme boyutunu küçültmek amacıyla, belirli ödeme yöntemi türlerini işlemek için ayrı özellik modülleri oluşturabilir ve bunları kayıtlı yerel ayarlarına göre kullanıcının cihazına koşullu olarak yükleyebilirsiniz. Özellik modülü oluşturun ve koşullu yayınlamayı yapılandırın.
Anında teslimat Google Play Instant, kullanıcıların cihazlarına yüklemek zorunda kalmadan uygulamanızla etkileşimde bulunmasına olanak tanır. Bunun yerine, Google Play Store'daki "Şimdi Dene" düğmesini veya oluşturduğunuz bir URL'yi kullanarak uygulamanızı deneyebilirler. Bu içerik yayınlama biçimi, uygulamanızla etkileşimi artırmanızı kolaylaştırır.

Anında teslimat ile Google Play Instant'ı kullanarak kullanıcılarınıza, uygulamanızın belirli özelliklerini yüklemeden anında deneyim sunabilirsiniz.

Küçük bir özellik modülünde oyunun ilk birkaç seviyesini içeren bir oyun düşünün. Bu modülü anında etkinleştirebilirsiniz. Böylece, kullanıcılar bir URL bağlantısıyla veya "Şimdi Dene" düğmesiyle oyunu uygulama yüklemeden anında deneyimleyebilir. Özellik modülü oluşturun ve anında teslimatı yapılandırın. Ardından uygulamanız, isteğe bağlı olarak modülü indirme isteğinde bulunmak için Play Özellik Yayınlama Kitaplığı'nı kullanabilir.

Özellik modüllerini kullanarak uygulama özelliklerinizi modülerleştirmenin sadece ilk adım olduğunu unutmayın. Google Play Instant'ın desteklenmesi için uygulamanızın temel modülünün indirme boyutu ve hazır sürüm etkin bir özelliğin indirme boyutu katı boyut kısıtlamalarına uymalıdır. Daha fazla bilgi için Uygulama veya oyun boyutunu küçülterek hazır uygulama deneyimlerini etkinleştirme konusunu okuyun.

Bir kaynak için URI oluşturma

Özellik modülünde depolanan bir kaynağa URI kullanarak erişmek isterseniz Uri.Builder() kullanarak özellik modülü kaynak URI'si oluşturmak için şu adımları uygulayabilirsiniz:

Kotlin

val uri = Uri.Builder()
                .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
                .authority(context.getPackageName()) // Look up the resources in the application with its splits loaded
                .appendPath(resources.getResourceTypeName(resId))
                .appendPath(String.format("%s:%s",
                  resources.getResourcePackageName(resId), // Look up the dynamic resource in the split namespace.
                  resources.getResourceEntryName(resId)
                  ))
                .build()

Java

String uri = Uri.Builder()
                .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
                .authority(context.getPackageName()) // Look up the resources in the application with its splits loaded
                .appendPath(resources.getResourceTypeName(resId))
                .appendPath(String.format("%s:%s",
                  resources.getResourcePackageName(resId), // Look up the dynamic resource in the split namespace.
                  resources.getResourceEntryName(resId)
                  ))
                .build().toString();

Kaynağa giden yolun her bölümü, çalışma zamanında oluşturulur. Böylece, bölünmüş APK'lar yüklendikten sonra doğru ad alanının oluşturulması sağlanır.

URI'nın nasıl oluşturulduğuna bir örnek olarak aşağıdaki adlara sahip bir uygulama ve özellik modüllerinizin olduğunu varsayalım:

  • Uygulama paketi adı: com.example.my_app_package
  • Özelliğin kaynak paketi adı: com.example.my_app_package.my_dynamic_feature

Yukarıdaki kod snippet'indeki resId, özellik modülünüzde "my_video" adlı bir ham dosya kaynağına işaret ediyorsa yukarıdaki Uri.Builder() kodu aşağıdaki çıktıyı verir:

android.resource://com.example.my_app_package/raw/com.example.my_app_package.my_dynamic_feature:my_video

Daha sonra bu URI, uygulamanız tarafından özellik modülünün kaynağına erişmek için kullanılabilir.

URI'nizdeki yolları doğrulamak için özellik modülü APK'nızı incelemek ve paket adını belirlemek üzere APK Analiz Aracı'nı kullanabilirsiniz:

Derlenmiş bir kaynak dosyasının içeriğini inceleyen APK Analiz Aracı'nın ekran görüntüsü.

Şekil 2. Paket adını derlenmiş bir kaynak dosyasında incelemek için APK Analiz Aracı'nı kullanın.

Özellik modüllerinde dikkat edilmesi gereken noktalar

Özellik modülleriyle derleme hızını ve mühendislik hızını artırabilir, ayrıca uygulamanızın özelliklerinin sunumunu büyük ölçüde özelleştirerek uygulamanızın boyutunu küçültebilirsiniz. Bununla birlikte, özellik modüllerini kullanırken unutulmaması gereken bazı kısıtlamalar ve uç durumlar vardır:

  • Koşullu veya isteğe bağlı yayınlama aracılığıyla tek bir cihaza 50 veya daha fazla özellik modülü yüklemek performans sorunlarına neden olabilir. Çıkarılabilir olarak yapılandırılmamış yükleme süresi modülleri, temel modüle otomatik olarak dahil edilir ve her cihazda yalnızca bir özellik modülü olarak sayılır.
  • Yükleme zamanında teslim için kaldırılabilir olarak yapılandırdığınız modüllerin sayısını en fazla 10 olacak şekilde sınırlandırın. Aksi takdirde, uygulamanızın indirilme ve yükleme süresi uzayabilir.
  • Yalnızca Android 5.0 (API düzeyi 21) ve sonraki sürümleri çalıştıran cihazlar isteğe bağlı olarak özellik indirip yüklemeyi destekler. Özelliğinizi Android'in önceki sürümlerinde de kullanılabilir hale getirmek için özellik modülü oluştururken Kaynaştırma'yı etkinleştirin.
  • Uygulamanızın isteğe bağlı olarak sunulan indirilmiş özellik modüllerine erişebilmesi için SplitCompat'ı etkinleştirin.
  • Özellik modülleri, android:exported true olarak ayarlandığı manifest dosyalarında etkinlikleri belirtmemelidir. Bunun nedeni, başka bir uygulama etkinliği başlatmaya çalıştığında cihazın özellik modülünü indirdiğine dair garanti verilmemesidir. Ayrıca uygulamanız, bir özelliğin koduna ve kaynaklarına erişmeye çalışmadan önce bir özelliğin indirildiğini onaylamalıdır. Daha fazla bilgi edinmek için Yüklü modülleri yönetme bölümünü okuyun.
  • Play Feature Delivery, uygulamanızı bir uygulama paketi kullanarak yayınlamanızı gerektirdiğinden, uygulama paketi bilinen sorunları hakkında bilgi sahibi olduğunuzdan emin olun.

Özellik modülü manifest referansı

Android Studio kullanarak yeni bir özellik modülü oluştururken, modülün özellik modülü gibi davranması için gereken manifest özelliklerinin çoğunu IDE'ye ekler. Ayrıca, bazı özellikler derleme sırasında derleme sistemi tarafından yerleştirilir. Böylece, bunları sizin belirtmeniz veya değiştirmeniz gerekmez. Aşağıdaki tabloda, özellik modülleri için önemli olan manifest özellikleri açıklanmaktadır.

Özellik Açıklama
<manifest
...
Bu, tipik <manifest> blokunuzdur.
xmlns:dist="http://schemas.android.com/apk/distribution" Aşağıda daha ayrıntılı olarak açıklanan yeni bir dist: XML ad alanını belirtir.
split="split_name" Android Studio, uygulama paketinizi oluştururken sizin için bu özelliği içerir. Bu nedenle, bu özelliği kendiniz eklememeli veya değiştirmemelisiniz.

Uygulamanızın, Play Özellik Yayınlama Kitaplığı'nı kullanarak isteğe bağlı modül isterken belirttiği modülün adını tanımlar.

Gradle bu özelliğin değerini nasıl belirler?

Varsayılan olarak, Android Studio kullanarak bir özellik modülü oluşturduğunuzda IDE, Gradle ayarları dosyanızda modülü bir Gradle alt projesi olarak tanımlamak için Modül adı olarak belirttiğiniz adı kullanır.

Gradle, uygulama paketinizi oluştururken bu manifest özelliğini modülün manifest dosyasına eklemek için alt proje yolunun son öğesini kullanır. Örneğin, MyAppProject/features/ dizininde yeni bir özellik modülü oluşturur ve Modül adı olarak "dynamic_feature1"i belirtirseniz IDE, ':features:dynamic_feature1' dosyasını settings.gradle dosyanıza alt proje olarak ekler. Gradle, uygulama paketinizi oluştururken modülün manifest dosyasına <manifest split="dynamic_feature1"> ekler.

android:isFeatureSplit="true | false"> Android Studio, uygulama paketinizi oluştururken sizin için bu özelliği içerir. Bu nedenle, bu özelliği manuel olarak eklememeniz veya değiştirmemeniz gerekir.

Bu modülün bir özellik modülü olduğunu belirtir. Temel modül ve yapılandırma APK'larındaki manifestler, bu özelliği hariç tutar veya false olarak ayarlar.

<dist:module Bu yeni XML öğesi, modülün APK olarak nasıl paketlendiğini ve dağıtıldığını belirleyen özellikleri tanımlar.
dist:instant="true | false" Modülün hazır uygulama deneyimi olarak Google Play Instant üzerinden kullanılıp kullanılamayacağını belirtir.

Uygulamanız bir veya daha fazla hazır sürüm etkin özellik modülü içeriyorsa temel modülü de anında etkinleştirmeniz gerekir. Android Studio 3.5 veya sonraki sürümleri kullanırken hazır özellikli bir özellik modülü oluşturduğunuzda IDE bunu sizin için yapar.

<dist:on-demand/> aynı zamanda bu XML öğesini true olarak ayarlayamazsınız. Bununla birlikte, hazır sürüm etkin özellik modüllerinizin hazır deneyim olarak Play Özellik Yayınlama Kitaplığı'nı kullanarak isteğe bağlı olarak indirilmesini isteyebilirsiniz. Bir kullanıcı uygulamanızı indirip yüklediğinde cihaz, varsayılan olarak temel APK ile birlikte uygulamanızın hazır özellikli özellik modüllerini indirip yükler.

dist:title="@string/feature_name" Modül için kullanıcılara yönelik bir başlık belirtir. Örneğin, cihaz indirme onayı istediğinde bu başlığı gösterebilir.

Temel modülün module_root/src/source_set/res/values/strings.xml dosyasına bu başlık için dize kaynağını eklemeniz gerekir.

<dist:fusing dist:include="true | false" />
</dist:module>
Modülün, Android 4.4 (API düzeyi 20) ve önceki sürümleri çalıştıran cihazları hedefleyen çoklu APK'lara dahil edilip edilmeyeceğini belirtir.

Ayrıca, bir uygulama paketinden APK oluşturmak için bundletool kullandığınızda, yalnızca bu özelliği true olarak ayarlayan özellik modülleri, uygulamanızın desteklediği tüm cihaz yapılandırmalarına ait kod ve kaynakları içeren monolitik bir APK olan evrensel APK'ya dahil edilir.

<dist:delivery> Aşağıda gösterildiği gibi, modül yayınlamayı özelleştiren seçenekleri içerir. Her özellik modülünün bu özel yayınlama seçeneklerinden yalnızca bir türü yapılandırması gerektiğini unutmayın.
<dist:install-time> Modülün yükleme sırasında kullanılabilir olması gerektiğini belirtir. Bu, başka bir özel yayınlama seçeneği türü belirtmeyen özellik modülleri için varsayılan davranıştır.

Yükleme süresindeki indirmeler hakkında daha fazla bilgi edinmek için Yükleme zamanı yayınlamayı yapılandırma bölümünü okuyun.

Bu düğüm, modülü cihaz özellikleri, kullanıcının ülkesi veya minimum API düzeyi gibi belirli gereksinimleri karşılayan cihazlarla sınırlandıran koşullar da belirtebilir. Daha fazla bilgi için Koşullu yayını yapılandırma bölümünü okuyun.

<dist:removable dist:value="true | false" />

Paketten bölünmüş APK'lar oluşturulurken paketleme aracı, ayarlanmadan bırakılırsa veya false olarak ayarlanırsa yükleme zamanı modüllerini temel modüle birleştirir. Kaynaştırma sonucunda daha az bölünmüş APK olacağı için bu ayar uygulamanızın performansını iyileştirebilir.

removable, true olarak ayarlandığında: yükleme zamanı modülleri temel modüle kaynaşmaz. Modülleri ileride kaldırmak istiyorsanız true olarak ayarlayın. Ancak kaldırılabilir olacak kadar çok fazla modül yapılandırmak, uygulamanızın yükleme süresini uzatabilir.

Varsayılan olarak false değerine ayarlanır. Bu değeri yalnızca özellik modülü için birleştirmeyi devre dışı bırakmak isterseniz manifest dosyasında ayarlamanız gerekir.

Not: Bu özellik yalnızca Android Gradle eklentisi 4.2 veya komut satırından Bundletool v1.0 kullanılırken kullanılabilir.

</dist:install-time>  
<dist:on-demand/> Modülün isteğe bağlı olarak indirilebileceğini belirtir. Yani modül yükleme sırasında kullanılamaz ancak uygulamanız daha sonra indirme isteğinde bulunabilir.

İsteğe bağlı indirmeler hakkında daha fazla bilgi için İsteğe bağlı teslimatı yapılandırma bölümünü okuyun.

</dist:delivery>
<application
android:hasCode="true | false">
...
</application>
Özellik modülü hiç DEX dosyası oluşturmuyorsa (yani daha sonra DEX dosyası biçiminde derlenen bir kod içermiyorsa) aşağıdakileri yapmanız gerekir (aksi takdirde çalışma zamanı hataları alabilirsiniz):
  1. Özellik modülünün manifest dosyasında android:hasCode değerini "false" olarak ayarlayın.
  2. base modülünüzün manifest dosyasına aşağıdakini ekleyin:
    <application
      android:hasCode="true"
      tools:replace="android:hasCode">
      ...
    </application>
    

Ek kaynaklar

Özellik modüllerini kullanma hakkında daha fazla bilgi edinmek için aşağıdaki kaynakları deneyin.

Blog yayınları

Videolar

Hizmet Şartları ve Veri Güvenliği

Play Özellik Yayınlama Kitaplığı'na erişerek veya bu kitaplığı kullanarak Play Core Yazılım Geliştirme Kiti Hizmet Şartları'nı kabul etmiş olursunuz. Kitaplığa erişmeden önce lütfen geçerli tüm şartları ve politikaları okuyup anlayın.

Veri Güvenliği

Play Core kitaplıkları, uygulamanızın Google Play Store'daki çalışma zamanı arayüzüdür. Bu nedenle, uygulamanızda Play Core'u kullandığınızda Play Store kendi işlemlerini yürütür. Bu işlemler, verilerin Google Play Hizmet Şartları'na tabi olarak işlenmesini içerir. Aşağıdaki bilgilerde, Play Core kitaplıklarının uygulamanızdan belirli istekleri işlemek için verileri nasıl işlediği açıklanmaktadır.

Ek diller API'si

Kullanım sırasında toplanan veriler Yüklü dillerin listesi
Veri toplamanın amacı Toplanan veriler, uygulamanın farklı dil sürümlerini yayınlamak ve uygulama güncellemesinden sonra yüklü dilleri korumak için kullanılır.
Veri şifreleme Veriler şifrelenir.
Veri paylaşımı Veriler herhangi bir üçüncü tarafa aktarılmaz.
Veri silme Sabit bir saklama süresinin ardından veriler silinir.

Play Özellik Dağıtımı

Kullanım sırasında toplanan veriler Cihaz meta verileri
Uygulama sürümü
Veri toplamanın amacı Toplanan veriler, cihaza doğru modülü sunmak ve güncelleme, yedekleme ve geri yükleme sonrasında yüklü modülleri korumak için kullanılır.
Veri şifreleme Veriler şifrelenir.
Veri paylaşımı Veriler herhangi bir üçüncü tarafa aktarılmaz.
Veri silme Sabit bir saklama süresinin ardından veriler silinir.

Mümkün olduğunca şeffaf olmayı hedeflesek de uygulamanızın kullanıcı verilerini toplama, paylaşma ve güvenlik uygulamalarıyla ilgili olarak Google Play'in Veri Güvenliği bölümü formuna nasıl yanıt vereceğinize karar vermek yalnızca sizin sorumluluğunuzdadır.