Koşullu yayını yapılandırma

Koşullu dağıtım, özellik modüllerinin uygulama yükleme sırasında otomatik olarak indirilmesi için belirli cihaz yapılandırma gereksinimleri ayarlamanıza olanak tanır. Örneğin, yalnızca AR'yi destekleyen cihazlar için uygulama yüklenirken kullanılabilecek artırılmış gerçeklik (AR) işlevleri içeren bir özellik modülü yapılandırabilirsiniz.

Bu iletme mekanizması, şu anda uygulama yükleme sırasında modülün indirilmesini, aşağıdaki cihaz yapılandırmalarına göre kontrol etmeyi desteklemektedir:

Cihaz belirttiğiniz tüm gereksinimleri karşılamıyorsa modül, uygulama yükleme sırasında indirilmez. Ancak uygulamanız daha sonra Play Core SDK'sını kullanarak modülü isteğe bağlı olarak indirme isteğinde bulunabilir.

Başlamadan önce, Android Studio 3.5 veya sonraki bir sürümü kullandığınızdan emin olun. Aşağıdaki bölümlerde, özellik modüllerinize koşullu yayın için nasıl destek ekleyeceğiniz gösterilmektedir.

Koşullu yayınlama seçenekleriyle yeni bir modül ekleme

Koşullu yayınlamayla yeni bir özellik modülü oluşturmanın en kolay yolu, Yeni Modül sihirbazını kullanmaktır. Örneğin:

  1. New Module (Yeni Modül) iletişim kutusunu açmak için menü çubuğundan File > New > New Module (Dosya > Yeni > Yeni Modül) seçeneğini belirleyin.
  2. Yeni Modül iletişim kutusunda Dinamik Özellik Modülü'nü seçin ve İleri'yi tıklayın.
  3. Modülünüzü normalde yaptığınız gibi yapılandırın ve İleri'yi tıklayın.
  4. Modül İndirme Seçenekleri bölümünde aşağıdakileri tamamlayın:

    1. En fazla 50 karakter kullanarak Modül başlığı'nı belirtin. Platform, örneğin kullanıcının modülü indirmek isteyip istemediğini onaylarken modülü kullanıcılara tanıtmak için bu başlığı kullanır. Bu nedenle, uygulamanızın temel modülünde modül başlığı, çevirebileceğiniz bir dize kaynağı olarak bulunmalıdır. Modülü Android Studio kullanarak oluştururken IDE, dize kaynağını sizin için temel modüle ekler ve aşağıdaki girişi özellik modülünün manifest dosyasına ekler:

      <dist:module
          ...
          dist:title="@string/feature_title">
      </dist:module>
      
    2. Yükleme sırasında dahil etme bölümündeki açılır menüden Yalnızca belirtilen özelliklere sahip cihazlar için uygulama yükleme işlemine modülü dahil et'i seçin. Böylece, uygulama yükleme sırasında yalnızca cihaz özellikleri veya ülke gibi belirleyebileceğiniz belirli yapılandırmalara sahip cihazlarda uygulamanızla birlikte bulunan bir modül oluşturulur. Android Studio, seçiminizi yansıtmak için modül manifestine aşağıdakileri ekler:

      <dist:module ... >
        <dist:delivery>
            <dist:install-time>
                <dist:conditions>
                    <!-- If you specify conditions, as described in the steps
                         below, the IDE includes them here. -->
                </dist:conditions>
            </dist:install-time>
        </dist:delivery>
      </dist:module>
      
    3. Modülün otomatik olarak indirilmesini belirli ülkelerle veya minimum API düzeyiyle sınırlamak istiyorsanız modülü oluşturmayı tamamlamak için Bitir'i tıklayın ve ardından ülkeye göre koşulların nasıl belirtileceği veya minimum API düzeyi ile ilgili bölümü okuyun. Aksi takdirde, modülü yükleme sırasında indirmek için bir cihazın gerektirdiği bir özelliği eklemek üzere + cihaz özelliği'ni tıklayın.

    4. Cihaz-özelliği'nin yanındaki açılır menüden aşağıdaki seçeneklerden birini belirleyin ve değerini belirtin:

      • Ad: Yükleme sırasında bir cihazın modülü indirmek için ihtiyaç duyduğu donanım veya yazılım özelliğini belirtmenize olanak tanır. Koşullu yayınlamanın desteklediği özellikler, PackageManager tarafından FEATURE_* sabit değerleriyle listelenenlerle aynıdır. Bu seçeneği belirlerseniz, açılır menünün yanındaki alana özelliğin sabit değerinin herhangi bir kısmını (ör. "Bluetooth") yazmaya başlayın ve görünen önerilerden birini seçin.
      • OpenGL ES Sürümü: Yükleme sırasında bir cihazın modülü indirmek için ihtiyaç duyduğu bir OpenGL ES sürümünü belirtmenize olanak tanır. Bu seçeneği belirlerseniz açılır menünün yanındaki alana sürümü (ör. "0x00030001") yazmaya başlayın ve görüntülenen önerilerden birini seçin.
    5. Kullanılabilir cihaz özelliklerini temel alan birden fazla koşul eklemek isterseniz belirtmek istediğiniz her cihaz özelliği koşulu için + cihaz özelliği seçeneğini tıklayın.

    6. Bu modülün, Android 4.4 (API düzeyi 20) ve önceki sürümleri çalıştıran ve çoklu APK'lara dahil edilen cihazlarda kullanılabilmesini istiyorsanız Fusing (Birleştirme) seçeneğinin yanındaki kutuyu işaretleyin. Yani bu modül için isteğe bağlı davranışı etkinleştirebilir ve bölünmüş APK'ların indirilmesini ve yüklenmesini desteklemeyen cihazlardan çıkarmak için birleştirmeyi devre dışı bırakabilirsiniz. Android Studio, seçiminizi yansıtmak için modülün manifest dosyasına aşağıdaki kodu ekler:

      <dist:module ...>
          <dist:fusing dist:include="true | false" />
      </dist:module>
      
  5. Modül indirme seçeneklerini yapılandırmayı tamamladığınızda Son'u tıklayın.

