Play Feature Delivery'ye genel bakış

Google Play'in uygulama yayınlama modeli, her kullanıcının cihaz yapılandırması için optimize edilmiş APK'lar oluşturmak ve yayınlamak üzere Android App Bundle'ı kullanır. Böylece kullanıcılar, uygulamanızı çalıştırmak için yalnızca ihtiyaç duydukları kodu ve kaynakları indirir.

Play Feature Delivery, uygulama paketlerinin gelişmiş özelliklerini kullanarak uygulamanızın belirli özelliklerinin koşullu olarak yayınlanmasına veya isteğe bağlı olarak indirilmesine olanak tanır. Bunu yapmak için öncelikle bu özellikleri temel uygulamanızdan ayırarak özellik modüllerine dönüştürmeniz 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 ç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 edilmemesi gerekenler

Her özellik modülü temel modüle bağlı olduğundan belirli yapılandırmaları da devralır. Bu nedenle, özellik modülünün build.gradle dosyasında aşağıdakileri atlamanı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ı belirleyebilirsiniz.
  • 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 ilişki oluşturma

Android Studio, özellik modülünüzü oluştururken aşağıdaki örnekte gösterildiği gibi temel modülün build.gradle dosyasına android.dynamicFeatures özelliğini ekleyerek özellik modülünüzü temel modül için 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, temel modülü özellik modülünün bağımlılığı olarak içerir. Bu durum aşağıda gösterilmiştir:

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

Ek ProGuard kurallarını belirtme

Uygulama projeniz için kod küçültmeyi yalnızca temel modülün derleme yapılandırması etkinleştirebilir. Ancak aşağıdaki örnekte gösterildiği gibi, proguardFiles özelliğini kullanarak her ö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üllerden (temel modül dahil) gelen kurallarla birleştirildiğini unutmayın. Bu nedenle, her özellik modülü yeni bir kural grubu belirtebilir ancak bu kurallar uygulama projesindeki tüm modüller için geçerlidir.

Uygulamanızı dağıtma

Özellik modüllerini destekleyen bir uygulama geliştirirken menü çubuğundan Run > Run'ı seçerek (veya araç çubuğunda Run tıklayarak) uygulamanızı normalde yaptığınız gibi bağlı bir cihaza dağıtabilirsiniz.

Uygulama projeniz bir veya daha fazla özellik modülü içeriyorsa mevcut çalıştırma/hata ayıklama yapılandırmanızı aşağıdaki şekilde değiştirerek uygulamanızı dağıtırken hangi özelliklerin dahil edileceğini seçebilirsiniz:

  1. Menü çubuğundan Run > Edit Configurations'ı (Çalıştır > Yapılandırmaları Düzenle) seçin.
  2. Run/Debug Configurations (Çalıştırma/Hata Ayıklama Yapılandırmaları) iletişim kutusunun sol panelinden istediğiniz Android App (Android Uygulaması) yapılandırmasını seçin.
  3. Genel sekmesindeki Dağıtılacak dinamik özellikler bölümünde, uygulamanızı dağıtırken eklemek istediğiniz her özellik modülünün yanındaki kutuyu işaretleyin.
  4. Tamam'ı tıklayın.

Android Studio, uygulamanızı dağıtmak için varsayılan olarak uygulama paketlerini kullanmaz. Bunun yerine, IDE, APK boyutundan ziyade dağıtım hızı için optimize edilmiş APK'lar oluşturup cihazınıza yükler. Android Studio'yu uygulama paketinden APK'lar ve hazır uygulama deneyimleri oluşturup 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 kullanma

Ö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ştirebilme olanağıdır. Örneğin, uygulamanızın ilk indirme boyutunu küçültmek için bazı özellikleri isteğe bağlı olarak gerektiğinde indirilmek üzere veya yalnızca belirli işlevleri destekleyen cihazlar tarafından indirilecek şekilde yapılandırabilirsiniz. Bu işlevler arasında fotoğraf çekme veya artırılmış gerçeklik özelliklerini destekleme yer alır.

