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

Koşullu yayınlama, özellik modüllerinin uygulama yükleme sırasında otomatik olarak indirilmesi için belirli cihaz yapılandırma şartlarını belirlemenize olanak tanır. Örneğin, artırılmış gerçeklik (AR) işlevini içeren bir özellik modülünü, yalnızca AR'yi destekleyen cihazlarda uygulama yükleme sırasında kullanılacak şekilde yapılandırabilirsiniz.

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

Bir cihaz, belirttiğiniz tüm koşulları 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ınlama desteğini nasıl ekleyeceğiniz gösterilmektedir.

Koşullu yayınlama seçenekleri içeren yeni bir modül ekleme

Koşullu yayınlama özelliğine sahip yeni bir özellik modülü oluşturmanın en kolay yolu, aşağıdaki gibi Yeni Modül sihirbazını kullanmaktır:

  1. Yeni Modül iletişim kutusunu açmak için menü çubuğundan Dosya > Yeni > Yeni Modül'ü seçin.
  2. Yeni Modül iletişim kutusunda Dinamik Özellik Modülü'nü seçin ve Sonraki'yi tıklayın.
  3. Modülünüzü her zamanki 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. 50 karaktere kadar 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ımlamak için bu başlığı kullanır. Bu nedenle, uygulamanızın temel modülü, modül başlığını çevirebileceğiniz bir dize kaynağı olarak içermelidir. Android Studio'yu kullanarak modülü oluştururken IDE, dize kaynağını temel modüle sizin için ekler ve özellik modülünün manifest dosyasına aşağıdaki girişi 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 Modülü yalnızca uygulama yükleme sırasında, belirtilen özelliklere sahip cihazlar için dahil et'i seçin. Bu seçenek, uygulama yükleme sırasında uygulamanıza yalnızca belirtebileceğiniz belirli yapılandırmalara (ör. cihaz özellikleri veya ülke) sahip cihazlarda dahil edilecek bir modül oluşturur. Android Studio, seçiminizi yansıtmak için modülün manifest dosyasına 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 indirilmesini belirli ülkelerle veya minimum API düzeyiyle sınırlamak istiyorsanız modülü oluşturma işlemini tamamlamak için Son'u tıklayın ve ardından ülkeye göre koşulları belirtme veya minimum API düzeyi hakkındaki bölümü okuyun. Aksi takdirde, modülün yükleme sırasında indirilebilmesi için cihazın ihtiyaç duyduğu bir özelliği eklemek üzere + cihaz özelliği'ni tıklayın.

    4. device-feature öğesinin yanındaki açılır menüden aşağıdaki seçeneklerden birini belirleyin ve değerini belirtin:

      • Ad: Bir cihazın, modülü yükleme sırasında indirmesi için ihtiyaç duyduğu donanım veya yazılım özelliğini belirtmenize olanak tanır. Koşullu yayının desteklediği özellikler, PackageManager tarafından FEATURE_* sabitleri olarak listelenenlerle aynıdır. Bu seçeneği belirlerseniz açılır listenin yanındaki alana özelliğin sabit değerinin herhangi bir bölümünü (ör. "bluetooth") yazmaya başlayın ve görünen önerilerden birini seçin.
      • OpenGL ES sürümü: Cihazın, modülü yükleme sırasında indirmesi için gereken 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ünen önerilerden birini seçin.
    5. Mevcut cihaz özelliklerine göre birden fazla koşul eklemek istiyorsanız belirtmek istediğiniz her cihaz özelliği koşulu için + cihaz özelliği'ni tıklayın.

    6. Bu modülün Android 4.4 (API düzeyi 20) ve önceki sürümleri çalıştıran cihazlarda kullanılabilmesini ve çoklu APK'lara dahil edilmesini istiyorsanız Birleştirme seçeneğinin yanındaki kutuyu işaretleyin. Bu sayede, bu modül için isteğe bağlı davranışı etkinleştirebilir ve birleştirme işlemini devre dışı bırakarak bölünmüş APK'ların indirilmesini ve yüklenmesini desteklemeyen cihazlardan kaldırabilirsiniz. Android Studio, seçiminizi yansıtmak için modülün manifest dosyasına aşağıdakileri 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ırıldığında, dinamik özellik modüllerinde lint çalıştırılır ve tüm sorunlar uygulamanın lint raporuna dahil edilir.

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

Mevcut bir özellik modülüne, modülün manifest dosyasını kullanarak koşullu yayınlama seçeneklerini kolayca ekleyebilirsiniz. Ancak önce koşullu yayınlama seçeneklerinin, daha önce etkinleştirmiş olabileceğiniz diğer yayınlama seçenekleriyle uyumluluğu hakkında bilgi edinmeniz gerekir.

Başlamak için öncelikle manifest dosyanızı yeni <dist:delivery> öğesine taşımanız gerekir. Aşağıdaki kod snippet'inde eski söz dizimi ö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 aşağıdaki gibi belirtilmektedir.

<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 dayalı koşullu yayınlama seçeneklerini aşağıdaki gibi 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, koşullu yayınlama için ülkeye göre veya minimum API düzeyi gibi diğer seçenekler ele alınmaktadır.

Diğer modül indirme seçenekleriyle uyumluluk

Özellik modülleri, her bir özelliğin kullanıcının cihazına nasıl yayınlanacağını yapılandırmak için birden fazla seçenek sunduğundan, koşullu yayınlama 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
Birleştirme (<dist:fusing dist:include="true"/>) Bir modül bu seçeneği doğru olarak ayarlarsa Google Play, uygulamanızı API düzeyi 19 veya daha düşük sürümleri çalıştıran cihazlara dağıtırken belirttiğiniz koşullu yayınlama seçeneklerine uymaz. Yani, API düzeyi 19 veya daha düşük sürümleri çalıştıran cihazlar için, birleştirme özelliğini etkinleştiren özellik modülleri her zaman yükleme sırasında dahil edilir.
Anında etkin (<dist:module dist:instant="true"/>) Hazır sürüm etkin özellik modülleri için koşullu yayınlama seçenekleri desteklenmez.
İsteğe bağlı (<dist:on-demand/>) Koşullu yayınlama seçenekleri belirtirseniz modül varsayılan olarak isteğe bağlı olarak da kullanılabilir.

Ülkeye göre koşulları belirtme

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

Bu bağlamda cihaz ülkesi genellikle kullanıcının Google Play hesabına kayıtlı fatura adresi tarafından belirlenir.

Modülünüz için ülkeleri belirtmek üzere özellik modülünün manifest dosyasına aşağıdakileri 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 için koşulları belirtme

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

Minimum veya maksimum cihaz API düzeyine göre bir koşul ayarlamak için özellik modülünüzün manifest dosyasına aşağıdakileri 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>

Diğer cihaz özellikleri için koşullar belirtme (beta)

Model adı, RAM, sistem özellikleri ve çip üzerinde sistem gibi diğer cihaz özellikleriyle ilgili koşulları belirtmek için cihaz hedefleme yapılandırma dosyası kullanabilirsiniz.

Cihaz hedefleme yapılandırma dosyası oluşturmak için cihaz hedeflemeyle ilgili dokümanlara bakın.

Yapılandırma dosyasını oluşturduktan sonra, özellik modülünün manifest dosyasına aşağıdakileri ekleyerek modülünüz için cihaz gruplarını belirtebilirsiniz.

<dist:conditions>
   <dist:device-groups>
      <dist:device-group dist:name="myCustomGroup1"/>
      <dist:device-group dist:name="myCustomGroup2"/>
   </dist:device-groups>
</dist:conditions>