Skonfiguruj kompilację

System kompilacji Androida kompiluje zasoby aplikacji oraz kod źródłowy i pakuje je w pliki APK lub pakiety Android App Bundle, które możesz testować, wdrażać, podpisywać i rozpowszechniać.

Android Studio korzysta z Gradle, zaawansowanego zestawu narzędzi do tworzenia kompilacji, który automatyzuje proces kompilacji i nim zarządza, a także pozwala definiować elastyczne, niestandardowe konfiguracje kompilacji. Każda konfiguracja kompilacji może definiować własny zestaw kodu i zasobów, wykorzystując jednocześnie części wspólne dla wszystkich wersji aplikacji. Wtyczka Androida do obsługi Gradle współpracuje z zestawem narzędzi do kompilacji, zapewniając procesy i konfigurowalne ustawienia właściwe do tworzenia i testowania aplikacji na Androida.

Gradle i wtyczka Androida do obsługi Gradle działają niezależnie od Android Studio. Oznacza to, że możesz tworzyć aplikacje na Androida w Android Studio, za pomocą wiersza poleceń na komputerze lub na komputerach, na których nie masz zainstalowanego Android Studio, takich jak serwery ciągłej integracji.

Jeśli nie korzystasz z Android Studio, dowiedz się, jak utworzyć i uruchomić aplikację z poziomu wiersza poleceń. Dane wyjściowe kompilacji są takie same niezależnie od tego, czy tworzysz projekt z poziomu wiersza poleceń, na maszynie zdalnej czy przy użyciu Android Studio.

Uwaga: narzędzie Gradle i wtyczka Androida do obsługi Gradle działają niezależnie od Android Studio, dlatego narzędzia do kompilacji trzeba aktualizować osobno. Aby dowiedzieć się, jak zaktualizować Gradle i wtyczkę Androida do obsługi Gradle, przeczytaj informacje o wersji.

Elastyczność systemu kompilacji Androida pozwala tworzyć niestandardowe konfiguracje kompilacji bez modyfikowania podstawowych plików źródłowych aplikacji. Na tej stronie dowiesz się, jak działa system kompilacji Androida i jak może pomóc Ci dostosować i zautomatyzować różne konfiguracje kompilacji. Więcej informacji o wdrażaniu aplikacji znajdziesz w artykule Tworzenie i uruchamianie aplikacji. Jeśli chcesz od razu zacząć tworzyć niestandardowe konfiguracje kompilacji za pomocą Android Studio, przeczytaj artykuł Konfigurowanie wariantów kompilacji.

Proces kompilacji

Proces kompilacji obejmuje wiele narzędzi i procesów, które konwertują projekt na pakiety Android Application Package (APK) lub Android App Bundle (AAB).

Wtyczka Androida do obsługi Gradle wykonuje za Ciebie dużą część procesu kompilacji, ale może też przydać się do poznania niektórych aspektów tego procesu i dostosowania kompilacji pod kątem Twoich wymagań.

Różne projekty mogą mieć różne cele kompilacji. Na przykład kompilacja do biblioteki zewnętrznej powoduje utworzenie bibliotek Android Archive (AAR) lub Java Archive (JAR). Najpopularniejszym typem projektu jest jednak aplikacja, a kompilacja na potrzeby tego projektu tworzy pakiet APK lub pakiet aplikacji do debugowania, który możesz wdrożyć, przetestować lub udostępnić użytkownikom zewnętrznym.

Ta strona dotyczy tworzenia aplikacji, ale wiele etapów i koncepcji kompilacji jest typowych dla większości typów kompilacji.

Glosariusz kompilacji Androida

Gradle i wtyczka Androida do obsługi Gradle pomagają skonfigurować te aspekty kompilacji:

Typy kompilacji

Typy kompilacji określają pewne właściwości, których Gradle używa podczas tworzenia i pakowania aplikacji. Typy kompilacji są zwykle konfigurowane dla różnych etapów cyklu programowania.