Uygulamanızı uygulama paketi olarak yüklediğinizde varsayılan olarak son derece optimize edilmiş indirmeler elde etseniz de daha gelişmiş ve özelleştirilebilir özellik dağıtım seçenekleri için uygulamanızın özelliklerinin özellik modülleri kullanılarak ek yapılandırılması ve modülerleştirilmesi gerekir. Yani özellik modülleri, her biri gerektiğinde indirilebilecek şekilde yapılandırabileceğiniz modüler özellikler oluşturmak için yapı taşları sağlar.

Kullanıcılarınızın online pazar yerinde ürün alıp satmasına olanak tanıyan bir uygulamayı ele alalım. Uygulamanın aşağıdaki işlevlerinin her birini makul bir şekilde ayrı özellik modüllerine ayırabilirsiniz:

  • Hesap oluşturma ve hesaba giriş
  • Marketplace'e göz atma
  • Satışa sunulan öğeler
  • Ödemeleri işleme

Aşağıdaki tabloda, özellik modüllerinin desteklediği farklı yayın 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.

Yayınlanma seçeneği Davranış Örnek kullanım alanı Başlarken
Yükleme sırasında yayınlama Yukarıda açıklanan yayınlama seçeneklerinden herhangi birini yapılandırmayan özellik modülleri, varsayılan olarak uygulama yükleme sırasında indirilir. Bu, ileri seviye yayın seçeneklerini kademeli olarak kullanabileceğiniz anlamına geldiği için önemli bir davranıştır. Örneğin, uygulamanızın özelliklerini modülerleştirip Play Özellik Dağıtımı Kitaplığı'nı kullanarak isteğe bağlı indirmeleri tamamen uyguladıktan sonra isteğe bağlı dağıtımı etkinleştirebilirsiniz.

Ayrıca, uygulamanız daha sonra özellikleri kaldırmayı da isteyebilir. Bu nedenle, uygulama yükleme sırasında belirli özelliklere ihtiyacınız varsa ancak daha sonra bu özelliklere ihtiyacınız yoksa özelliği cihazdan kaldırmayı isteyerek yükleme boyutunu küçültebilirsiniz.

Uygulamada, pazaryerinde ürün alıp satma konusunda etkileşimli bir rehber gibi belirli eğitim etkinlikleri varsa bu özelliği varsayılan olarak uygulama yükleme işlemine dahil edebilirsiniz.

Ancak uygulamanın yüklü boyutunu küçültmek için kullanıcı eğitimi tamamladıktan sonra özellik silinebilir.

Gelişmiş yayınlama seçeneklerini 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 başlıklı makaleyi inceleyin.

İsteğe bağlı teslimat Uygulamanızın, gerektiğinde özellik modüllerini isteyip indirmesine olanak tanır. Pazar yeri uygulamasını kullananların yalnızca% 20'si satışa sunulacak öğeler yayınlıyorsa kullanıcıların büyük çoğunluğu için ilk indirme boyutunu küçültmek amacıyla, öğe açıklaması ekleme ve öğe satışa sunma gibi fotoğraf çekme işlevini isteğe bağlı indirme olarak sunmak iyi bir stratejidir. Yani, uygulamanın satış işlevi için özellik modülünü yalnızca kullanıcılar pazaryerinde satışa sunulacak öğeler yerleştirmeye ilgi gösterdiğinde indirilecek şekilde yapılandırabilirsiniz.

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

Bir özellik modülü oluşturun ve isteğe bağlı yayınlamayı yapılandırın. Uygulamanız daha sonra Play Özellik Dağıtımı Kitaplığı'nı kullanarak modülün isteğe bağlı olarak indirilmesini isteyebilir.
Koşullu teslim Modüler 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. Pazar yeri uygulaması dünya genelinde kullanılıyorsa yalnızca belirli bölgelerde veya yerel halk arasında popüler olan ödeme yöntemlerini desteklemeniz gerekebilir. Uygulamanın ilk indirme boyutunu küçültmek için belirli ödeme yöntemlerini işleme yönelik ayrı özellik modülleri oluşturabilir ve bunları, kullanıcının kayıtlı yerel ayarına göre 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 uygulamanızı cihazlarına yüklemelerine gerek kalmadan uygulamayla etkileşimde bulunmalarını sağlar. Bunun yerine, Google Play Store'daki "Hemen Deneyin" düğmesini veya oluşturduğunuz bir URL'yi kullanarak uygulamanızı deneyebilirler. Bu içerik sunma şekli, uygulamanızla etkileşimi artırmanızı kolaylaştırır.

