Przygotowanie kompilacji wydaniowej
Pakiety aplikacji i zmniejszanie rozmiaru
Przygotowanie kompilacji wydaniowej to bezpłatna lekcja Android Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Android Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Android Academy zawiera 4 lekcji w sumie.
Od debugowania do wydania
Na co dzień uruchamiasz z Android Studio kompilację debug. Google Play potrzebuje jednak kompilacji release: mniejszej, szybszej i nieoznaczonej jako możliwa do debugowania.
Kompilacja release różni się na trzy kluczowe sposoby: jest podpisana kluczem wydania, ma ustawienie debuggable false i zwykle jest odchudzona, aby usunąć nieużywany kod i zasoby.
W tej lekcji przygotujesz prawidłową kompilację release i utworzysz plik wymagany przez Google Play: Android App Bundle (.aab).
Typy kompilacji w Gradle
Gradle domyślnie definiuje dwa typy kompilacji: debug i release. Konfigurujesz je w pliku build.gradle.kts modułu.
Blok release służy do włączania optymalizacji. Zwróć uwagę na ustawienia isMinifyEnabled i isShrinkResources poniżej — to one sprawiają, że aplikacja zajmuje mniej miejsca.
android {
buildTypes {
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
}AAB a APK
Google Play wymaga Android App Bundle (.aab), a nie zwykłego pliku .apk.
- Plik .apk zawiera kod i zasoby dla każdego urządzenia — wszystkich gęstości ekranu, wszystkich architektur procesora i wszystkich języków.
- Plik .aab przesyłasz do Play, a Play generuje niewielki, zoptymalizowany plik APK dla konkretnego urządzenia użytkownika.
W rezultacie użytkownicy pobierają mniej danych, a aplikacja zajmuje mniej miejsca po instalacji. Nadal używasz plików APK do bezpośredniego testowania na telefonie, ale publikujesz AAB.
Czym jest R8 / odchudzanie?
Gdy isMinifyEnabled = true, Android Studio uruchamia R8. R8 wykonuje trzy zadania w jednym przebiegu:
- Odchudzanie — usuwa klasy i metody, których aplikacja nigdy nie wywołuje.
- zaciemnianie — zmienia nazwy klas i metod na krótkie, takie jak
a,b,c, aby oszczędzać miejsce i utrudnić inżynierię wsteczną. - Optymalizacja — rozwija wywołania metod i przepisuje kod, aby działał szybciej.
Odchudzanie zasobów (isShrinkResources = true) dodatkowo usuwa nieużywane drawables, layouty i napisy.
Zachowywanie reguł za pomocą ProGuard
R8 czasami usuwa lub zmienia nazwy kodu, do którego odwołuje się wyłącznie mechanizm refleksji (na przykład Gson, Retrofit lub mechanizmy serializacji). Ten kod należy chronić za pomocą reguł zachowywania w pliku proguard-rules.pro.
Reguła zachowywania mówi R8: "nie zmieniaj nazw ani nie usuwaj tych klas".
# proguard-rules.pro
# Keep data classes used with Gson reflection
-keep class com.example.app.model.** { *; }
# Keep Retrofit interface methods
-keepattributes Signature
-keepattributes *Annotation*
# Keep Kotlin metadata used by libraries
-keep class kotlin.Metadata { *; }Wersjonowanie aplikacji
Każde wydanie wymaga w pliku build.gradle.kts dwóch wartości wersji:
versionCode— liczba całkowita, która musi zwiększać się przy każdym przesłaniu. Google Play używa jej, aby rozpoznać nowszą wersję kompilacji.versionName— czytelny dla użytkownika ciąg znaków, taki jak"1.4.0", wyświetlany użytkownikom.
Jeśli zapomnisz zwiększyć wartość versionCode, Google Play odrzuci przesłanie jako duplikat.
android {
defaultConfig {
applicationId = "com.example.app"
minSdk = 24
targetSdk = 35
versionCode = 12
versionName = "1.4.0"
}
}Budowanie pakietu w Android Studio
Aby utworzyć podpisany pakiet wydania z poziomu interfejsu:
- Otwórz Build → Generate Signed Bundle / APK.
- Wybierz Android App Bundle.
- Wybierz (lub utwórz) magazyn kluczy i klucz.
- Wybierz wariant kompilacji release.
Android Studio uruchomi R8, podpisze pakiet i umieści plik .aab w katalogu app/release/. To ten pojedynczy plik przesyła się do Google Play.
Budowanie z wiersza poleceń
W przypadku CI/CD lub skryptów pakiet należy budować bezpośrednio za pomocą Gradle. Nazwa zadania jest zgodna ze wzorcem bundle<Variant>.
bundleRelease tworzy plik AAB. Plik zostanie umieszczony w katalogu app/build/outputs/bundle/release/.
# Build a release App Bundle (.aab)
./gradlew bundleRelease
# Output:
# app/build/outputs/bundle/release/app-release.aab
# Build a release APK instead (for direct install/testing)
./gradlew assembleReleaseSprawdzanie i testowanie pliku AAB
Nie można bezpośrednio zainstalować pliku .aab na telefonie. Aby przetestować dokładnie te pliki APK, które wygenerowałby Google Play, należy użyć narzędzia bundletool firmy Google.
Narzędzie tworzy z pakietu pliki APK dopasowane do urządzenia i instaluje je na połączonym urządzeniu — jest to rozwiązanie najbardziej zbliżone do rzeczywistego pobrania z Google Play.
# Generate APKs from the bundle for the connected device
java -jar bundletool.jar build-apks \
--bundle=app-release.aab \
--output=app.apks \
--connected-device
# Install them on the device
java -jar bundletool.jar install-apks --apks=app.apksUsuwanie kodu debugowania z wydania
Wersja wydania nie powinna rejestrować poufnych danych ani pozostawiać włączonych funkcji przeznaczonych wyłącznie do debugowania. Do rozgałęziania działania należy używać BuildConfig.DEBUG. Wartość ta jest równa true tylko w kompilacjach debugowania.
R8 może nawet usunąć bloki chronione stałą o wartości false, co dodatkowo zmniejsza rozmiar aplikacji.
fun setupLogging() {
if (BuildConfig.DEBUG) {
// Verbose logging only in debug builds
Log.d("App", "Debug logging enabled")
Timber.plant(Timber.DebugTree())
} else {
// Release: send to crash reporting only, no console spam
Timber.plant(CrashReportingTree())
}
}Lista kontrolna gotowości wydania
Przed zbudowaniem ostatecznego pakietu należy potwierdzić, że:
- zwiększono wartość
versionCodei zaktualizowanoversionName; - włączono
isMinifyEnablediisShrinkResourcesdla wydania; - dodano reguły zachowywania dla bibliotek korzystających z refleksji;
- wartość
targetSdkspełnia bieżące wymagania Google Play; - w kodzie wydania nie ma logowania ani endpointów przeznaczonych wyłącznie do debugowania i testów;
- plik AAB przetestowano za pomocą bundletool na rzeczywistym urządzeniu.
Po spełnieniu tych warunków plik .aab jest gotowy do przesłania.
Szybki test
Ustawiono isMinifyEnabled = true, a aplikacja ulega awarii w wersji wydania z błędem "class not found" zgłoszonym przez analizator JSON, mimo że w trybie debugowania działa poprawnie. Jaka jest najbardziej prawdopodobna przyczyna?
Podsumowanie: przygotowywanie kompilacji wydania
Wiesz już, jak przekształcić aplikację debugową w kompilację gotową do publikacji:
- Google Play wymaga podpisanego pliku .aab i generuje z niego pliki APK dla poszczególnych urządzeń.
- Typ kompilacji
releasewłącza R8 za pomocąisMinifyEnablediisShrinkResources, aby zmniejszać, zaciemniać i optymalizować kod. - Reguły zachowywania chronią kod korzystający z refleksji przed usunięciem.
- Zawsze zwiększaj wartość
versionCodei aktualizujversionName. - Buduj za pomocą
./gradlew bundleReleasei testuj wynik przy użyciu narzędzia bundletool.
W następnym kroku dowiesz się, jak faktycznie działa podpisywanie, które zapewnia wiarygodność tej kompilacji.
Często zadawane pytania
Czy lekcja „Przygotowanie kompilacji wydaniowej” jest bezpłatna?
Tak — pełny tekst „Przygotowanie kompilacji wydaniowej” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Android Academy, przejdź na CoddyKit PRO. Kurs Android Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Przygotowanie kompilacji wydaniowej”?
Pakiety aplikacji i zmniejszanie rozmiaru Ćwiczysz Android Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Android Academy?
Nie wymagamy żadnego doświadczenia. Android Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Przygotowanie kompilacji wydaniowej”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Android Academy?
Tak. Każda lekcja Android Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Przygotowanie kompilacji wydaniowej
- Podpisywanie aplikacji
- Play Console i strona aplikacji
- Udostępnianie etapowe i aktualizacje