אופטימיזציה של Android App Bundle (AAB) לגודל APK קטן יותר
מאז ש-Google Play הפכה את AAB לפורמט החובה עבור אפליקציות חדשות, פשוט המרת APK ל-AAB לא מקטינה אוטומטית את הגודל — אנו רואים זאת כמעט בכל פרויקט שני. ללא הגדרה נכונה של splits, דחיסת טקסטורות ו-R8, תקבלו רק חיסכון שולי. הצוות שלנו, עם ניסיון של 5+ שנים בפיתוח אנדרואיד ו-20+ פרויקטי שחרור, מסייע בהגדרת AAB כך שגודל ה-APK הניתן להורדה קטן ב-15–35%. להלן הצעדים הקונקרטיים שמניבים תוצאות מדידות.
כיצד Android App Bundle מקטין את גודל ה-APK?
APK הוא ארכיון מונוליטי עבור כל המכשירים. AAB הוא קונטיינר עם מודולים שמהם Google Play מייצרת APK מותאם אישית לכל מכשיר. לדוגמה, Samsung Galaxy S23 יקבל רק ספריות arm64-v8a ומשאבי xxhdpi, ללא גרסאות x86, armeabi-v7a או xhdpi/hdpi. התוצאה: ה-APK הניתן להורדה קטן בממוצע ב-15–35% — זהו נתון רשמי מ-Google, שאושר על אפליקציות אמיתיות. תיעוד Android Developers מאשר: "בממוצע, גודל Android App Bundles קטן בכ-15% מאשר APKs." אנו מבטיחים את אותו אפקט על הפרויקט שלכם.
מה להגדיר ב-build.gradle עבור AAB אופטימלי?
הגדרת splits היא הבסיס של AAB. הנה ההתקנה המינימלית:
android {
bundle {
language {
enableSplit = true
}
density {
enableSplit = true
}
abi {
enableSplit = true
}
texture {
enableSplit = true
defaultFormat = "ETC2"
}
}
}android { bundle { language { enableSplit = true } density { enableSplit = true } abi { enableSplit = true } texture { enableSplit = true defaultFormat = "ETC2" } } } splits הם קריטיים למשחקים ולאפליקציות עם גרפיקת תלת-ממד. בלעדיהם, כל פורמטי הטקסטורה נארזים יחד, מה שעלול להוסיף 50–100 MB. ETC2 הוא פורמט אוניברסלי (GLES 3.0+), ASTC מציע דחיסה הטובה ביותר במכשירים מודרניים (Adreno 530+, Mali-G51+). הבחירה תלויה ברמת ה-API המינימלית שלכם.
הגדרות נוספות לדחיסת טקסטורות
אם האפליקציה שלכם משתמשת ב-ASTC, הגדירו texture בבלוק הטקסטורה. עבור מכשירים ישנים שאינם תומכים ב-ASTC, Google Play תבחר אוטומטית בגרסת ETC2 — אך רק אם enableSplit מופעל. בדקו תאימות באמצעות defaultFormat = "ASTC".
APK לעומת AAB: מה יעיל יותר?
| פרמטר | APK | AAB |
|---|---|---|
| גודל הורדה | אחיד לכל המכשירים | מותאם לכל מכשיר |
| פיצול טקסטורות | לא נתמך | נתמך (ETC2, ASTC, DXT) |
| מודולים דינמיים | דורשים הגדרה נפרדת | מובנים (Play Feature Delivery) |
| ניהול גרסאות | פשוט | דורש bundletool לניתוח |
AAB יעיל באופן חד משמעי: הוא מקטין את הגודל ב-15–35% — טוב יותר מכל מפצל APK.
טבלה: פורמטי טקסטורה עבור AAB
| פורמט | דרישות | דחיסה |
|---|---|---|
| ETC2 | OpenGL ES 3.0+ | 4:1 |
| ASTC | Adreno 530+, Mali-G51+ | 10:1 |
| DXT | Nvidia Tegra, GPUs ישנים | 6:1 |
כיצד לאמת את גודל ה-AAB לפני ההעלאה?
השתמשו ב-bundletool. בנו את ערכת ה-APK עם:
bundletool build-apks --bundle=app.aab --output=app.apks \
--ks=keystore.jks --ks-pass=pass:password \
--ks-key-alias=key --key-pass=pass:password
bundletool get-size total --apks=app.apks --device-spec=pixel7_spec.jsonbaseConfig.fgl מתקבל באמצעות bundletool build-apks --bundle=app.aab --output=app.apks \ --ks=keystore.jks --ks-pass=pass:password \ --ks-key-alias=key --key-pass=pass:password bundletool get-size total --apks=app.apks --device-spec=pixel7_spec.json . זה נותן את גודל ההורדה המדויק עבור מכשיר יעד לפני ההעלאה ל-Play Store.
מדוע R8 ו-ProGuard הם חובה עבור AAB?
buildTypes {
release {
minifyEnabled = true
shrinkResources = true
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}device-spec.json פועל רק כאשר bundletool get-device-spec --adb=<path>. הוא מסיר משאבים שאינם בשימוש — מחרוזות, תמונות, פריסות — בהתבסס על ניתוח קוד סטטי. בפרויקטים אמיתיים אנו רואים הפחתה נוספת של 5–20 MB. R8 במצב מלא מסיר קוד בצורה אגרסיבית יותר ומבצע inlining למתודות, ומקטין את הגודל בעוד 5–15% בהשוואה ל-ProGuard הישן.
ניתוח גודל באמצעות Android Studio
עברו אל buildTypes { release { minifyEnabled = true shrinkResources = true proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } } (עובד עם AAB לאחר חילוץ). הוא מציג תרשים עוגה: shrinkResources = true, minifyEnabled = true, Build → Analyze APK, classes.dex. אתם מיד רואים מה תופס הכי הרבה מקום. ממצאים אופייניים:
-
res/עם קבצי JSON לא דחוסים — דחסו או עברו לפורמט בינארי (Protobuf / FlatBuffers) -
lib/עם ספריות native עבור כל ה-ABIs כוללassets/ו-assets/— השאירו רקlib/ו-x86עבור builds ייצור -
x86_64עם PNG במקום שבו VectorDrawable יספיק
מה כוללת העבודה שלנו
הגדרת AAB אינה דגל בודד; זהו סט של פעולות. הנה הצעדים שאנו מבצעים:
- ביקורת על התצורה הנוכחית: בדיקת splits, דחיסת טקסטורות, R8/ProGuard, bundletool.
- הגדרת build.gradle: slots ופורמטי טקסטורה נכונים.
- אופטימיזציה של משאבים: דחיסת נכסים, הסרת משאבים שאינם בשימוש, המרת PNG ל-VectorDrawable.
- אימות גודל: חישוב באמצעות bundletool עבור 3–5 מכשירי יעד.
- תיעוד: דוח על השינויים והמלצות לשחרורים עתידיים.
- הדרכת צוות: כיצד לשמר אופטימיזציית AAB בשחרורים הבאים.
הקטנת גודל האפליקציה ב-15–35% מורידה ישירות את עלויות התעבורה למשתמשים ומגבירה את שיעורי ההמרה להתקנה. אנו מבטיחים הפחתה בגודל ה-APK הניתן להורדה של 15–35%. קבלו ייעוץ על הגדרת AAB לפרויקט שלכם — נבדוק את ה-build הנוכחי שלכם ונצביע בדיוק כמה תוכלו לחסוך.
לוח זמנים
הגדרת AAB עם אימות bundletool אורכת 1–2 ימים. אם נדרשת אופטימיזציית גודל מלאה, כולל כוונון R8 ופיצול טקסטורות, זה 3–5 ימים. צרו קשר כדי לדון במקרה הספציפי שלכם.







