25/04/2025
Forstå og Reducer Din Unity APK Størrelse
I den stadigt voksende verden af mobilspil er størrelsen på din applikation en kritisk faktor. En mindre APK fil betyder hurtigere downloads, mindre dataforbrug for brugerne og generelt en bedre brugeroplevelse. Især på mobile platforme, hvor lagerplads kan være begrænset, og dataabonnementer kan være dyre, er det essentielt at holde din Unity APK så kompakt som muligt. Dette gælder især, når du udgiver på platforme som Google Play, der kan have størrelsesbegrænsninger.

Mange udviklere støder på udfordringen, hvor den rapporterede "Complete build size" i Unity virker uforholdsmæssigt stor i forhold til, hvad de forventer. Dette kan skyldes en række faktorer, herunder brug af Unity-engineens kernekomponenter, uoptimerede assets, eller måder hvorpå assets håndteres under build-processen. Denne artikel vil dykke ned i de mest effektive metoder til at identificere og reducere din Unity APK's filstørrelse.
Hvor Stor Er En Unity APK Egentlig?
Det er svært at give et præcist svar på, hvor stor en typisk Unity APK er, da det afhænger enormt meget af projektets kompleksitet, anvendte assets, og Unity-versionen. Dog kan man sige, at selve Unity-motoren bidrager markant til den samlede størrelse. Rapporter indikerer, at en betydelig del af APK'en – ofte op mod halvdelen – kan være optaget af motoren selv. For eksempel kan Unitys kern biblioteker ('lib' mappen) og de administrerede .NET assemblies ('assets\bin\Data\Managed') tilsammen let udgøre over 15-20 MB, selv før dine egne assets tilføjes. Dette betyder, at selv et meget simpelt spil kan ende med en APK på omkring 20-30 MB.
Det er vigtigt at forstå, at faktorer som Addressables, Streaming Assets, eller filer der kopieres direkte ind i buildet, bidrager til den samlede størrelse, men måske ikke altid vises tydeligt i den normale opdeling af "User Assets". Disse metoder kan være nyttige til dynamisk indlæsning af indhold, men de skal håndteres med omhu for at undgå unødig bloat.
Identificering af Størrelsesbidragydere
Før du kan reducere størrelsen, skal du vide, hvad der fylder mest. Unity tilbyder en indbygget funktion til dette:
- Editor Log: Lige efter et build, kan du finde detaljeret information i Editor Loggen. Gå til Window > General > Console og klik på dropdown-menuen i øverste højre hjørne for at vælge Open Editor Log. Her finder du en oversigt over assets, sorteret efter størrelse. Typisk vil teksturer, lydfiler og animationer være de største syndere, mens scripts, levels og shaders fylder mindst.
Filhoveder (File headers) nævnt i loggen er ikke assets i sig selv, men snarere ekstra data til at gemme referencer og indstillinger for dine assets. De udgør normalt en lille del, men kan blive signifikante, hvis du har mange store assets i Resources mappen.
Vigtigt at overveje:
- Unity omkoder importerede assets til interne formater. Valget af kildeformat (f.eks. PSD vs. PNG for teksturer) har minimal indflydelse på den endelige APK-størrelse, da alt flades ud og komprimeres under import. Vælg det format, der er mest praktisk under udviklingen.
- Unity fjerner automatisk de fleste ubrugte assets under build-processen. De eneste undtagelser er scripts (som sjældent er store) og assets placeret i Resources mappen. Unity kan ikke med sikkerhed vide, om assets i Resources mappen er i brug, så de inkluderes altid. Sørg derfor kun for at have nødvendige assets i denne mappe. Overvej at erstatte dem med AssetBundles for dynamisk indlæsning.
Strategier til Reduktion af APK Størrelse
1. Optimer Dine Teksturer
Teksturer er ofte den største bidragyder til en APK's størrelse. Her er, hvad du kan gøre:
- Brug Komprimerede Teksturformater: Udnyt platformspecifikke teksturkomprimeringsformater (f.eks. ASTC, ETC2 for Android). Dette kan reducere filstørrelsen markant uden synligt tab af kvalitet.
- Juster Max Size: Hvis komprimering ikke er nok, kan du reducere den fysiske størrelse (i pixels) af dine teksturer. I Unitys Inspector kan du under teksturens indstillinger justere "Max Size". Dette påvirker kun opløsningen i spillet, ikke selve tekstur-assetet. Zoom ind på et objekt i Scene-view for at se effekten af ændringen og find det rette kompromis mellem kvalitet og størrelse.
- Farvedybde: For teksturer, der ikke kræver transparens, kan du overveje at reducere farvedybden.
Bemærk: Unity komprimerer som standard alle teksturer ved import. Indstillingen "Compress Assets on Import" i Unity Preferences påvirker kun import-hastigheden, ikke den endelige komprimering i buildet.

