• Home
  • /
  • UNITY
  • /
  • Gradle i Unity: poznaj plik konfiguracyjny mainTemplate [2/2]

Gradle i Unity: poznaj plik konfiguracyjny mainTemplate [2/2]

W poprzednim wpisie opisane zostały bloki mające największą szansę na zmianę w trakcie pracy nad projektem w Unity. Warto jednak poznać plik mainTemplate w całości, dlatego dowiedz się jakie wartości są konfigurowane w bloku android.

Cały blok android

android {
    compileSdkVersion **APIVERSION**
    buildToolsVersion '**BUILDTOOLS**'

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    defaultConfig {
        minSdkVersion **MINSDKVERSION**
        targetSdkVersion **TARGETSDKVERSION**
        applicationId '**APPLICATIONID**'
        ndk {
            abiFilters **ABIFILTERS**
        }
        versionCode **VERSIONCODE**
        versionName '**VERSIONNAME**'
    }

    lintOptions {
        abortOnError false
    }

    aaptOptions {
        noCompress = ['.unity3d', '.ress', '.resource', '.obb'**STREAMING_ASSETS**]
    }**SIGN**

    buildTypes {
        debug {
            minifyEnabled **MINIFY_DEBUG**
            useProguard **PROGUARD_DEBUG**
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'**USER_PROGUARD**
            jniDebuggable true
        }
        release {
            minifyEnabled **MINIFY_RELEASE**
            useProguard **PROGUARD_RELEASE**
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'**USER_PROGUARD****SIGNCONFIG**
        }
    }**PACKAGING_OPTIONS****SPLITS**
**BUILT_APK_LOCATION**
    bundle {
        language {
            enableSplit = false
        }
        density {
            enableSplit = false
        }
        abi {
            enableSplit = true
        }
    }
}**SPLITS_VERSION_CODE****REPOSITORIES****SOURCE_BUILD_SETUP**

Blok kompilacji

Odpowiada za narzędzia, które zostaną wykorzystane do zbudowania projektu. Zmienna compileSdkVersion zostaje uzupełniana przez unity liczbą określającą wersję API Android SDK (np. 25), zaś buildToolsVersion – wersję narzędzia do budowania buildtools, np. 25.0.1. Zmienna compileOptions odpowiada za wersje javy użytej do skompilowania kodu i javy na którą ma zostać przeznaczona dana aplikacja. Tutaj na sztywno mamy określone, że obydwie wersje będą w wersji 1.8.

    compileSdkVersion **APIVERSION**
    buildToolsVersion '**BUILDTOOLS**'

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

Blok defaultConfig

W tym bloku prawie wszystkie wartości są uzupełniane zgodnie z tym, co zostało uzupełnione w oknie PlayerSettings w edytorze Unity.

defaultConfig {
        minSdkVersion **MINSDKVERSION**
        targetSdkVersion **TARGETSDKVERSION**
        applicationId '**APPLICATIONID**'
        ndk {
            abiFilters **ABIFILTERS**
        }
        versionCode **VERSIONCODE**
        versionName '**VERSIONNAME**'
    }
Wypełnione pola w PlayerSettings->Identification.
Package Name: co.organizacja.nazwagry
Version: 1.1.0
Bundle Version Code: 29
Minimum API Level: 21
Target API Level: Automatic
Screen 1. Edytor Unity, PlayerSettings z uzupełnionymi wartościami.

Zgodnie z wartościami podanymi na Screenie 1, wartości będą przedstawiały się następująco:

MINSDKVERSION 5.0 ‘Lollipop’, API level 21
TARGETSDKVERSION najwyższy zainstalowany
APPLICATIONID com.organizacja.nazwagry
VERSIONCODE 29
VERSIONNAME 1.1.0

Sprawdzenie wartości możemy sprawdzić w pliku AndroidManifest.xml w AndroidStudio otwierając zbudowane *.apk.

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="29"
    android:versionName="1.1.0"
    android:installLocation="1"
    android:compileSdkVersion="28"
    android:compileSdkVersionCodename="9"
    package="com.organizacja.nazwagry"
    platformBuildVersionCode="29"
    platformBuildVersionName="1.1.0">

    <uses-sdk
        android:minSdkVersion="21"
        android:targetSdkVersion="28" />
...

Blok lint i AAPT

 lintOptions {
        abortOnError false
    }

    aaptOptions {
        noCompress = ['.unity3d', '.ress', '.resource', '.obb'**STREAMING_ASSETS**]
    }

