Android Gradle Plugin 3.0.0 (אוקטובר 2017)
Android Gradle plugin 3.0.0 כולל מגוון שינויים שמטרתם לטפל בבעיות ביצועים בפרויקטים גדולים.
לדוגמה, בפרויקט לדוגמה עם כ-130 מודולים ומספר גדול של תלות חיצונית (אבל ללא קוד או משאבים), יכול להיות שתראו שיפורים בביצועים כמו אלה:
| גרסת הפלאגין של Android + גרסת Gradle | Android plugin 2.2.0 + Gradle 2.14.1 | Android plugin 2.3.0 + Gradle 3.3 | Android plugin 3.0.0 + Gradle 4.1 |
|---|---|---|---|
הגדרה (למשל, הפעלה של ./gradlew --help) |
כ-2 דקות | ~9 שניות | ~2.5 שניות |
| שינוי של שורה אחת ב-Java (שינוי בהטמעה) | כ-2 דקות ו-15 שניות | ~29 שניות | ~6.4 שניות |
חלק מהשינויים האלה גורמים לכך שאי אפשר להשתמש בגרסאות קיימות. לכן, כדאי לשקול את
המאמץ שנדרש להעברת הפרויקט לפני שמשתמשים בתוסף החדש.
אם לא חוויתם את שיפורי הביצועים שמתוארים למעלה, אפשר לדווח על באג ולצרף את נתוני המעקב של ה-build באמצעות Gradle Profiler.
הגרסה הזו של הפלאגין ל-Android דורשת את הדברים הבאים:
| גרסת המינימום | גרסת ברירת המחדל | פתקים | |
|---|---|---|---|
| Gradle | 4.1 | 4.1 | יש מידע נוסף במאמר בנושא עדכון Gradle. |
| SDK Build Tools | 26.0.2 | 26.0.2 | התקנה או הגדרה של SDK Build Tools. בעקבות העדכון הזה, אין יותר צורך לציין גרסה לכלי הבנייה – התוסף משתמש בגרסה המינימלית הנדרשת כברירת מחדל. לכן, עכשיו אפשר להסיר את הנכס android.buildToolsVersion. |
3.0.1 (נובמבר 2017)
זהו עדכון קל לתמיכה ב-Android Studio 3.0.1, והוא כולל תיקוני באגים כלליים ושיפורי ביצועים.
אופטימיזציות
- מקביליות טובה יותר לפרויקטים מרובי מודולים באמצעות גרף משימות מפורט.
- כשמבצעים שינויים בהסתמכות, Gradle מבצעת בנייה מהירה יותר כי היא לא מבצעת קומפילציה מחדש של מודולים שאין להם גישה ל-API של ההסתמכות הזו.
כדי להגביל את התלות של מודולים אחרים בממשקי API של מודולים מסוימים, צריך להשתמש בהגדרות התלות החדשות של Gradle:
implementation, api,compileOnlyו-runtimeOnly. - מהירות בנייה מצטברת מהירה יותר בגלל dexing לכל מחלקה. כל כיתה עוברת עכשיו קומפילציה לקובצי DEX נפרדים, ורק הכיתות שעברו שינוי עוברות מחדש DEX. בנוסף, צפוי שיפור במהירויות הבנייה של אפליקציות שבהן הערך של
minSdkVersionהוא 20 או פחות, ושמשתמשות ב-legacy multi-dex. - שיפור מהירויות הבנייה על ידי אופטימיזציה של משימות מסוימות לשימוש בפלט שמור במטמון. כדי ליהנות מהאופטימיזציה הזו, צריך קודם להפעיל את מטמון ה-build של Gradle.
- שיפור העיבוד של משאבים מצטברים באמצעות AAPT2, שמופעל עכשיו כברירת מחדל. אם נתקלתם בבעיות במהלך השימוש ב-AAPT2,
אפשר לדווח על באג. אפשר גם להשבית את AAPT2 על ידי הגדרת
android.enableAapt2=falseבקובץgradle.propertiesוהפעלה מחדש של Gradle daemon על ידי הרצת./gradlew --stopמשורת הפקודה.
תכונות חדשות
- ניהול יחסי תלות עם מודעות לווריאציות. כשמפתחים וריאציה מסוימת של מודול, התוסף מתאים עכשיו באופן אוטומטי וריאציות של יחסי תלות במודול של ספרייה מקומית לווריאציה של המודול שמפתחים.
- כולל פלאגין חדש של מודול תכונות לתמיכה באפליקציות ללא התקנה ל-Android וב-Android Instant Apps SDK (שאפשר להוריד באמצעות SDK Manager). למידע נוסף על יצירת מודולים של תכונות באמצעות הפלאגין החדש, אפשר לקרוא את המאמר מבנה של אפליקציה מיידית עם כמה תכונות.
- תמיכה מובנית בשימוש בתכונות שפה מסוימות של Java 8 ובספריות Java 8. הכלי Jack יצא משימוש ואין יותר צורך בו. כדי להשתמש בתמיכה המשופרת ב-Java 8 שמוטמעת בשרשרת הכלים שמוגדרת כברירת מחדל, צריך להשבית קודם את Jack. מידע נוסף זמין במאמר בנושא שימוש בתכונות של שפת Java 8.
-
הוספנו תמיכה בהרצת בדיקות באמצעות Android Test Orchestrator, שמאפשרת להריץ כל אחת מהבדיקות של האפליקציה בתוך קריאה משלה של Instrumentation. מכיוון שכל בדיקה מופעלת במופע Instrumentation משלה, כל מצב משותף בין הבדיקות לא מצטבר במעבד או בזיכרון של המכשיר. בנוסף, גם אם בדיקה אחת קורסת, רק המופע שלה של Instrumentation מושבת, כך שהבדיקות האחרות עדיין פועלות.
- נוסף
testOptions.executionכדי לקבוע אם להשתמש בתיאום בדיקות במכשיר. אם רוצים להשתמש ב-Android Test Orchestrator, צריך לציין אתANDROID_TEST_ORCHESTRATOR, כמו שמוצג בהמשך. כברירת מחדל, המאפיין הזה מוגדר כ-HOST, מה שמשבית את התיאום במכשיר וזו השיטה הרגילה להרצת בדיקות.
Groovy
android { testOptions { execution 'ANDROID_TEST_ORCHESTRATOR' } }
Kotlin
android { testOptions { execution = "ANDROID_TEST_ORCHESTRATOR" } }
- נוסף
-
הגדרת תלות חדשה
androidTestUtilמאפשרת לכם להתקין APK של כלי עזר לבדיקה לפני שמריצים את בדיקות המכשור, כמו Android Test Orchestrator:Groovy
dependencies { androidTestUtil 'com.android.support.test:orchestrator:1.0.0' ... }
Kotlin
dependencies { androidTestUtil("com.android.support.test:orchestrator:1.0.0") ... }
-
הוספנו את
testOptions.unitTests.includeAndroidResourcesכדי לתמוך בבדיקות יחידה שדורשות משאבי Android, כמו Roboelectric. כשמגדירים את המאפיין הזה לערךtrue, הפלאגין מבצע מיזוג של משאבים, נכסים ומניפסטים לפני שהוא מריץ את בדיקות היחידה. לאחר מכן, הבדיקות יכולות לבדוק אתcom/android/tools/test_config.propertiesבנתיב המחלקה לגבי המפתחות הבאים:-
android_merged_assets: הנתיב המוחלט לספריית הנכסים הממוזגים.הערה: במודולים של ספריות, הנכסים הממוזגים לא מכילים את הנכסים של יחסי תלות (ראו בעיה מס' 65550419).
-
android_merged_manifest: הנתיב המוחלט לקובץ המניפסט הממוזג. -
android_merged_resources: הנתיב המוחלט לספריית המשאבים הממוזגים, שמכילה את כל המשאבים מהמודול וכל התלויות שלו. -
android_custom_package: שם החבילה של המחלקה הסופית R. אם אתם משנים באופן דינמי את מזהה האפליקציה, יכול להיות ששם החבילה הזה לא יהיה זהה למאפייןpackageבמניפסט של האפליקציה.
-
- תמיכה בגופנים כמשאבים (תכונה חדשה שהושקה בAndroid 8.0 (רמת API 26)).
- תמיכה בחבילות APK ספציפיות לשפה עם Android Instant Apps SDK 1.1 ומעלה.
-
עכשיו אפשר לשנות את ספריית הפלט של פרויקט חיצוני לבנייה מקומית, כמו שמוצג בהמשך:
Groovy
android { ... externalNativeBuild { // For ndk-build, instead use the ndkBuild block. cmake { ... // Specifies a relative path for outputs from external native // builds. You can specify any path that's not a subdirectory // of your project's temporary build/ directory. buildStagingDirectory "./outputs/cmake" } } }
Kotlin
android { ... externalNativeBuild { // For ndk-build, instead use the ndkBuild block. cmake { ... // Specifies a relative path for outputs from external native // builds. You can specify any path that's not a subdirectory // of your project's temporary build/ directory. buildStagingDirectory = "./outputs/cmake" } } }
- מעכשיו אפשר להשתמש ב-CMake 3.7 ואילך כשיוצרים פרויקטים מקוריים מ-Android Studio.
-
הגדרת תלות חדשה
lintChecksמאפשרת ליצור קובץ JAR שמגדיר כללי lint מותאמים אישית, ולצרף אותו לפרויקטים של AAR ו-APK.כללי ה-lint המותאמים אישית צריכים להיות חלק מפרויקט נפרד שמפיק קובץ JAR יחיד וכולל רק תלות ב-
compileOnly. מודולים אחרים של אפליקציות וספריות יכולים להסתמך על פרויקט lint באמצעות ההגדרהlintChecks:Groovy
dependencies { // This tells the Gradle plugin to build ':lint-checks' into a lint.jar file // and package it with your module. If the module is an Android library, // other projects that depend on it automatically use the lint checks. // If the module is an app, lint includes these rules when analyzing the app. lintChecks project(':lint-checks') }
Kotlin
dependencies { // This tells the Gradle plugin to build ':lint-checks' into a lint.jar file // and package it with your module. If the module is an Android library, // other projects that depend on it automatically use the lint checks. // If the module is an app, lint includes these rules when analyzing the app. lintChecks(project(":lint-checks")) }
שינויים בהתנהגות
- פלאגין Android 3.0.0 מסיר ממשקי API מסוימים, והגרסה שלכם תפסיק לפעול אם אתם משתמשים בהם. לדוגמה, אי אפשר יותר להשתמש ב-Variants API כדי לגשת לאובייקטים מסוג
outputFile()או להשתמש ב-processManifest.manifestOutputFile()כדי לקבל את קובץ המניפסט לכל וריאציה. מידע נוסף מופיע במאמר בנושא שינויים ב-API. - אין יותר צורך לציין גרסה של כלי הבנייה (לכן אפשר להסיר את המאפיין
android.buildToolsVersion). כברירת מחדל, הפלאגין משתמש אוטומטית בגרסה המינימלית הנדרשת של כלי הבנייה לגרסה של פלאגין Android שבה אתם משתמשים. - עכשיו אתם יכולים להפעיל או להשבית את דחיסת ה-PNG בחסימה של
buildTypesכמו שמוצג למטה. הדחיסה של קובצי PNG מופעלת כברירת מחדל בכל הגרסאות, חוץ מגרסאות ניפוי הבאגים, כי היא מאריכה את זמן הבנייה של פרויקטים שכוללים הרבה קובצי PNG. לכן, כדי לשפר את זמני הבנייה של סוגי בנייה אחרים, צריך להשבית את דחיסת ה-PNG או להמיר את התמונות לפורמט WebP.Groovy
android { buildTypes { release { // Disables PNG crunching for the release build type. crunchPngs false } } }
Kotlin
android { buildTypes { release { // Disables PNG crunching for the release build type. isCrunchPngs = false } } }
- התוסף ל-Android יוצר עכשיו באופן אוטומטי יעדים להרצה שמוגדרים בפרויקטים חיצוניים של CMake.
- עכשיו צריך להוסיף מעבדי הערות לנתיב המחלקות של המעבד באמצעות הגדרת התלות
annotationProcessor. - השימוש ב-
ndkCompileשהוצא משימוש מוגבל יותר עכשיו. במקום זאת, צריך לעבור לשימוש ב-CMake או ב-ndk-build כדי לקמפל קוד מקומי שרוצים לארוז ב-APK. מידע נוסף זמין במאמר העברה מ-ndkcompile.