Hazır uygulamanızı Android App Bundle'ı destekleyecek şekilde taşıyın

Android Hazır Uygulama modülleriniz için kullanımdan kaldırılan Özellik Android Gradle eklentisini (com.android.feature) hâlâ kullanıyorsanız temel uygulama eklentisini (com.android.application) ve Dinamik Özellik eklentisini (com.android.dynamic-feature) kullanarak geçiş yapmanız gerekir.

Temel uygulama eklentisi, Android Gradle eklentisi 3.3.0 ve sonraki sürümlerde hazır deneyim desteği içerir. Yani temel uygulama modülü, hazır uygulama deneyimi şartlarını karşılıyorsa avantajdan otomatik olarak yararlanırsınız. Daha sonra, Dinamik Özellik eklentisini kullanarak kullanıcıların isteğe bağlı olarak anında deneyim olarak indirebileceği ek özellikler dahil edebilirsiniz. Bu kurulum, hem yüklü hem de hazır uygulama deneyimini tek bir projeden desteklemeyi kolaylaştırır ve Android App Bundle ile yayınlama avantajından yararlanmanıza olanak tanır.

Aşağıdaki tabloda, geçiş yapacağınız eklentiler daha iyi açıklanmaktadır:

Modülün açıklaması Eski eklenti Mevcut eklenti
Yüklü veya hazır uygulama deneyiminiz için temel kodu, kaynakları ve işlevleri içeren modül. com.android.feature (baseFeature = true ile) com.android.application

Not: Bu modül, uygulamanızı Android App Bundle veya APK olarak oluşturmak ve paketlemek için gereken tüm manifest ve imzalama bilgilerini içerir.

Kullanıcıların isteğe bağlı olarak indirebileceği modüler ek özellikler com.android.feature com.android.dynamic-feature (modülün manifest dosyasında dist:instant="true" ve dist:onDemand="false" ile)
Yalnızca uygulamanızın yüklü sürümünde kullanılabilen bir özelliğin kodu ve kaynağı. com.android.application com.android.dynamic-feature (modülün manifest dosyasında dist:instant="false" ve dist:onDemand="false" ile)

Bu sayfada, hazır uygulama özellikli bir Android App Bundle oluşturmak için mevcut hazır uygulama projenizi nasıl taşıyacağınız gösterilmektedir. Ayrıca hazır sürüm etkin bir Android App Bundle'ın nasıl oluşturulacağını, test edileceği ve yayınlanacağı da açıklanmaktadır.

Uygulamanız için yeni hazır uygulama deneyimleri oluşturuyorsanız bunun yerine Hazır uygulama özellikli özellik modülü oluşturma konusunu okuyun.

Değişiklikleri anlama

Projenizi Dinamik Özellik eklentisini kullanmak yerine taşıdığınızda, Android App Bundle, optimize edilmiş APK'ların kullanıcılarınıza dağıtılmasını önemli ölçüde basitleştiren yeni bir uygulama oluşturma ve yayınlama yöntemi sağlar.

Uygulama paketleri, uygulamanızın derlenen tüm kodlarını ve kaynaklarını yükleme için paketleyerek dağıtımı basitleştirir ancak APK oluşturma ve Google Play'de imzalamayı erteler. Google Play'in yeni uygulama sunma modeli, uygulama paketinizi 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 gereken kod ve kaynakları indirir. Artık farklı cihazları desteklemek için birden fazla APK oluşturmak, imzalamak ve yönetmek zorunda kalmazsınız, kullanıcılar daha küçük ve daha optimize edilmiş indirmeler elde ederler.

Artık kullanımdan kaldırılan özellik eklentisini kullanırken hazır uygulama oluşturmak, hazır uygulama modülünüz de dahil olmak üzere tüm modülleriniz için paylaşılan kod ve kaynakları içeren bir temel özellik modülü oluşturmanızı gerektiriyordu. Kodunuzun geri kalanı, hazır uygulama deneyimleriniz için giriş noktaları içeren temel olmayan birden fazla özellik modülüne eklenmişti. Projenizin yüklü sürümünde yalnızca yüklü uygulamanız için gereken kodu ve etkinlikleri içeren ayrı bir uygulama modülü bulunabilir.

Uygulamanızı Android App Bundle'ı destekleyecek şekilde taşıdığınızda, uygulama modülünüz temel modülün rolünü geri alır ve ek yüklü veya hazır deneyimleri özellik modülleri olarak düzenlersiniz. Yani, projeniz artık anında kullanılabilen bir temel modüle ve modüler hazır deneyimler ekleme özelliğine sahip, standart bir uygulama projesine daha çok benziyor.