Na przykład typ kompilacji do debugowania włącza opcje debugowania i podpisuje aplikację kluczem debugowania. Z kolei typ kompilacji wersji może się zmniejszać, zaciemniać i podpisywać aplikację do dystrybucji kluczem wersji.

Aby stworzyć aplikację, musisz zdefiniować co najmniej 1 typ kompilacji. Android Studio domyślnie tworzy typy kompilacji przeznaczone do debugowania i do publikacji. Aby zacząć dostosowywać ustawienia pakietu dla aplikacji, dowiedz się, jak skonfigurować typy kompilacji.

Smaki produktów
Smaki produktów oznaczają różne wersje aplikacji, które możesz udostępniać użytkownikom, np. wersję bezpłatną i płatną. Możesz dostosować smaki produktów, aby używać innego kodu i zasobów oraz udostępniać i wykorzystywać ponownie elementy wspólne dla wszystkich wersji aplikacji. Smaki produktów są opcjonalne i musisz je utworzyć ręcznie. Aby zacząć tworzyć różne wersje aplikacji, dowiedz się, jak skonfigurować różne rodzaje usług.
Utwórz warianty
Wariant kompilacji to połączenie różnych usług o typie kompilacji i rodzaju usługi. Jest to konfiguracja, której Gradle używa do tworzenia aplikacji. Za pomocą wariantów kompilacji możesz tworzyć wersje do debugowania smaków produktów w trakcie tworzenia aplikacji i podpisane wersje do publikacji smaków produktów do dystrybucji. Chociaż nie konfigurujesz bezpośrednio wersji kompilacji, konfigurujesz typy kompilacji i smaki usług, które je tworzące. Utworzenie dodatkowych typów kompilacji lub rodzajów usług powoduje również utworzenie dodatkowych wersji kompilacji. Aby dowiedzieć się, jak tworzyć warianty kompilacji i nimi zarządzać, przeczytaj omówienie konfigurowania wariantów kompilacji.
Wpisy w pliku manifestu
W konfiguracji wariantu kompilacji możesz podać wartości niektórych właściwości pliku manifestu. Te wartości kompilacji zastępują istniejące wartości w pliku manifestu. Jest to przydatne, gdy chcesz wygenerować wiele wariantów aplikacji o innej nazwie aplikacji, minimalnej wersji pakietu SDK lub docelowej wersji pakietu SDK. Jeśli dostępnych jest wiele plików manifestu, narzędzie do scalania plików manifestu scala ustawienia plików manifestu.
Zależności
System kompilacji zarządza zależnościami projektu z lokalnym systemem plików i repozytoriami zdalnymi. Oznacza to, że nie musisz ręcznie wyszukiwać, pobierać i kopiować pakietów binarnych zależności do katalogu projektu. Więcej informacji znajdziesz w artykule o dodawaniu zależności kompilacji.
Podpisanie
System kompilacji umożliwia określenie ustawień podpisywania w konfiguracji kompilacji i może automatycznie podpisywać aplikację podczas jej tworzenia. System kompilacji podpisuje wersję do debugowania za pomocą domyślnego klucza i certyfikatu, korzystając ze znanych danych logowania, aby uniknąć pytania o hasło podczas kompilacji. System kompilacji nie podpisuje wersji do publikacji, chyba że jednoznacznie zdefiniujesz konfigurację podpisywania dla tej kompilacji. Jeśli nie masz klucza wersji, możesz go wygenerować zgodnie z opisem w sekcji Podpisywanie aplikacji. Kompilacje z podpisanymi wersjami są wymagane do rozpowszechniania aplikacji w większości sklepów z aplikacjami.
Zmniejszanie kodu i zasobów
System kompilacji umożliwia określenie innego pliku reguł ProGuard dla każdego wariantu kompilacji. Podczas tworzenia aplikacji system kompilacji stosuje odpowiedni zestaw reguł, by zmniejszać kod i zasoby przy użyciu wbudowanych narzędzi, takich jak R8. Zmniejszenie kodu i zasobów może zmniejszyć rozmiar pliku APK lub pakietu AAB.
Obsługa wielu plików APK
System kompilacji pozwala automatycznie tworzyć różne pliki APK, z których każdy zawiera tylko kod i zasoby potrzebne do określonej gęstości ekranu lub interfejsu binarnego aplikacji (ABI). Więcej informacji znajdziesz w artykule o tworzeniu wielu plików APK. Zalecamy jednak udostępnienie jednego pakietu aplikacji na Androida, ponieważ umożliwia podział według języka, a także gęstości ekranu i interfejsu ABI, a jednocześnie pozwala uniknąć przesyłania wielu artefaktów do Google Play. Wszystkie nowe aplikacje przesłane po sierpniu 2021 r. muszą używać pakietów aplikacji na Androida.