2. Komprimer Meshes og Animationer
Ligesom teksturer kan meshes og animationsklip også optage meget plads:
- Mesh Kompression: Vælg et mesh i Project-vinduet, og i Inspector kan du indstille "Mesh Compression" til Low, Medium eller High. Dette bruger kvantisering, hvilket reducerer filstørrelsen, men kan introducere små unøjagtigheder. Eksperimenter for at finde det acceptable niveau.
- Animation Keyframe Reduktion: Reduktion af animationskeyframes er en effektiv metode til at mindske filstørrelsen og hukommelsesforbruget under kørsel. Sørg for, at dette er aktiveret, hvor det er relevant.
Husk: Mesh kompression reducerer kun datafilstørrelsen, ikke hukommelsesforbruget ved kørsel. Animation keyframe reduktion gør begge dele.
3. Optimer Lydfiler
Lyd kan også være en betydelig pladsforbruger:
- Konverter til Ogg Vorbis: For lydfiler, især musik, kan konvertering til Ogg Vorbis-formatet med en lav bitrate (f.eks. 32 kbps) og en lavere samplingsfrekvens (f.eks. 16 KHz) reducere størrelsen drastisk.
- Komprimering: Brug komprimeringsindstillingerne for Audio Importer i Unity, og vælg passende komprimeringsmetoder for din platform.
4. Reducer .NET Biblioteksstørrelse
Unity tilbyder forskellige .NET API-kompatibilitetsniveauer:
- .NET Standard 2.0: Ved at vælge .NET Standard 2.0 i stedet for .NET 4.x begrænser du brugen af API'er til et mindre subset, hvilket kan bidrage til en mindre samlet filstørrelse. Gå til Build Settings > Player Settings > Other Settings og vælg det relevante "API Compatibility Level".
5. Brug IL2CPP og Stripping
Unitys IL2CPP (Intermediate Language To C++) scripting backend kan ofte resultere i mindre og hurtigere builds, især på mobile platforme.
- Aktivér IL2CPP: I Build Settings > Player Settings under "Other Settings", vælg "IL2CPP" som "Scripting Backend".
- Stripping Level: Kombineret med IL2CPP kan "Managed Stripping Level" (også under "Other Settings") hjælpe med at fjerne ubrugt kode fra .NET bibliotekerne. Indstil den til "High" for maksimal reduktion, men test grundigt, da det kan påvirke funktionaliteten, hvis der fjernes kode, der bruges indirekte.
6. Overvej App Bundles
For Android er App Bundles den anbefalede metode til distribution. I stedet for en enkelt stor APK, uploades et App Bundle til Google Play, som derefter genererer og leverer optimerede APK'er til specifikke enheder baseret på arkitektur, sprog og skærmdensitet. Dette reducerer downloadstørrelsen for den enkelte bruger betydeligt.
7. Opdel APK efter Arkitektur
Selvom App Bundles er fremtiden, kan det stadig være relevant at overveje at opdele APK'er baseret på arkitektur, især hvis du ikke bruger App Bundles.
- Split APK by Architecture: Hvis du har aktiveret IL2CPP, kan du i Build Settings > Player Settings under "Other Settings" aktivere "Split APK by Architecture". Dette vil generere separate APK'er for forskellige CPU-arkitekturer (f.eks. ARMv7 og ARM64), hvilket reducerer størrelsen på hver enkelt APK, selvom den samlede størrelse for alle arkitekturer kan være den samme.
8. Fjern Ubrugte Assets og Scener
Selvom Unity fjerner ubrugte assets, kan der opstå situationer, hvor ting bliver inkluderet utilsigtet.