Android Gradle eklentisinin, dinamik özellik modüllerinden lint çalıştırmayı desteklemediğini unutmayın. İlgili uygulama modülünden lint çalıştırdığınızda, dinamik özellik modüllerinde lint çalıştırılır ve tüm sorunlar uygulamanın lint raporuna eklenir.

Mevcut bir özellik modülüne koşullu yayınlama seçenekleri ekleme

Modülün manifesti aracılığıyla mevcut bir özellik modülüne kolayca koşullu yayınlama seçenekleri ekleyebilirsiniz. Ancak öncelikle, halihazırda etkinleştirmiş olabileceğiniz diğer yayınlama seçenekleriyle koşullu yayınlama seçeneklerinin uyumluluğu hakkında bilgi edinmeniz gerekir.

Başlamak için ilk olarak manifest dosyanızı yeni <dist:delivery> öğesine taşımanız gerekir. Aşağıdaki kod snippet'inde eski söz diziminin bir örneği gösterilmektedir:

<!-- This is the old syntax. -->
<dist:module
  dist:title="@string/feature_title" dist:onDemand="true">
  <dist:fusing dist:include="true"/>
</dist:module>

Yukarıdaki yayınlama seçenekleri artık şu şekilde belirtilmiştir.

<dist:module
  dist:title="@string/feature_title">
  <dist:delivery>
      <dist:on-demand/>
  </dist:delivery>
  <dist:fusing dist:include="true"/>
</dist:module>

Ardından, cihaz özelliklerine göre aşağıdaki şekilde koşullu yayınlama seçenekleri ekleyebilirsiniz.