Anında teslimat ile Google Play Instant'ı kullanarak kullanıcılarınızın uygulamanızın belirli özelliklerini yükleme yapmadan anında deneyimlemesine olanak tanıyabilirsiniz.

Oyunun ilk birkaç seviyesini hafif bir özellik modülüne dahil eden bir oyunu düşünün. Bu modülü anında etkinleştirerek kullanıcıların uygulama yüklemeden bir URL bağlantısı veya "Şimdi Dene" düğmesi aracılığıyla oyunu anında deneyimlemesini sağlayabilirsiniz. Özellik modülü oluşturun ve anında yayınlamayı yapılandırın. Uygulamanız daha sonra Play Özellik Dağıtımı Kitaplığı'nı kullanarak modülün isteğe bağlı olarak indirilmesini isteyebilir.

Uygulama özelliklerinizi özellik modüllerini kullanarak modüler hale getirmenin yalnızca ilk adım olduğunu unutmayın. Google Play Instant'ı desteklemek için uygulamanızın temel modülünün ve belirli bir anlık özellik etkinleştirilmiş özelliğin indirme boyutu, katı boyut kısıtlamalarını karşılamalıdır. Daha fazla bilgi edinmek için Uygulama veya oyun boyutunu küçülterek hazır deneyimleri etkinleştirme başlıklı makaleyi okuyun.

Kaynak için URI oluşturma

Bir URI kullanarak özellik modülünde depolanan bir kaynağa erişmek istiyorsanız Uri.Builder() kullanarak özellik modülü kaynak URI'si oluşturma adımlarını aşağıda bulabilirsiniz:

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 bir kısmı çalışma zamanında oluşturulur. Bu sayede, bölünmüş APK'lar yüklendikten sonra doğru ad alanının oluşturulması sağlanır.

URI'nin nasıl oluşturulduğuna dair bir örnek olarak, aşağıdaki adlara sahip bir uygulamanız ve özellik modülleriniz olduğunu varsayalım:

  • Uygulama paketi adı: com.example.my_app_package
  • Özelliğin kaynak paketinin 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ğını ifade ediyorsa yukarıdaki resId kodu aşağıdaki çıktıyı verir:Uri.Builder()

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

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

URI'nizdeki yolları doğrulamak için APK Analiz Aracı'nı kullanarak özellik modülü APK'nızı inceleyebilir ve paket adını belirleyebilirsiniz:

APK Analiz Aracı'nın derlenmiş bir kaynak dosyasının içeriğini incelediği sırada çekilen ekran görüntüsü.
1.şekil Derlenmiş bir kaynak dosyasındaki paket adını incelemek için APK Analiz Aracı'nı kullanın.

Özellik modülleriyle ilgili dikkat edilmesi gereken noktalar

Özellik modülleriyle derleme hızını ve mühendislik hızını artırabilir, uygulamanızın özelliklerinin teslimini kapsamlı bir şekilde özelleştirerek uygulamanızın boyutunu küçültebilirsiniz. Ancak özellik modüllerini kullanırken aklınızda bulundurmanız gereken bazı kısıtlamalar ve uç durumlar vardır:

  • Tek bir cihaza koşullu veya isteğe bağlı yayınlama yoluyla 50 ya da daha fazla özellik modülü yüklemek performans sorunlarına yol açabilir. Kaldırılabilir olarak yapılandırılmayan yükleme sırasında yayınlanan modüller, 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ül sayısını 10 veya daha az olacak şekilde sınırlayın. Aksi takdirde, uygulamanızın indirme ve yükleme süresi artabilir.
  • İsteğe bağlı özelliklerin indirilmesi ve yüklenmesi yalnızca Android 5.0 (API düzeyi 21) ve sonraki sürümlerin yüklü olduğu cihazlarda desteklenir. Özelliğinizi Android'in önceki sürümlerinde kullanıma sunmak için özellik modülü oluştururken birleştirme seçeneğini etkinleştirin.
  • Uygulamanızın, isteğe bağlı olarak sunulan indirilen özellik modüllerine erişebilmesi için SplitCompat'i etkinleştirin.
  • Özellik modülleri, manifest dosyalarında android:exported değeri true olarak ayarlanmış etkinlikler belirtmemelidir. Bunun nedeni, başka bir uygulama etkinliği başlatmaya çalıştığında cihazın özellik modülünü indirdiğinin garanti edilmemesidir. Ayrıca, uygulamanız koduna ve kaynaklarına erişmeye çalışmadan önce bir özelliğin indirildiğini onaylamalıdır. Daha fazla bilgi için Yüklü modülleri yönetme başlıklı makaleyi inceleyin.
  • Play Özellik Dağıtımı, uygulamanızı bir uygulama paketi kullanarak yayınlamanızı gerektirdiğinden uygulama paketiyle ilgili bilinen sorunlar hakkında bilgi sahibi olduğunuzdan emin olun.

