Konfigurowanie modułu aplikacji

Na tej stronie opisaliśmy 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, opisujemy też, jak:

  • Zmień identyfikator aplikacji w przypadku różnych konfiguracji kompilacji.
  • Bezpieczne dostosowywanie przestrzeni 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.mojaaplikacja. Ten identyfikator jednoznacznie identyfikuje aplikację na urządzeniu i w Sklepie Google Play.

Identyfikator aplikacji jest zdefiniowany przez właściwość applicationId w pliku build.gradle.kts Twojego 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"
    }
    ...
}

Groovy

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

Identyfikator aplikacji wygląda jak tradycyjna nazwa pakietu w języku Kotlin lub Java, ale zasady nazewnictwa identyfikatorów 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 podkreśleniami [a-zA-Z0-9_].

Gdy tworzysz nowy projekt w Android Studio, applicationId zostanie automatycznie przypisany do nazwy pakietu wybranej podczas konfiguracji. Od tego momentu możesz przełączać się między tymi właściwościami niezależnie od siebie, ale nie jest to zalecane.

Podczas ustawiania identyfikatora aplikacji zalecamy wykonanie tych czynności:

  • Identyfikator aplikacji powinien być taki sam jak nazwa przestrzeni nazw. Różnica między tymi dwoma usługami może być nieco myląca, ale jeśli nie zmieniasz ich nazwy, nie musisz się niczego obawiać.
  • Nie zmieniaj identyfikatora aplikacji po jej opublikowaniu. Jeśli to zrobisz, Sklep Google Play będzie traktować kolejne przesłanie jako nową aplikację.
  • Wyraźnie określ identyfikator aplikacji. Jeśli identyfikator aplikacji nie jest zdefiniowany za pomocą właściwości applicationId, przyjmuje automatycznie tę samą wartość co nazwa przestrzeni. Oznacza to, że zmiana przestrzeni nazw powoduje zmianę identyfikatora aplikacji, co zwykle nie jest pożądane.

Zmiana identyfikatora aplikacji na potrzeby testowania

Domyślnie narzędzia do kompilacji stosują identyfikator aplikacji do pliku APK testu wewnątrz aplikacji, używając identyfikatora aplikacji dla danej wersji kompilacji z dodatkiem .test. Na przykład testowy pakiet APK dla wersji 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.

Ustaw przestrzeń nazw

Każdy moduł Androida ma przestrzeń nazw, która jest używana jako nazwa pakietu Kotlin lub Java dla wygenerowanych klas RBuildConfig.

Twój obszar nazw jest zdefiniowany przez właściwość namespace w pliku build.gradle.kts modułu, jak pokazano w tym fragmencie kodu. Wartość namespace jest początkowo ustawiona na nazwę pakietu wybraną podczas tworzenia projektu.

Kotlin

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

Groovy

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

Podczas kompilowania aplikacji w pakiet aplikacji (APK) narzędzia kompilacji Androida używają przestrzeni nazw jako przestrzeni nazw 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 miejscu com.example.myapp.R.

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

Aby uprościć proces, zachowaj tę samą przestrzeń nazw co identyfikator aplikacji, ponieważ domyślnie są one takie same.

Zmień przestrzeń nazw

W większości przypadków należy pozostawić identyfikator przestrzeni nazw i identyfikator aplikacji bez zmian, ponieważ są one domyślne. Może się jednak okazać, że w pewnym momencie trzeba będzie zmienić przestrzeń nazw, np. gdy będziesz przeorganizowywać kod lub unikać 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 zdefiniowany w sposób jednoznaczny, aby zmiana przestrzeni nazw nie powodowała zmiany identyfikatora aplikacji. Więcej informacji o tym, jak nazwa przestrzeni może wpływać na identyfikator aplikacji, znajdziesz w sekcji Konfigurowanie identyfikatora aplikacji.

Jeśli masz różne nazwy dla namespace i Gradle applicationId, narzędzia kompilacji kopiują identyfikator aplikacji do finalnego pliku manifestu aplikacji na końcu kompilacji. Jeśli więc po kompilacji przejrzysz plik AndroidManifest.xml, zobaczysz, że atrybut package ma wartość identyfikatora aplikacji. Atrybut package w złączonym pliku manifestu to miejsce, w którym Sklep Google Play i platforma Androida szukają informacji o Twojej aplikacji.

Zmiana przestrzeni nazw na potrzeby testów

Domyślna przestrzeń nazw dla zbiorów androidTesttest to główna przestrzeń nazw z dodaną na końcu nazwą .test. Jeśli np. właściwość namespace w pliku build.gradle ma wartość com.example.myapp, przestrzeń nazw testów 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"
    ...
}

Groovy

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

Uwaga: nie ustawiaj wartości testNamespacenamespace na tę samą, ponieważ w przeciwnym razie wystąpią kolizje nazw przestrzeni.

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