Konfigurowanie modułu podstawowego

Pakiet aplikacji różni się od pliku APK tym, że nie można go wdrożyć na urządzeniu. Jest to raczej format publikowania, który obejmuje cały skompilowany kod i zasoby aplikacji w jednym artefakcie kompilacji. Gdy prześlesz podpisany pakiet aplikacji, Google Play będzie mieć wszystko, czego potrzebuje, by skompilować i podpisać pliki APK Twojej aplikacji oraz udostępnić je użytkownikom.

Rozpocznij

Obsługa pakietów Android App Bundle w większości projektów nie wymaga wiele wysiłku. Dzieje się tak, ponieważ moduł z kodem i zasobami podstawowego pliku APK aplikacji jest standardowym modułem aplikacji, który otrzymujesz domyślnie podczas tworzenia nowego projektu aplikacji w Android Studio. Oznacza to, że moduł, który stosuje podaną niżej wtyczkę application do pliku build.gradle, zawiera kod i zasoby niezbędne do podstawowych funkcji Twojej aplikacji.

Odlotowy

// The standard application plugin creates your app's base module.
plugins {
 id 'com.android.application'
}

Kotlin

plugins {
    // The standard application plugin creates your app's base module.
    id("com.android.application")
}

Moduł podstawowy zapewnia nie tylko podstawowe funkcje aplikacji, ale też wiele konfiguracji kompilacji i wpisów w pliku manifestu, które mają wpływ na cały projekt aplikacji.

Konfiguracja kompilacji modułu podstawowego

W przypadku większości istniejących projektów aplikacji nie musisz zmieniać niczego w konfiguracji kompilacji modułu podstawowego. Jeśli jednak rozważasz dodanie modułów funkcji do projektu aplikacji lub aplikację została już opublikowana z użyciem wielu plików APK, pamiętaj o kilku aspektach konfiguracji kompilacji modułu podstawowego.

Kod wersji i aktualizacje aplikacji

Dzięki pakietom Android App Bundle nie musisz już zarządzać kodami wersji wielu plików APK przesyłanych do Google Play. Zamiast tego możesz zarządzać tylko jednym kodem wersji w module podstawowym aplikacji, jak pokazano poniżej:

// In your base module build.gradle file
android {
    defaultConfig {
        …
        // You specify your app’s version code only in the base module.
        versionCode 5
        versionName "1.0"
    }
}

Gdy prześlesz pakiet aplikacji, Google Play użyje kodu wersji z modułu podstawowego, aby przypisać ten sam kod wersji do wszystkich plików APK wygenerowanych z tego pakietu. Oznacza to, że gdy urządzenie pobiera i instaluje Twoją aplikację, wszystkie dzielone pakiety APK tej aplikacji mają ten sam kod wersji.

Jeśli chcesz dodać do aplikacji nowy kod lub nowe zasoby, musisz zaktualizować kod wersji w podstawowym module aplikacji i utworzyć nowy, pełny pakiet aplikacji. Gdy prześlesz ten pakiet aplikacji do Google Play, wygeneruje się nowy zestaw plików APK na podstawie kodu wersji określonego przez moduł podstawowy. Następnie, gdy użytkownicy zaktualizują Twoją aplikację, Google Play będzie udostępniać im zaktualizowane wersje wszystkich plików APK zainstalowanych obecnie na urządzeniu. Oznacza to, że wszystkie zainstalowane pakiety APK są aktualizowane do nowego kodu wersji.