- Gennemgå Build Settings: Dobbelttjek, at der ikke er scener inkluderet i Build Settings, som ikke bruges i spillet.
- Undersøg Resources Mappen: Som nævnt tidligere, er Resources mappen en fælde. Gennemgå indholdet nøje og flyt assets ud, hvis muligt, eller erstat dem med AssetBundles.
- Tjek for Ubrugte Assets: Brug værktøjer som "Scene View Optimization" eller tredjeparts assets til at identificere og fjerne ubrugte meshes, teksturer, materialer osv. fra dine scener.
Sammenligning af Metoder til Størrelsesreduktion
| Metode | Effekt på APK Størrelse | Overvejelser |
|---|---|---|
| Teksturkomprimering | Høj | Potentielt tab af visuel kvalitet ved aggressive indstillinger. |
| Mesh Kompression | Medium | Kan introducere små unøjagtigheder i geometri. |
| Lydkomprimering (.ogg) | Høj | Kan påvirke lydkvaliteten ved meget lave bitrates. |
| .NET Standard 2.0 | Lav til Medium | Begrænser adgangen til visse .NET API'er. |
| IL2CPP + Stripping | Medium | Kræver grundig testning for at undgå fejl. Kan forbedre ydeevnen. |
| App Bundles | Høj (for brugeren) | Google Play håndterer optimeringen. Kræver upload af bundle, ikke APK. |
| Fjernelse af Ubrugte Assets | Variabel | Essentielt for at undgå unødvendig bloat. |
Ofte Stillede Spørgsmål
Q: Hvorfor er min Unity APK så stor, selvom jeg ikke har mange assets?
A: En stor del af størrelsen skyldes selve Unity-motoren og dens kernekomponenter. Derudover kan ubrugte funktioner, der er inkluderet i buildet, eller ineffektiv asset-håndtering bidrage betydeligt.
Q: Kan jeg fjerne dele af Unity-motoren, som jeg ikke bruger?
A: Direkte fjernelse af motorkomponenter er ikke muligt for den gennemsnitlige bruger. Du kan dog vælge et mindre API-kompatibilitetsniveau (.NET Standard 2.0) og deaktivere unødvendige arkitekturer (f.eks. x86, hvis du kun målretter ARM) under build-indstillingerne. Brug af IL2CPP med høj stripping kan også fjerne ubrugt kode.
Q: Hvornår skal jeg bruge Streaming Assets versus Addressables?
A: Streaming Assets bruges til filer, der skal kopieres direkte ind i buildet som råfiler. Addressables tilbyder et mere fleksibelt system til at administrere assets, der kan indlæses dynamisk og potentielt downloades efter installationen, hvilket kan være en stor fordel for at reducere den initiale downloadstørrelse.
Q: Hvordan kan jeg tjekke, hvilke filer der præcist fylder i min APK?
A: Du kan pakke din APK ud (f.eks. med 7-Zip) og manuelt undersøge filstørrelserne for de forskellige mapper og filer for at identificere de største bidragydere.
Ved at anvende disse strategier og løbende overvåge din APK's størrelse, kan du sikre en bedre brugeroplevelse og øge din apps tilgængelighed på tværs af enheder.
Hvis du vil læse andre artikler, der ligner Optimer din Unity APK: Reducer filstørrelsen, kan du besøge kategorien Mobil.