Özellik modülü manifest referansı

Android Studio'yu kullanarak yeni bir özellik modülü oluşturduğunuzda IDE, modülün özellik modülü gibi davranması için gereken manifest özelliklerinin çoğunu içerir. Ayrıca, bazı özellikler derleme sırasında derleme sistemi tarafından yerleştirilir. Bu nedenle, bunları kendiniz 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 bir <manifest> bloğudur.
xmlns:dist="http://schemas.android.com/apk/distribution" Aşağıda daha ayrıntılı olarak açıklanan yeni bir dist: XML ad alanı belirtir.
split="split_name" Android Studio, uygulama paketinizi oluştururken bu özelliği sizin için ekler. Bu nedenle, bu özelliği kendiniz eklememeli veya değiştirmemelisiniz.

Uygulamanızın Play Feature Delivery Kitaplığı'nı kullanarak isteğe bağlı bir modül isterken belirttiği modülün adını tanımlar.

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

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

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

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

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

<dist:module Modülün nasıl paketleneceğini ve APK olarak dağıtılacağını belirleyen özellikleri tanımlar.
dist:instant="true | false" Modülün, hazır uygulama deneyimi olarak Google Play Instant üzerinden kullanılabilir olup olmayacağını belirtir.

Uygulamanızda bir veya daha fazla hazır uygulama özellikli modül varsa temel modülü de hazır uygulama özellikli hale getirmeniz gerekir. Android Studio 3.5 veya sonraki sürümlerini kullanırken anlık özellikli bir özellik modülü oluşturduğunuzda IDE bunu sizin için yapar.

Bu XML öğesini true olarak ayarlarken <dist:on-demand/> öğesini de ayarlayamazsınız. Ancak, Play Özellik Dağıtımı Kitaplığı'nı kullanarak, anında etkinleştirilmiş özellik modüllerinizin anlık deneyimler olarak isteğe bağlı indirilmesini talep edebilirsiniz. Bir kullanıcı uygulamanızı indirip yüklediğinde cihaz, varsayılan olarak temel APK ile birlikte uygulamanızın anında etkinleştirilmiş özellik modüllerini de indirip yükler.

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

Bu başlığın dize kaynağını temel modülün module_root/src/source_set/res/values/strings.xml dosyasına eklemeniz gerekir.

<dist:fusing dist:include="true | false" /> 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 evrensel APK'ya dahil edilir. Evrensel APK, uygulamanızın desteklediği tüm cihaz yapılandırmaları için kod ve kaynakları içeren tek bir APK'dır.

<dist:delivery> Aşağıda gösterildiği gibi, modül teslimini özelleştiren seçenekleri kapsar. Her özellik modülünün bu özel yayın 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 teslimat seçeneği türü belirtmeyen özellik modüllerinin varsayılan davranışıdır.

Yükleme sırasında indirme hakkında daha fazla bilgi edinmek için Yükleme sırasında teslimatı yapılandırma başlıklı makaleyi inceleyin.

Bu düğüm, modülü cihaz özellikleri, kullanıcının bulunduğu ülke veya minimum API düzeyi gibi belirli koşulları karşılayan cihazlarla sınırlayan koşulları da belirtebilir. Daha fazla bilgi edinmek için Koşullu teslimatı yapılandırma başlıklı makaleyi inceleyin.

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