Inne rzeczy, które warto wziąć pod uwagę

  • Podpisywanie aplikacji: jeśli umieszczasz informacje dotyczące podpisywania w plikach kompilacji, umieść je tylko w pliku konfiguracji kompilacji modułu podstawowego. Więcej informacji znajdziesz w artykule o konfigurowaniu Gradle w celu podpisania aplikacji.
  • Zmniejszanie kodu: jeśli chcesz włączyć zmniejszanie kodu dla całego projektu aplikacji (wraz z jego modułami funkcji), musisz to zrobić z poziomu pliku build.gradle modułu podstawowego. Oznacza to, że w module funkcji możesz uwzględniać niestandardowe reguły ProGuard, ale właściwość minifyEnabled w konfiguracjach kompilacji modułu funkcji jest ignorowana.
  • Blok splits jest ignorowany: podczas tworzenia pakietu aplikacji Gradle ignoruje właściwości w bloku android.splits. Jeśli chcesz kontrolować, jakie typy plików APK konfiguracji obsługuje Twój pakiet aplikacji, użyj android.bundle, aby wyłączyć typy plików APK konfiguracji.
  • Obsługa wersji aplikacji: moduł podstawowy określa kod i nazwę wersji dla całego projektu aplikacji. Więcej informacji znajdziesz w sekcji o zarządzaniu aktualizacjami aplikacji.

Ponowne włączanie i wyłączanie typów plików APK konfiguracji

Domyślnie podczas tworzenia pakietu aplikacji może on generować pliki APK konfiguracji dla każdego zestawu zasobów językowych, zasobów gęstości ekranu i bibliotek ABI. Korzystając z bloku android.bundle w pliku build.gradle modułu podstawowego, jak pokazano poniżej, możesz wyłączyć obsługę co najmniej jednego typu konfiguracji APK:

Odlotowy

android {
    // When building Android App Bundles, the splits block is ignored.
    // You can remove it, unless you're going to continue to build multiple
    // APKs in parallel with the app bundle
    splits {...}

    // Instead, use the bundle block to control which types of configuration APKs
    // you want your app bundle to support.
    bundle {
        language {
            // This property is set to true by default.
            // You can specify `false` to turn off
            // generating configuration APKs for language resources.
            // These resources are instead packaged with each base and
            // feature APK.
            // Continue reading below to learn about situations when an app
            // might change setting to `false`, otherwise consider leaving
            // the default on for more optimized downloads.
            enableSplit = false
        }
        density {
            // This property is set to true by default.
            enableSplit = true
        }
        abi {
            // This property is set to true by default.
            enableSplit = true
        }
    }
}

Kotlin

android {
    // When building Android App Bundles, the splits block is ignored.
    // You can remove it, unless you're going to continue to build multiple
    // APKs in parallel with the app bundle
    splits {...}

    // Instead, use the bundle block to control which types of configuration APKs
    // you want your app bundle to support.
    bundle {
        language {
            // This property is set to true by default.
            // You can specify `false` to turn off
            // generating configuration APKs for language resources.
            // These resources are instead packaged with each base and
            // feature APK.
            // Continue reading below to learn about situations when an app
            // might change setting to `false`, otherwise consider leaving
            // the default on for more optimized downloads.
            enableSplit = false
        }
        density {
            // This property is set to true by default.
            enableSplit = true
        }
        abi {
            // This property is set to true by default.
            enableSplit = true
        }
    }
}

Obsługa zmian języka

Google Play określa, które zasoby językowe aplikacji zainstalować w aplikacji, na podstawie języka wybranego w ustawieniach urządzenia użytkownika. Weźmy pod uwagę użytkownika, który po pobraniu aplikacji zmienia domyślny język systemu. Jeśli Twoja aplikacja obsługuje ten język, urządzenie wysyła z Google Play żądanie dodatkowych plików APK konfiguracyjnych dla tych zasobów językowych i pobiera z Google Play dodatkowe pliki APK konfiguracji.

W przypadku aplikacji, które oferują selektor języka w aplikacji i dynamicznie zmieniają język, niezależnie od ustawienia języka na poziomie systemu, musisz wprowadzić pewne zmiany, aby zapobiec awariom z powodu brakujących zasobów. Ustaw właściwość android.bundle.language.enableSplit na false lub rozważ wdrożenie pobierania języka na żądanie przy użyciu podstawowej biblioteki Google Play zgodnie z opisem w sekcji Pobieranie dodatkowych zasobów językowych.