Mevcut hazır uygulama projenizi taşımak ve Android App Bundle'ın daha optimize edilmiş dağıtım modelini benimsemek için aşağıdaki bölümlerde açıklanan adımları izleyin.

Temel özellik modülünü bir uygulama modülüne dönüştürün

Temel özellik modülünün build.gradle dosyasını, ana uygulama modülüne dönüştürmeden önce aşağıdaki gibi düzenlemeniz gerekir:

  1. baseFeature true satırını silin.
  2. feature veya application bağımlılık yapılandırmalarını kullanan tüm bağımlılıkları kaldırın.

    Modern

    dependencies {
        ...
        // delete any lines that look like
        // feature project(":foo")
        // feature project(":bar")
        // application project(":app")
    }
    

    Kotlin

    dependencies {
        ...
        // delete any lines that look like
        // feature(project(":foo"))
        // feature(project(":bar"))
        // application(project(":app"))
    }
    
  3. applicationId öğesini, temel uygulama modülünüzde olmasını beklediğiniz diğer tüm derleme komut dosyası yapılandırmalarıyla birlikte mevcut com.android.application modülünden com.android.feature modülüne taşıyın. Bazı örnekler aşağıda gösterilmiştir. Bu adımda, özel build.gradle kurulumunuza bağlı olarak önceki uygulama modülünden build.gradle android bloğunu kopyalayıp yeni uygulama modülünün build.gradle dosyasına yapıştırmak daha kolay olabilir. Ancak bunu yaparken dikkatli olmalısınız.

    Modern

    android {
        ...
        defaultConfig {
            // You need to move the application ID from the app module
            // to your feature module.
            applicationId "com.example.myapp"
            ...
        }
        // Some additional build configurations you might want to
        // copy from your current ‘app’ module may include ProGuard
        // rules and code shrinking settings.
        buildTypes {
            release {
                minifyEnabled true
                proguardFiles getDefaultProguardFile(
                  'proguard-android-optimize.txt'),
                  'proguard-rules.pro'
            }
        }
    }
    

    Kotlin

    android {
        ...
        defaultConfig {
            // You need to move the application ID from the app module
            // to your feature module.
            applicationId = "com.example.myapp"
            ...
        }
        // Some additional build configurations you might want to
        // copy from your current ‘app’ module may include ProGuard
        // rules and code shrinking settings.
        buildTypes {
            getByName("release") {
                minifyEnabled = true
                proguardFiles(
                    getDefaultProguardFile("proguard-android-optimize.txt"),
                    "proguard-rules.pro"
                )
            }
        }
    }
    
  4. Aşağıda gösterildiği gibi, uygun paket dağıtım etiketlerini manifeste ekleyerek özellik modülünü hazır özellikli olarak işaretleyin.

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="true" />
        ...
    </manifest>
    
  5. Eklenti türünü com.android.application olarak değiştirerek özellik modülünü temel uygulama modülünüze dönüştürün:

    Modern

    // Replace  "plugins { id 'com.android.feature' }"
    // with the following
    plugins {
      id 'com.android.application'
    }
    

    Kotlin

    // Replace  "plugins { id("com.android.feature") }"
    // with the following
    plugins {
        id("com.android.application")
    }
    

Eski uygulama modülünü yükleme zamanı özellik modülüne dönüştürün

Eski uygulama modülünde kodunuz veya kaynağınız yoksa önceki bölümde uyguladığınız adımlar, özellik modülünüzü uygulamanızın temel uygulama modülüne dönüştürdüğü için kolayca silebilirsiniz.

Ancak eski uygulama modülünde, uygulamanızı yüklediklerinde kullanıcılara sunulmasını istediğiniz işlevleri temsil eden kod ve kaynaklarınız varsa uygulama modülünü bir özellik modülüne dönüştürmek için bu bölümdeki adımları uygulayın.