Wersje Javy w kompilacjach Androida

Niezależnie od tego, czy Twój kod źródłowy jest napisany w języku Java, Kotlin czy w obu tych językach, w kilku miejscach musisz wybrać dla swojej kompilacji wersję językową JDK lub Java. Więcej informacji znajdziesz na stronie Wersje Java w kompilacjach Androida.

Tworzenie plików konfiguracji

Tworzenie niestandardowych konfiguracji kompilacji wymaga wprowadzenia zmian w co najmniej 1 pliku konfiguracji kompilacji. Te pliki tekstowe używają języka specyficznego dla domeny (Domain Specific Language) do opisania logiki kompilacji i manipulowania nią za pomocą skryptu Kotlin, który jest rodzajem języka Kotlin. Do konfigurowania kompilacji możesz też użyć Groovy, który jest językiem dynamicznym maszyny wirtualnej Java (JVM).

Aby rozpocząć konfigurowanie kompilacji, nie musisz znać skryptu Kotlin ani Groovy, bo wtyczka Androida do obsługi Gradle wprowadza większość potrzebnych elementów DSL. Więcej informacji o DSL wtyczki Android do obsługi Gradle znajdziesz w dokumentacji DSL. Skrypt Kotlin korzysta też z podstawowego DSL Gradle Kotlin.

Gdy rozpoczynasz nowy projekt, Android Studio automatycznie tworzy dla Ciebie niektóre z tych plików i wypełnia je na podstawie zrozumiałych wartości domyślnych. Struktura pliku projektu ma następujący układ:

└── MyApp/  # Project
    ├── gradle/
    │   └── wrapper/
    │       └── gradle-wrapper.properties
    ├── build.gradle(.kts)
    ├── settings.gradle(.kts)
    └── app/  # Module
        ├── build.gradle(.kts)
        └── build/
            ├── libs/
            └── src/
                └── main/  # Source set
                    ├── java/
                    │   └── com.example.myapp
                    ├── res/
                    │   ├── drawable/
                    │   ├── values/
                    │   └── ...
                    └── AndroidManifest.xml

Istnieje kilka plików konfiguracji kompilacji Gradle w ramach standardowej struktury projektu dla aplikacji na Androida. Zanim zaczniesz konfigurować kompilację, musisz poznać zakres i przeznaczenie każdego z tych plików oraz zdefiniowane przez nie podstawowe elementy DSL.

Plik opakowujący Gradle

Otoka Gradle (gradlew) to mała aplikacja dołączona do kodu źródłowego, która pobiera i uruchamia Gradle. Dzięki temu wykonywanie kompilacji będzie bardziej spójne. Programiści pobierają źródło aplikacji i uruchamiają gradlew. Pobiera ona wymaganą dystrybucję Gradle i uruchamia Gradle w celu skompilowania aplikacji.

Plik gradle/wrapper/gradle-wrapper.properties zawiera właściwość distributionUrl, która określa, która wersja Gradle ma być używana do uruchamiania kompilacji.

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

Plik ustawień Gradle

