Android Academy · Lektion

Forberedelse af et release-build

App-bundles og shrinking.

Lektion 1 af 413 trin

Forberedelse af et release-build er en gratis Android Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Android Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Android Academy-kurset indeholder 4 lektioner i alt.

Fra debug til release

Hver dag kører du debug-buildet fra Android Studio. Men Google Play kræver et release-build: mindre, hurtigere og ikke markeret som fejlsøgbart.

Et release-build adskiller sig på tre vigtige måder: Det er signeret med din release-nøgle, det har debuggable false, og det er normalt skrumpet for at fjerne ubrugt kode og ubrugte ressourcer.

I denne lektion gør du et korrekt release-build klar og producerer den fil, Google Play ønsker: et Android App Bundle (.aab).

Build-typer i Gradle

Gradle definerer som standard to build-typer: debug og release. Du konfigurerer dem i modulets build.gradle.kts.

Det er i release-blokken, du aktiverer optimeringer. Bemærk isMinifyEnabled og isShrinkResources nedenfor — det er de kontakter, der gør din app mindre.

android {
    buildTypes {
        release {
            isMinifyEnabled = true
            isShrinkResources = true
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
}

AAB kontra APK

Google Play kræver et Android App Bundle (.aab), ikke en almindelig .apk.

  • En .apk indeholder kode og ressourcer til alle enheder — alle skærmtætheder, CPU-arkitekturer og sprog.
  • En .aab uploades til Play, som genererer en lille, optimeret APK til hver brugers præcise enhed.

Resultatet er, at brugerne downloader mindre, og at din app installeres i en mindre størrelse. Du bruger stadig APK'er til direkte test på en telefon, men udgiver en AAB.

Hvad er R8 / shrinking?

Når isMinifyEnabled = true, kører Android Studio R8. R8 udfører tre opgaver i én arbejdsgang:

  • Skrumpning — fjerner klasser og metoder, som din app aldrig kalder.
  • Obfuskering — omdøber klasser og metoder til korte navne som a, b og c for at spare plads og gøre reverse engineering sværere.
  • Optimering — indsætter og omskriver kode, så den kører hurtigere.

Ressourceskrumpning (isShrinkResources = true) fjerner desuden ubrugte drawables, layouts og strings.

Bevar regler med ProGuard

R8 fjerner eller omdøber nogle gange kode, der kun refereres til via reflection (for eksempel af Gson, Retrofit eller serialisering). Du beskytter denne kode med bevaringsregler i proguard-rules.pro.

En bevaringsregel fortæller R8: "du må ikke omdøbe eller slette disse klasser".

# 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 { *; }

Versionering af din app

Hver udgivelse kræver to versionsværdier i build.gradle.kts:

  • versionCode — et heltal, der skal øges ved hver upload. Play bruger det til at vide, hvilken build der er nyere.
  • versionName — en læsevenlig tekststreng som "1.4.0", der vises til brugerne.

Hvis du glemmer at øge versionCode, afviser Play uploaden som en duplikat.

android {
    defaultConfig {
        applicationId = "com.example.app"
        minSdk = 24
        targetSdk = 35
        versionCode = 12
        versionName = "1.4.0"
    }
}

Byg pakken i Android Studio

Sådan opretter du en signeret udgivelsespakke fra brugerfladen:

  • Åbn Build → Generate Signed Bundle / APK.
  • Vælg Android App Bundle.
  • Vælg eller opret dit keystore og din nøgle.
  • Vælg build-varianten release.

Android Studio kører R8, signerer pakken og placerer .aab-filen i app/release/. Det er denne ene fil, du uploader til Play.

Byg fra kommandolinjen

Til CI/CD eller scripts bygger du pakken direkte med Gradle. Opgavens navn følger mønsteret bundle<Variant>.

bundleRelease opretter AAB'en. Filen placeres i 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 assembleRelease

Undersøg og test AAB'en

Du kan ikke installere en .aab direkte på en telefon. Hvis du vil teste de nøjagtige APK-filer, som Play ville generere, skal du bruge Googles bundletool.

Værktøjet bygger enhedsspecifikke APK-filer fra din pakke og installerer dem på en tilsluttet enhed — det kommer tættest på en rigtig Play-download.

# 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.apks

Fjern fejlsøgningskode fra udgivelsen

En release-build bør ikke logge følsomme data eller efterlade funktioner, der kun er beregnet til fejlsøgning, aktive. Brug BuildConfig.DEBUG til at vælge adfærd. Den er kun true i debug-builds.

R8 kan endda fjerne blokke, der er beskyttet af en konstant false, så det reducerer også størrelsen.

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())
    }
}

Tjekliste til en udgivelse

Bekræft følgende, før du bygger den endelige pakke:

  • versionCode er øget, og versionName er opdateret.
  • isMinifyEnabled og isShrinkResources er aktiveret for release.
  • Der er tilføjet bevaringsregler for biblioteker, der bruger reflection.
  • targetSdk opfylder Plays aktuelle krav.
  • Der er ingen logning, test eller test-endepunkter, der kun er beregnet til fejlsøgning, i release-koden.
  • Du har testet AAB'en via bundletool på en rigtig enhed.

Når disse punkter er opfyldt, er din .aab klar til upload.

Hurtigt tjek

Du har angivet isMinifyEnabled = true, og din app går ned i release med en "class not found"-fejl fra din JSON-parser, men fungerer fint i debug. Hvad er den mest sandsynlige årsag?

Opsummering: Forberedelse af en release-build

Du ved nu, hvordan du omdanner en debug-app til en build, der kan udgives:

  • Play kræver en signeret .aab, og Play genererer APK-filer til hver enhed ud fra den.
  • Build-typen release aktiverer R8 via isMinifyEnabled og isShrinkResources for at reducere, sløre og optimere koden.
  • Bevaringsregler beskytter kode, der bruger reflection, mod at blive fjernet.
  • Øg altid versionCode, og opdater versionName.
  • Byg med ./gradlew bundleRelease, og test resultatet med bundletool.

Næste emne er, hvordan signeringen, der gør denne build troværdig, faktisk fungerer.

Gratis at komme i gang

Lær Kotlin med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
36
Lektioner
152

Ofte stillede spørgsmål

Er lektionen “Forberedelse af et release-build” gratis?

Ja — alle 3 lektioner i læringssporet Android Academy, inklusive “Forberedelse af et release-build”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Android Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Forberedelse af et release-build”?

App-bundles og shrinking. Du øver dig i Android Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Android Academy?

Der kræves ingen tidligere erfaring. Android Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Forberedelse af et release-build”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Android Academy-lektion?

Ja. Alle Android Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Forberedelse af et release-build
  2. App-signering
  3. Play Console og appside
  4. Udrulninger og opdateringer
← Tilbage til Android Academy