Konfigurowanie modułu aplikacji

Na tej stronie opisano przydatne ustawienia aplikacji w pliku build.gradle.kts na poziomie modułu. Oprócz omówienia ważnych właściwości ustawionych w pliku build.gradle.kts dowiesz się, jak:

  • Zmień identyfikator aplikacji w przypadku różnych konfiguracji kompilacji.
  • bezpiecznie dostosowywać przestrzeń nazw niezależnie od identyfikatora aplikacji.

Ustawianie identyfikatora aplikacji

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

Identyfikator aplikacji jest określany przez właściwość applicationId w pliku build.gradle.kts modułu, jak pokazano tutaj. Zaktualizuj wartość 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"
    }
    ...
}

Dynamiczny

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

Chociaż identyfikator aplikacji wygląda jak tradycyjna nazwa pakietu Kotlin lub Java, reguły nazewnictwa identyfikatora 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ć alfanumeryczne lub być podkreśleniem [a-zA-Z0-9_].

Gdy utworzysz nowy projekt w Android Studio, do applicationId zostanie automatycznie przypisana nazwa pakietu wybrana podczas konfiguracji. Od tego momentu możesz technicznie przełączać te 2 właściwości niezależnie, ale nie jest to zalecane.

Podczas ustawiania identyfikatora aplikacji zalecamy wykonanie tych czynności:

  • Identyfikator aplikacji powinien być taki sam jak przestrzeń nazw. Różnica między tymi 2 właściwościami może być nieco myląca, ale jeśli ustawisz je tak samo, nie musisz się o nic martwić.
  • Nie zmieniaj identyfikatora aplikacji po jej opublikowaniu. Jeśli to zrobisz, Sklep Google Play potraktuje kolejne przesłanie 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 zwykle nie jest pożądane.

Zmienianie identyfikatora aplikacji na potrzeby testowania

Domyślnie narzędzia do kompilacji stosują identyfikator aplikacji do pliku APK testu z instrumentacją, używając identyfikatora aplikacji dla danego wariantu kompilacji z dołączonym ciągiem .test. Na przykład testowy plik APK dla wariantu kompilacji com.example.myapp.free ma identyfikator aplikacji com.example.myapp.free.test.

Nie powinno to być konieczne, ale 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 dla wygenerowanych klas R i BuildConfig.

Przestrzeń nazw jest definiowana przez właściwość namespace w pliku build.gradle.kts modułu, jak pokazano w tym fragmencie kodu. Wartość namespace jest początkowo ustawiana na nazwę pakietu wybraną podczas tworzenia projektu.

Kotlin

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

Dynamiczny

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

Podczas tworzenia ostatecznego pakietu aplikacji (APK) narzędzia do kompilacji 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 w com.example.myapp.R.

Nazwa ustawiona dla właściwości namespace pliku build.gradle.kts powinna zawsze odpowiadać nazwie pakietu podstawowego projektu, w którym przechowujesz aktywności i inny kod aplikacji. W projekcie możesz mieć inne pakiety podrzędne, ale te pliki muszą importować klasę R za pomocą przestrzeni nazw z właściwości namespace.

Aby uprościć przepływ pracy, zachowaj przestrzeń nazw taką samą jak identyfikator aplikacji, tak jak jest to domyślnie.

Zmień przestrzeń nazw.

W większości przypadków przestrzeń nazw i identyfikator aplikacji powinny być takie same, jak domyślnie. Może się jednak zdarzyć, że trzeba będzie zmienić przestrzeń nazw, jeśli reorganizujesz kod lub chcesz uniknąć kolizji 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 wyraźnie zdefiniowany, aby zmiana przestrzeni nazw nie spowodowała zmiany identyfikatora aplikacji. Więcej informacji o tym, jak przestrzeń nazw może wpływać na identyfikator aplikacji, znajdziesz w artykule o ustawianiu identyfikatora aplikacji.

Jeśli masz różne nazwy dla namespace i Gradle applicationId, narzędzia do kompilacji skopiują identyfikator aplikacji do ostatecznego pliku manifestu aplikacji na końcu kompilacji. Jeśli więc sprawdzisz plik AndroidManifest.xml po kompilacji, atrybut package będzie ustawiony na identyfikator aplikacji. Atrybut package w pliku manifestu łączonego to miejsce, w którym Sklep Google Play i platforma Androida szukają informacji identyfikujących Twoją aplikację.

Zmienianie przestrzeni nazw na potrzeby testowania

Domyślna przestrzeń nazw dla zbiorów źródeł androidTest i test to główna przestrzeń nazw z dodanym na końcu .test. Jeśli na przykład właściwość namespace w pliku build.gradle ma wartość com.example.myapp, testowa przestrzeń nazw jest domyślnie ustawiona na com.example.myapp.test. Aby zmienić przestrzeń nazw na potrzeby testowania, użyj właściwości testNamespace, jak pokazano w tym fragmencie kodu:

Kotlin

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

Dynamiczny

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

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