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 R
i BuildConfig
.
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 androidTest
i test
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 testNamespace
i namespace
na tę samą, ponieważ w przeciwnym razie wystąpią kolizje nazw przestrzeni.
Więcej informacji o testowaniu znajdziesz w artykule Testowanie aplikacji na Androida.