<dist:module
    dist:title="@string/feature_title">
    <dist:delivery>
      <dist:on-demand/>
      <dist:install-time>
        <dist:conditions>
          <!-- Requires that the device support AR to download the module at
          app install-time.  -->
          <dist:device-feature dist:name="android.hardware.camera.ar"/>
        </dist:conditions>
      </dist:install-time>
    </dist:delivery>
    <dist:fusing dist:include="true"/>
</dist:module>

Aşağıdaki bölümlerde, ülkeye veya minimum API düzeyi gibi diğer koşullu yayınlama seçenekleri ele alınmaktadır.

Diğer modül indirme seçenekleriyle uyumluluk

Özellik modülleri, her özelliğin bir kullanıcının cihazına nasıl yayınlanacağını yapılandırmak için birden fazla seçenek sunduğundan, koşullu teslim seçeneklerinin diğer ayarlardan nasıl etkilendiğini anlamak önemlidir. Aşağıdaki tabloda, koşullu yayınlamanın diğer modül indirme seçenekleriyle uyumluluğu özetlenmiştir.

Modül indirme seçeneği Koşullu yayınlama ile uyumluluk
Fayans (<dist:fusing dist:include="true"/>) Bir modül bu seçeneği true (doğru) değerine ayarlarsa Google Play, uygulamanızı API düzeyi 19 veya altını çalıştıran cihazlara dağıtırken belirttiğiniz koşullu yayınlama seçeneklerini dikkate almaz. Yani birleştirmeyi etkinleştiren özellik modülleri, API düzeyi 19 veya altını çalıştıran cihazlar için yükleme sırasında her zaman dahil edilir.
Hazır sürüm etkin (<dist:module dist:instant="true"/>) Koşullu dağıtım seçenekleri, hazır sürüm etkin özellik modülleri için desteklenmez.
İsteğe bağlı (<dist:on-demand/>) Varsayılan olarak, koşullu yayınlama seçenekleri belirtirseniz modül isteğe bağlı olarak da kullanılabilir.

Ülkeye göre koşullar belirtin

Koşullu dağıtım, uygulama yükleme sırasında modülünüzü indirme işleminden hariç tutmak (veya dahil etmek) istediğiniz ülkeleri belirtmenize de olanak tanır. Bu koşulu belirtmek, örneğin modülünüz belirli bölgelerde kullanılamayan bir ödeme yöntemi uyguluyorsa yararlı olabilir.

Bu bağlamda, cihazın ülkesi genellikle kullanıcının Google Play hesabında kayıtlı fatura adresiyle belirlenir.

Modülünüzde ülke belirtmek için aşağıdakileri özellik modülünün manifestine ekleyin.

<dist:conditions>
   <!-- Set to "true" to specify countries to exclude from downloading
   this module at app install-time. By default, modules are available
   for download to all user countries. -->
  <dist:user-countries dist:exclude="true">
    <!-- Specifies the two-letter  CLDR country code for regions that should
    not download the module at app install-time. -->
    <dist:country dist:code="CN"/>
    <dist:country dist:code="HK"/>
  </dist:user-countries>
</dist:conditions>

API düzeyi koşullarını belirtin

Bir özellik modülü, Android platformunun yalnızca belirli sürümlerinde bulunan API'lere bağlıysa cihazın API düzeyine dayalı bir koşul belirtmek yararlı olabilir.

Minimum veya maksimum cihaz API düzeyini temel alan bir koşul belirlemek için özellik modülünüzün manifest dosyasına aşağıdakini ekleyin.

<dist:conditions>
    <!-- Specifies the minimum API level that the device must satisfy
         in order to download your module at app install-time. The API level you
         specify must be greater or equal to the module's own minSdkVersion. -->
   <dist:min-sdk dist:value="21"/>
    <!-- Specifies the maximum API level that the device cannot exceed
         in order to download your module at app install-time. The API level you
         specify must be less than or equal to the module's own maxSdkVersion. -->
   <dist:max-sdk dist:value="24"/>
</dist:conditions>