You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -16,11 +16,11 @@ System budowania aplikacji `Android` kompiluje zasoby, kod źródłowy oraz paki
16
16
Budowanie aplikacji angażuje wiele narzędzi i uruchamia różne procesy umożliwiające konwersje projektu do `APK`. Typowy proces przebiega następująco. Na początku kompilator konwertuje kod źródłowy do plików `DEX` (`Dalvik Executable`) zawierających kod bajtowy, a pozostałe pliki i zależności do skompilowanych zasobów. Następnie `APK Packager` łączy i optymalizuje pliki `DEX` i skompilowane zasoby do jednego pliku `APK` podpisując go kluczem `debug` lub `release` z `keystore`. Powstały plik `APK` jest gotowy do instalacji, debugowania czy testowania.
17
17
18
18
## Konfiguracja
19
-
Dokonując konfiguracji budowania projektu można wyróżnić kilka aspektów wpływających na wyjściowy rezultat. `buildTypes` definiuje właściwości dla wydań (np. zaciemnienie release), `productFlavors` reprezentuje różne wersje aplikacji (np. płatna, darmowa, demo) które mogą używać współdzielonych jak i prywatnych zasobów natomiast `buildVariants` jest konkretnym wariantem budowania wynikającym z połączenia wybranych `buildTypes` i `productFlavors`. Wartości wpisów w `AndroidManifest` mogą się różnić w zależności od wariantu budowania (np. inna nazwa czy różne minSdk). System budowania zarządza także wpisami lokalnych i zdalnych zależności `dependencies` dzięki czemu nie ma potrzeby ręcznego szukania, pobierania i kopiowania pakietów zależności do projektu. Ponadto umożliwia ustawienie podpisu autentykacyjnego i zasad bezpieczeństwa `ProGuard` oraz wspiera budowanie wielu `APK`.
19
+
Dokonując konfiguracji budowania projektu można wyróżnić kilka aspektów wpływających na wyjściowy rezultat. `buildTypes` definiuje właściwości dla wydań (np. zaciemnienie release), `productFlavors` reprezentuje różne wersje aplikacji (np. płatna, darmowa, demo). `buildVariants` jest konkretnym wariantem budowania wynikającym z połączenia wybranych `buildTypes` i `productFlavors`, które mogą używać współdzielonych jak i prywatnych zasobów. Wartości wpisów w `AndroidManifest` mogą się różnić w zależności od wariantu budowania (np. inna nazwa czy różne minSdk). System budowania zarządza także wpisami lokalnych i zdalnych zależności `dependencies` dzięki czemu nie ma potrzeby ręcznego szukania, pobierania i kopiowania pakietów zależności do projektu. Ponadto umożliwia ustawienie podpisu autentykacyjnego i zasad bezpieczeństwa `ProGuard` oraz wspiera budowanie wielu `APK`.
20
20
21
21
## Pliki
22
-
Informacje nt konfiguracji znajdują sie w kilku plikach projektu. Używają one `DSL` (`Domain Specific Language`) do opisania i manipulowania logiką przy pomocy `Groovy` (dynamicznego języka dla `JVM`). `Android Gradle plugin` dostarcza większość potrzebnych elementów `DSL` w związku z czym nie jest wymagana wiedza programowania w `Groovy`. Kod źródłowy i zasoby powinny być logicznie pogrupowane zgodnie z przynależnością do modułu, tzn. kod oraz zasoby znajdujące się w `src/main` są współdzielone przez wszystkie warianty kompilacji, natomiast np. `src/debug` tylko dla wariantu debug.
23
-
22
+
Informacje nt konfiguracji znajdują sie w kilku plikach projektu należących do danego modułu. Używają one `DSL` (`Domain Specific Language`) do opisania i manipulowania logiką przy pomocy `Groovy` (dynamicznego języka dla `JVM`). `Android Gradle plugin` dostarcza większość potrzebnych elementów `DSL` w związku z czym nie jest wymagana wiedza programowania w `Groovy`.
23
+
24
24
`settings.gradle` deklaruje moduły, które powinny wziąć udział w procesie budowania projektu
25
25
26
26
{% highlight gradle %}
@@ -94,7 +94,7 @@ android {
94
94
// Configure multiple build types like apply Proguard for release and make debug debuggable
Aby budowane warianty aplikacji zadeklarowane w build.gradle rzeczywiście różniły się implementacją należy stworzyć dla nich lokalizacje odpowiadające nazwie wariantu oraz umieścić tam specyficzny kod źródłowy i zasoby. Dla zdefiniowanych powyżej wariantów ich zbiory źródeł mogłyby znajdować się w: `src/debug`, `src/release`, `src/debugFree`, `src/debugPaid`, `src/releaseFree`, `src/releasePaid`. Zawartość `src/main` jest traktowana jako domyślna i współdzielona przez wszystkie warianty kompilacji natomiast źródła konkretnych wariantów nadpisują implementację bazową zgodnie z zasadą priorytetów (`build variant > build type > build flavor > main > library`).
170
+
171
+
## Optymalizacja
172
+
Tworząc konfiguracje budowania aplikacji należy rozważyć optymalizację czasu procesu kompilacji oraz rozmiaru pliku wyjściowego. Budowanie wielu `APK` dedykowanych pod konkretne architektury czy gęstości ekranów pozwala zmniejszyć rozmiar poprzez załączenie tylko wymaganych zasobów. Jednakże taki proces znacząco wydłuża czas całkowitej kompilacji w związku z czym warto wyłączyć niepotrzebne wersje oraz zawężyć wariant deweloperski. Ponadto zastosowanie zasad `ProGuard` także umożliwia redukcje rozmiaru przy jednoczesnym spowolnieniu kompilacji. Użycie statycznych zależności, trybu offline, cache czy `Instant Run` przyśpiesza budowanie projektu. W przypadku wersji produkcyjnej przeważnie dąży się przede wszystkim do optymalizacji rozmiaru natomiast w wersji deweloperskiej do optymalizacji czasu kompilacji.
173
+
174
+
{% highlight gradle %}
175
+
android {
176
+
177
+
//...
178
+
179
+
flavorDimensions "stage", "version"
180
+
productFlavors {
181
+
//...
182
+
183
+
//add developer and production flavor with new dimension
184
+
dev {
185
+
//...
186
+
dimension "stage"
187
+
resConfigs "pl", "xxhdpi" //attach only pl resources
188
+
}
189
+
prod {
190
+
//...
191
+
dimension "stage"
192
+
}
193
+
}
194
+
195
+
// Configure different APK builds that each contains only needed code and resources for density and abi
196
+
// Notice that every build must have unique version code for store
0 commit comments