Özellik modülü oluşturma işlemi, com.android.application olan eklenti türünü com.android.dynamic-feature olarak değiştirmeyi ve aşağıdaki build.gradle değişikliğini yapmayı içerir:

  1. com.android.application olan eklenti türünü com.android.dynamic-feature olarak değiştirin.

    Modern

    // Replace "plugins { id 'com.android.feature' }"
    // with the following:
    plugins {
      id 'com.android.dynamic-feature'
    }
    

    Kotlin

    // Replace "plugins { id("com.android.application") }"
    // with the following:
    plugins {
        id("com.android.dynamic-feature")
    }
    
  2. Önceki bölümde açıklandığı gibi, com.android.application eklentisinin gerektirdiği derleme yapılandırmalarını (applicationId veya proguardFiles kuralları gibi) temel uygulama modülüne taşıdığınızdan emin olun.

  3. Modülü aşağıdaki gibi "installed_feature" olarak yeniden adlandırın:

    1. Menü çubuğundan Görünüm > Araç Pencereleri > Proje'yi seçerek Proje bölmesini açın.
    2. Özellik modülünü sağ tıklayın ve Yeniden düzenle > Yeniden Adlandır'ı seçin.
    3. Açılan iletişim kutusunda Modülü yeniden adlandır'ı seçin ve Tamam'ı tıklayın.
    4. Modülün yeni adını girin ve Tamam'ı tıklayın.
  4. 3. adıma benzer şekilde, önceki bölümde oluşturduğunuz yeni uygulama modülünün adını "uygulama" gibi bir adla değiştirin.

  5. Aşağıda gösterildiği gibi, özellik modülünün build.gradle dosyasındaki "uygulama" modülüne bir uygulama bağımlılığı ekleyin.

    Modern

    dependencies {
        ...
        // In the feature module, add an implementation dependency
        // on the base app module.
        implementation project(":app")
    }
    

    Kotlin

    dependencies {
        ...
        // In the feature module, add an implementation dependency
        // on the base app module.
        implementation(project(":app"))
    }
    
  6. Özelliği yeni uygulama modülünün build.gradle dosyasına ekleyin.

    Modern

    android {
        ...
        // In the base app module, specify each feature module.
        dynamicFeatures = [":installed_feature"]
    }
    

    Kotlin

    android {
        ...
        // In the base app module, specify each feature module.
        dynamicFeatures.addAll(listOf(":installed_feature"))
    }
    
  7. Özellik modülünün manifest dosyasında, uygun paket dağıtım etiketlerini manifeste ekleyerek özellik modülünü yüklenebilir bir modül olarak işaretleyin.

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="false" dist:onDemand="false"
                dist:title="@string/title_dynamic_feature">
            <dist:fusing dist:include="true" />
        </dist:module>
        ...
    </manifest>
    

Diğer özellik modüllerini anında etkinleştirilen özellik modüllerine dönüştürün

Uygulamanızın ek işlevlerini birden fazla Özellik modülüne modülerleştirdiyseniz bu modülleri hazır özellikli özellik modüllerine dönüştürmek için bu bölümdeki adımları uygulamanız gerekir.

Projenizdeki kalan her özellik modülü için aşağıdaki adımları uygulayarak bunları anında etkinleştirilen özelliklere dönüştürün:

  1. build.gradle dosyasındaki eklenti türünü aşağıda gösterildiği gibi com.android.dynamic-feature olarak değiştirin:

    Modern

    // Replace 'com.android.feature' with 'com.android.dynamic-feature'
    plugins {
      id 'com.android.dynamic-feature'
    }
    

    Kotlin

    // Replace "com.android.feature" with "com.android.dynamic-feature"
    plugins {
        id("com.android.dynamic-feature")
    }
    
  2. Aşağıdaki kodu manifest dosyasına ekleyerek her bir özellik modülünü hazırda etkin olarak işaretleyin.

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="true" dist:onDemand="false"
                dist:title="@string/title_dynamic_feature">
            <dist:fusing dist:include="true" />
        </dist:module>
        ...
    </manifest>
    
  3. Özellik modülünü yeni uygulama modülünün build.gradle dosyasına, installed_feature öğesini de özellik modülleri listesine ekleyin.

    Modern

    android {
       ...
       dynamicFeatures = [":installed_feature", ":feature_1", ":feature_2"]
       // or whichever name exists for the instant enabled feature module
    }
    

    Kotlin

    android {
       ...
       dynamicFeatures.addAll(listOf(":installed_feature", ":feature_1", ":feature_2"))
       // or whichever name exists for the instant enabled feature module
    }
    

Hazır sürüm özellikli yeni uygulama paketi oluşturun, test edin ve yayınlayın

Bu sayfadaki adımları tamamladıktan sonra projeniz, uygulamanızın hem yüklü hem de hazır sürümünü Google Play Console'da yayınlamak ve hazır ve yüklü kanallar için ayrı olarak kullanıma sunmak için kullanabileceğiniz tek bir yapı olan Android App Bundle oluşturabilir. Buna ek olarak, uygulama paketleri sayesinde her kullanıcının cihaz yapılandırmasına göre optimize edilmiş APK'lar sunma avantajından faydalanırsınız. Böylece kullanıcılar yalnızca uygulamanızı çalıştırmak için ihtiyaç duydukları kodu ve kaynakları indirirler. Böylece, farklı cihazları desteklemek için artık birden çok APK oluşturmak, imzalamak ve yönetmek zorunda kalmazsınız. Kullanıcılar da daha küçük ve daha optimize edilmiş indirmeler elde eder.

Hazır sürüm özellikli uygulama paketinizi oluşturup test etmeye başlamak için Uygulama paketi oluşturma bölümüne gidin.