En af mine foretrukne nylige tilføjelser til Android Studio er APK Analyzer, som du kan finde i topmenuen under Build → Analyze APK.
APK Analyzer lader dig åbne og inspicere indholdet af enhver APK-fil, du har på din computer, enten bygget fra dit lokale Android Studio-projekt eller erhvervet fra din buildserver eller et andet artefaktopbevaringssted. Den behøver ikke at være bygget fra et projekt, du har åbnet i Android Studio, og du har ikke brug for kildekoden til den pågældende APK.
Bemærk: APK Analyzer fungerer bedst med udgivelsesbygninger. Hvis du har brug for at analysere et debug-build af din app, skal du sikre dig, at du bruger en APK, der ikke er instrumenteret til Instant Run. For at få den kan du bruge kommandoen Build → Build APKcommand. Du kan se, om du har åbnet en APK, der er instrumenteret til Instant Run, ved at kontrollere tilstedeværelsen af en instant-run.zip-fil i arkivet.
Anvendelse af APK-analysatoren er en god måde at rode rundt i APK-filer og lære om deres struktur, verificere filindholdet før frigivelse eller fejlfinde nogle almindelige problemer, herunder APK-størrelse og DEX-problemer.
Apk-analysatoren kan give dig en masse nyttig og brugbar information om app-størrelsen. Øverst på skærmen kan du se den rå filstørrelse, som blot er APK-størrelsen på disken. Downloadstørrelsen viser et skøn over, hvor mange data der bruges til at downloade din app ved at tage højde for den komprimering, der anvendes af Play Store.
Listen over filer og mapper er sorteret efter samlet størrelse i faldende rækkefølge. Dette gør den god til at identificere de lavt hængende frugter for optimering af APK-størrelsen. Hver gang du borer ned i en mappe, kan du se de ressourcer og andre enheder, der optager mest plads i din APK.
Vi gjorde store fremskridt med ressourcerne og de native biblioteker og sparede i alt 17 MB med meget få ændringer i appen. Jeg kan dog se, at vores DEX-størrelse gik tilbage, idet classes2.dex voksede med 400 KB.
Debugging DEX-problemer
I dette tilfælde kom forskellen fra opgradering af vores afhængigheder til nyere versioner og tilføjelse af nye biblioteker. Proguard og Multidex var allerede aktiveret for vores builds, så der er ikke meget, der kan gøres ved vores DEX-størrelse. Alligevel er APK analyzer et godt værktøj til at debugge eventuelle problemer med denne opsætning, især når du aktiverer Multidex eller Proguard for dit projekt for første gang.
Når du klikker på en DEX-fil, vil du se en oversigt over, hvor mange klasser og metoder den definerer, og hvor mange referencer den i alt indeholder (det er referencer, der tæller med i forhold til 64K-grænsen i en enkelt DEX-fil). I dette eksempelskærmbillede er appen lige ved at nå grænsen, hvilket betyder, at den vil få brug for MultiDex til at opdele klasserne i separate filer i den nærmeste fremtid.
Du kan bore ned i pakkerne for at se, hvilke pakker der bruger alle referencerne. I dette tilfælde kan vi se, at Support-biblioteket og Google Play Services er hovedårsagerne til denne situation:
Når du har aktiveret MultiDex og kompileret din app, vil du bemærke en anden klasser2.dex-fil (og muligvis classes3.dex og så videre). MultiDex-løsningen i Android gradle-plugin’et finder ud af, hvilke klasser der er nødvendige for at starte din app, og lægger dem i den primære classes.dex-fil, men i det sjældne tilfælde, hvor det ikke virker, og du får en ClassNotFoundException, kan du bruge APK Analyzer til at inspicere DEX-filerne og derefter tvinge de manglende klasser til at blive lagt i den primære DEX-fil.
Du vil støde på lignende problemer, når du aktiverer Proguard og bruger klasser eller metoder ved refleksion eller fra XML-layouts. APK Analyzer kan hjælpe dig med at verificere, at din Proguard-konfiguration er korrekt, ved at du nemt kan kontrollere, om de metoder og klasser, du har brug for, er til stede i APK’en, og om de bliver omdøbt (obfuscated). Du kan også sikre dig, at de klasser, du ønsker fjernet, rent faktisk er fjernet og ikke optager dit dyrebare antal referencemetoder.
Vi er nysgerrige efter at høre, hvilke andre anvendelsesmuligheder du finder for APK Analyzer, og hvilke andre funktioner du gerne vil se integreret i værktøjet!