Ayarlanmadığında veya false olarak ayarlandığında bundletool, paketten bölünmüş APK'lar oluştururken yükleme sırasında yayınlanan modülleri temel modülle birleştirir. Birleştirme sonucunda daha az bölünmüş APK olacağından bu ayar, uygulamanızın performansını artırabilir.

removable, true olarak ayarlandığında: yükleme sırasında modüller temel modülle birleştirilmez. Gelecekte modülleri kaldırmak istiyorsanız true olarak ayarlayın. Ancak çok fazla modülün kaldırılabilir olarak yapılandırılması, uygulamanızın yükleme süresini uzatabilir.

Varsayılan olarak false değerine ayarlanır. Bu değeri manifestte yalnızca bir özellik modülü için birleştirme özelliğini devre dışı bırakmak istiyorsanız ayarlamanız gerekir.

Not: Bu özellik yalnızca Android Gradle eklentisi 4.2 veya daha yeni bir sürüm kullanılırken ya da 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ı indirme olarak kullanılabileceğini belirtir. Yani modül, yükleme sırasında kullanılamaz ancak uygulamanız daha sonra indirilmesini isteyebilir.

İsteğe bağlı indirmeler hakkında daha fazla bilgi edinmek için İsteğe bağlı teslimatı yapılandırma başlıklı makaleyi inceleyin.

</dist:delivery>
</dist:module>
<application
android:hasCode="true | false">
...
</application>
Özellik modülü DEX dosyası oluşturmuyorsa (yani daha sonra DEX dosyası biçiminde derlenen 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 öğesini "false" olarak ayarlayın.
  2. Temel modülünüzün manifest dosyasına aşağıdakileri ekleyin:
    <application
      android:hasCode="true"
      tools:replace="android:hasCode">
      ...
    </application>
...
</manifest>

Ek kaynaklar

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

Blog yayınları

Videolar

Hizmet şartları ve veri güvenliği

Play Feature Delivery Library'ye erişerek veya bu kitaplığı kullanarak Play Core Software Development Kit Hizmet Şartları'nı kabul etmiş olursunuz. Lütfen kitaplığa erişmeden önce geçerli tüm şartları ve politikaları okuyup anlayın.

Veri Güvenliği

Play Core kitaplıkları, uygulamanızın Google Play Store ile çalışma zamanı arayüzüdür. Bu nedenle, uygulamanızda Play Core'u kullandığınızda Play Store, Google Play Hizmet Şartları'na göre yönetilen verilerin işlenmesi de dahil olmak üzere kendi işlemlerini yürütür. Aşağıdaki bilgilerde, Play Core kitaplıklarının uygulamanızdan gelen belirli istekleri işlemek için verileri nasıl kullandığı açıklanmaktadır.

Ek dil API'si

Kullanımla ilgili toplanan veriler Yüklü dillerin listesi
Veri toplama amacı Toplanan veriler, uygulamanın farklı dil sürümlerini sunmak ve uygulama güncellemesinden sonra yüklü dilleri korumak için kullanılır.
Veri şifreleme Veriler şifrelenir.
Veri paylaşımı Veriler üçüncü taraflara aktarılmaz.
Veri silme Veriler, sabit bir saklama süresinin ardından silinir.

Play Özellik Dağıtımı

Kullanımla ilgili toplanan veriler Cihaz meta verileri
Uygulama sürümü
Veri toplama amacı Toplanan veriler, cihaza doğru modülü sunmak ve güncelleme, yedekleme ve geri yükleme işlemlerinden sonra yüklü modülleri korumak için kullanılır.
Veri şifreleme Veriler şifrelenir.
Veri paylaşımı Veriler üçüncü taraflara aktarılmaz.
Veri silme Veriler, sabit bir saklama süresinin ardından silinir.

Olabildiğince şeffaf olmayı hedeflesek de uygulamanızın kullanıcı verilerini toplama, paylaşma ve güvenlikle ilgili yaklaşımı hakkında Google Play'in Veri Güvenliği bölümü formuna nasıl yanıt vereceğinize karar vermek tamamen sizin sorumluluğunuzdadır.