Lint jest narzędziem z Android Studio, które służy do skanowania kodu i plików projektu w poszukiwaniu potencjalnych problemów, np. strukturalnych. Każdy taki błąd jest następnie raportowany za pomocą wiadomości o określonym stopniu błędu (krytycznym, niskim, itd.). Wszystko to odbywa się w czasie budowania projektu, dlatego w przypadku potencjalnego błędu wykrytego przez lint – budowanie nie powiedzie się. Opcja abortOnError oznacza tyle, że wszelkie takie błędy ignorujemy, tj. pozwalamy procesowi budowania przejść dalej, a ewentualnie logi z błędami lub ostrzeżeniami — odczytać później. Zbiór dostępnych dodatkowych opcji można sprawdzić TUTAJ.

AAPT, czyli Android Asset Packaging Tool, jest narzędziem z SDK Androida do pakowania plików i zasobów do pliku *.apk. Dodatkowo pozwala przeglądać, tworzyć, aktualizować paczki kompatybilne z .zip oraz kompilować zasoby to plików binarnych. Zmienna noCompress określa jakie pliki nie będą kompresowane w aplikacji. W tym przypadku domyślnie nie będą to pliki unity3d, pliki .resource, .obb oraz streamowane assety. Pozostałe opcje AAPT można podejrzeć TUTAJ.

Blok buildTypes

By zrozumieć ten blok trzeba omówić czym jest minifikacja oraz proguard.

Minifikacją (ang. minification) nazywamy proces, w którym kod zostanie poddany zmniejszeniu dzięki usunięciu lub zmianie niepotrzebnych rzeczy bez zmiany jego funkcjonowania.. Robi się to poprzez usunięcie białych znaków, znaków nowych linii, komentarzy, itd., dzięki czemu końcowy kod źródłowy waży mniej.

Proguard zaś jest narzędziem open source. Pomaga on utrzymać mniejszy rozmiar projektu oraz przyśpieszyć jego wykonywanie. Proces, na którym opiera się proguard składa się z czterech kroków:

  1. Zmniejszeniu kodu (ang. shrink), np. dzięki minikacji. Wykrywa nieużywany kod i go usuwa (np. klasy, atrybuty, metody, zmienne).
  2. Zoptymalizowaniu kodu bajtowego.
  3. Obfuskacji czyli nadaniu klasom, metodom itd. beznaczeniowych nazw. Czyni również kod trudniejszy do inżynierii wstecznej.
  4. Weryfikacji.

W Unity możemy wykorzystać proguard w swoim projekcie, jednak robiąc to musimy pamiętać, że niektóre zewnętrzne biblioteki wymagają dopisania do niego dodatkowej konfiguracji.

Opcje Unity dotyczące proguard oraz minify.
Screen 2. Opcje build w Unity, PlayerSettings dot. user proguard file oraz minify.
MINIFY_DEBUG włączenie minifikacji w aplikacji debugowej
PROGUARD_DEBUG włączenie proguard w aplikacji debugowej
MINIFY_RELEASE włączenie minifikacji w aplikacji releasowej
PROGUARD_RELEASE włączenie proguard w aplikacjireleasowej
USER_PROGUARD Nasz plik proguard, np. proguard-user.txt
buildTypes {
        debug {
            minifyEnabled **MINIFY_DEBUG**
            useProguard **PROGUARD_DEBUG**
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'**USER_PROGUARD**
            jniDebuggable true
        }
        release {
            minifyEnabled **MINIFY_RELEASE**
            useProguard **PROGUARD_RELEASE**
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'**USER_PROGUARD****SIGNCONFIG**
        }
    }

Blok bundle

Ostatnim blokiem z jakim mamy do czynienia w całym bloku android jest blok bundle. Dzięki bundle nie musimy budować kilku różnych plików *.apk dostosowanych do różnych urządzeń, lecz tworzymy jedną aplikację, która dynamicznie pobiera odpowiednie resourcy. W przypadku języka oraz gęstości występowania pikseli na ekranie wartości są domyślnie ustawione na false, w przypadku abi wartość domyślna jest true.

bundle {
        language {
            enableSplit = false
        }
        density {
            enableSplit = false
        }
        abi {
            enableSplit = true
        }
    }

Podsumowanie mainTemplate.gradle w Unity

Linki pod każdym blokiem prowadzą do obszerniejszych opracowań danych tematów. Mam nadzieję, że taki pobieżny wpis pokazał ci gdzie możesz szukać informacji na temat bloków znajdujących się w pliku konfiguracyjnym i uzmysłowił, że Gradle nie jest takim strasznym narzędziem 🙂

Zapisz się do newslettera, odbieraj darmowe materiały do nauki i bądź na bieżąco z nowymi artykułami!

Invalid email address
Zgadzam się na wysyłkę newslettera.
Polityka prywatności