Plik settings.gradle.kts (dla DSL Kotlin) lub settings.gradle (dla DSL Groovy) znajduje się w głównym katalogu projektu. Ten plik ustawień definiuje ustawienia repozytorium na poziomie projektu i informuje Gradle, które moduły należy uwzględnić podczas tworzenia aplikacji. Projekty wielomodułowe muszą określać każdy moduł, który powinien zostać uwzględniony w ostatecznej kompilacji.

W większości projektów domyślnie plik wygląda tak:

Kotlin

pluginManagement {

    /**
      * The pluginManagement.repositories block configures the
      * repositories Gradle uses to search or download the Gradle plugins and
      * their transitive dependencies. Gradle pre-configures support for remote
      * repositories such as JCenter, Maven Central, and Ivy. You can also use
      * local repositories or define your own remote repositories. The code below
      * defines the Gradle Plugin Portal, Google's Maven repository,
      * and the Maven Central Repository as the repositories Gradle should use to look for its
      * dependencies.
      */

    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}
dependencyResolutionManagement {

    /**
      * The dependencyResolutionManagement.repositories
      * block is where you configure the repositories and dependencies used by
      * all modules in your project, such as libraries that you are using to
      * create your application. However, you should configure module-specific
      * dependencies in each module-level build.gradle file. For new projects,
      * Android Studio includes Google's Maven repository and the Maven Central
      * Repository by default, but it does not configure any dependencies (unless
      * you select a template that requires some).
      */

  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  repositories {
      google()
      mavenCentral()
  }
}
rootProject.name = "My Application"
include(":app")

Odlotowy

pluginManagement {

    /**
      * The pluginManagement.repositories block configures the
      * repositories Gradle uses to search or download the Gradle plugins and
      * their transitive dependencies. Gradle pre-configures support for remote
      * repositories such as JCenter, Maven Central, and Ivy. You can also use
      * local repositories or define your own remote repositories. The code below
      * defines the Gradle Plugin Portal, Google's Maven repository,
      * and the Maven Central Repository as the repositories Gradle should use to look for its
      * dependencies.
      */

    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}
dependencyResolutionManagement {

    /**
      * The dependencyResolutionManagement.repositories
      * block is where you configure the repositories and dependencies used by
      * all modules in your project, such as libraries that you are using to
      * create your application. However, you should configure module-specific
      * dependencies in each module-level build.gradle file. For new projects,
      * Android Studio includes Google's Maven repository and the Maven Central
      * Repository by default, but it does not configure any dependencies (unless
      * you select a template that requires some).
      */

    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}
rootProject.name = "My Application"
include ':app'

Plik kompilacji najwyższego poziomu

Plik build.gradle.kts najwyższego poziomu (dla DSL Kotlin) lub build.gradle (dla DSL Groovy) znajduje się w głównym katalogu projektu. Zwykle definiuje typowe wersje wtyczek używanych przez moduły w projekcie.

Ten przykładowy kod opisuje domyślne ustawienia i elementy DSL w skrypcie kompilacji najwyższego poziomu po utworzeniu nowego projektu:

Kotlin

plugins {

    /**
     * Use `apply false` in the top-level build.gradle file to add a Gradle
     * plugin as a build dependency but not apply it to the current (root)
     * project. Don't use `apply false` in sub-projects. For more information,
     * see Applying external plugins with same version to subprojects.
     */

    id("com.android.application") version "8.3.0" apply false
    id("com.android.library") version "8.3.0" apply false
    id("org.jetbrains.kotlin.android") version "1.9.23" apply false
}

Odlotowy

plugins {

    /**
     * Use `apply false` in the top-level build.gradle file to add a Gradle
     * plugin as a build dependency but not apply it to the current (root)
     * project. Don't use `apply false` in sub-projects. For more information,
     * see Applying external plugins with same version to subprojects.
     */

    id 'com.android.application' version '8.3.0' apply false
    id 'com.android.library' version '8.3.0' apply false
    id 'org.jetbrains.kotlin.android' version '1.9.23' apply false
}