Konfigurowanie modułu aplikacji

Na tej stronie opisujemy przydatne ustawienia aplikacji zawarte w pliku build.gradle.kts na poziomie modułu. Oprócz przeglądu ważnych właściwości ustawionych w pliku build.gradle.kts dowiedz się, jak:

  • Zmienić identyfikator aplikacji dla różnych konfiguracji kompilacji.
  • Bezpiecznie dostosuj przestrzeń nazw niezależnie od identyfikatora aplikacji.

Ustaw identyfikator aplikacji

Każda aplikacja na Androida ma unikalny identyfikator, który wygląda jak nazwa pakietu w języku Java lub Kotlin, np. com.example.mojaaplikacja. Identyfikator ten jednoznacznie identyfikuje aplikację na urządzeniu i w Sklepie Google Play.

Identyfikator aplikacji jest definiowany przez właściwość applicationId w pliku build.gradle.kts modułu, jak pokazano tutaj. Zaktualizuj wartość parametru applicationId, zastępując com.example.myapp identyfikatorem aplikacji:

Kotlin

android {
    defaultConfig {
        applicationId = "com.example.myapp"
        minSdk = 15
        targetSdk = 24
        versionCode = 1
        versionName = "1.0"
    }
    ...
}

Odlotowy

android {
    defaultConfig {
        applicationId "com.example.myapp"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    ...
}

Chociaż identyfikator aplikacji wygląda jak tradycyjną nazwę pakietu Kotlin lub Java, reguły nadawania nazw identyfikatorom aplikacji są nieco bardziej restrykcyjne:

  • Musi zawierać co najmniej 2 segmenty (co najmniej 1 kropkę).
  • Każdy segment musi zaczynać się od litery.
  • Wszystkie znaki muszą być znakami alfanumerycznymi lub podkreśleniami [a-zA-Z0-9_].

Gdy tworzysz nowy projekt w Android Studio, do usługi applicationId jest automatycznie przypisywana nazwa pakietu wybrana podczas konfiguracji. Technicznie rzecz biorąc, możesz przełączać te 2 usługi niezależnie, ale nie jest to zalecane.

Podczas ustawiania identyfikatora aplikacji zalecamy wykonanie tych czynności:

  • Zachowaj identyfikator aplikacji taki sam jak w przestrzeni nazw. Rozróżnienie między tymi dwiema właściwościami może być trochę mylące, ale jeśli zachowasz te same wartości, nie masz się czym przejmować.
  • Nie zmieniaj identyfikatora aplikacji po opublikowaniu aplikacji. Jeśli to zrobisz, Sklep Google Play potraktuje ją jako nową aplikację.
  • Wyraźnie zdefiniuj identyfikator aplikacji. Jeśli identyfikator aplikacji nie jest wyraźnie zdefiniowany za pomocą właściwości applicationId, automatycznie przyjmuje tę samą wartość co przestrzeń nazw. Oznacza to, że zmiana przestrzeni nazw powoduje zmianę identyfikatora aplikacji, co zazwyczaj nie jest tym, czego potrzebujesz.

Zmiana identyfikatora aplikacji na potrzeby testowania

Domyślnie narzędzia do kompilacji stosują identyfikator aplikacji do testu instrumentów w pliku APK, korzystając z identyfikatora aplikacji w danym wariancie kompilacji z dopiskiem .test. Na przykład testowy pakiet APK wersji kompilacji com.example.myapp.free ma identyfikator aplikacji com.example.myapp.free.test.

Chociaż nie powinno to być konieczne, możesz zmienić identyfikator aplikacji, definiując właściwość testApplicationId w bloku defaultConfig lub productFlavor.

Ustawianie przestrzeni nazw

Każdy moduł Androida ma przestrzeń nazw, która jest używana jako nazwa pakietu Kotlin lub Java na potrzeby generowanych klas R i BuildConfig.

Twoja przestrzeń nazw jest zdefiniowana przez właściwość namespace w pliku build.gradle.kts modułu, tak jak w tym fragmencie kodu. Początkowo wartość namespace to nazwa pakietu wybrana przez Ciebie podczas tworzenia projektu.

Kotlin

android {
    namespace = "com.example.myapp"
    ...
}

Odlotowy

android {
    namespace "com.example.myapp"
    ...
}

Podczas kompilacji aplikacji w ostatecznym pakiecie aplikacji (APK) narzędzia do kompilacji na Androida używają przestrzeni nazw jako przestrzeni nazw dla wygenerowanej klasy R aplikacji, która służy do uzyskiwania dostępu do zasobów aplikacji. Na przykład w poprzednim pliku kompilacji klasa R jest tworzona com.example.myapp.R.

Nazwa ustawiona dla właściwości namespace pliku build.gradle.kts powinna zawsze być taka sama jak nazwa pakietu podstawowego projektu, w którym przechowujesz swoje działania i inny kod aplikacji. W projekcie możesz mieć inne podpakiety, ale te pliki muszą zaimportować klasę R przy użyciu przestrzeni nazw z właściwości namespace.

Aby uprościć przepływ pracy, zachowaj taką samą przestrzeń nazw jak identyfikator aplikacji, ponieważ są one domyślne.

Zmienianie przestrzeni nazw

W większości przypadków przestrzeń nazw i identyfikator aplikacji należy pozostawić bez zmian – nie są to wartości domyślne. Jednak w pewnym momencie może być konieczna zmiana przestrzeni nazw, jeśli chcesz uporządkować kod lub uniknąć kolidujących z nimi przestrzeni nazw.

W takich przypadkach zmień przestrzeń nazw, aktualizując właściwość namespace w pliku build.gradle.kts modułu niezależnie od identyfikatora aplikacji. Zanim to zrobisz, upewnij się, że identyfikator aplikacji jest zdefiniowany jasno. Dzięki temu zmiana przestrzeni nazw nie spowoduje zmiany identyfikatora aplikacji. Więcej informacji o wpływie przestrzeni nazw na identyfikator aplikacji znajdziesz w artykule Ustawianie identyfikatora aplikacji.

Jeśli namespace i applicationId Gradle mają różne nazwy, narzędzia do kompilacji kopiują identyfikator aplikacji do jej ostatecznego pliku manifestu na końcu kompilacji. Jeśli więc sprawdzasz plik AndroidManifest.xml po zakończeniu kompilacji, atrybut package jest ustawiany na identyfikator aplikacji. Atrybut package w scalonym pliku manifestu wskazuje, gdzie Sklep Google Play i platforma Androida rzeczywiście szukają Twojej aplikacji.

Zmiana przestrzeni nazw na potrzeby testowania

Domyślna przestrzeń nazw zestawów źródłowych androidTest i test to główna przestrzeń nazw, której nazwa to .test. Jeśli np. właściwość namespace w pliku build.gradle to com.example.myapp, przestrzeń nazw testowania jest domyślnie ustawiona na com.example.myapp.test. Aby zmienić przestrzeń nazw na potrzeby testowania, użyj właściwości testNamespace, tak jak w tym fragmencie kodu:

Kotlin

android {
    namespace = "com.example.myapp"
    testNamespace = "com.example.mytestapp"
    ...
}

Odlotowy

android {
    namespace "com.example.myapp"
    testNamespace "com.example.mytestapp"
    ...
}

Uwaga: nie ustawiaj tej samej wartości parametrów testNamespace i namespace. W przeciwnym razie wystąpi konflikt przestrzeni nazw.

Więcej informacji o testowaniu znajdziesz w artykule Testowanie aplikacji na Androidzie.