פלאגין Android Gradle 3.0.0 (אוקטובר 2017)
הפלאגין Android Gradle גרסה 3.0.0 כולל מגוון שינויים שמטרתם לטפל בבעיות ביצועים של פרויקטים גדולים.
לדוגמה, שלד לדוגמה פרויקט עם כ-130 מודולים ומספר גדול של יחסי תלות חיצוניים (אבל בלי קוד או משאבים), אפשר לשפר את הביצועים דומה לנוסחה:
גרסת הפלאגין של Android + גרסת Gradle | פלאגין ל-Android 2.2.0 + Gradle 2.14.1 | פלאגין ל-Android 2.3.0 + Gradle 3.3 | פלאגין ל-Android 3.0.0 + Gradle 4.1 |
---|---|---|---|
הגדרה (למשל, הפעלה של ./gradlew --help ) |
בערך 2 דקות | ~9 s | כ-2.5 שניות |
שינוי ב-Java בשורה אחת (שינוי בהטמעה) | כ-2 דקות ו-15 שניות | כ-29 שניות | כ-6.4 שניות |
חלק מהשינויים האלה השפיעו על גרסאות ה-build הקיימות. לכן, כדאי לשקול את
בהעברת הפרויקט לפני השימוש בפלאגין החדש.
אם אתם לא רואים את השיפור בביצועים שתוארו למעלה, נא לדווח על באג וכוללים מעקב של ה-build באמצעות Gradle Profiler.
לגרסה הזו של הפלאגין ל-Android נדרשות התכונות הבאות:
- Gradle 4.1 ומעלה. למידע נוסף, אפשר לקרוא את הקטע על עדכון של Gradle.
-
כלים ל-Build 26.0.2
ומעלה. לאחר העדכון הזה, כבר לא צריך לציין גרסה עבור
כלי ה-build — הפלאגין משתמש בגרסה המינימלית הנדרשת כברירת מחדל.
לכן אפשר להסיר את הנכס
android.buildToolsVersion
.
3.0.1 (נובמבר 2017)
זהו עדכון קטן לתמיכה ב-Android Studio 3.0.1, והוא כולל עדכונים כלליים תיקוני באגים ושיפורי ביצועים.
אופטימיזציות
- מקבילה טובה יותר לפרויקטים עם מודולים מרובים באמצעות מודל פרטני בתרשים המשימות.
- כשעורכים שינויים בתלות, Gradle מבצעת פיתוח מהיר יותר
הידור מחדש של מודולים שאין להם גישה ל-API של התלות הזאת.
צריך להגביל את יחסי התלות שידרשו את ממשקי ה-API שלהם למודולים אחרים על ידי
באמצעות
הגדרות התלות החדשות של Gradle:
implementation
,api
,compileOnly
, ו-runtimeOnly
. - מהירות build מצטברת מהירה יותר בגלל ניפוי באגים לכל כיתה. כל כיתה
מעובדים עכשיו לקובצי DEX נפרדים, ורק המחלקות
אחרי השינוי יודפסו מחדש. כמו כן, צפויות מהירויות build משופרות
באפליקציות שבהן הערך של
minSdkVersion
הוא 20 ומטה, multi-dex מדור קודם. - שפרו את מהירויות ה-build על ידי אופטימיזציה של משימות מסוימות לשימוש בפלט שהוחזר. כדי ליהנות מהאופטימיזציה הזו, קודם מפעילים את המטמון של גרסת ה-build של Gradle.
- עיבוד משאבים מצטבר משופר באמצעות AAPT2,
מופעלת כברירת מחדל. אם נתקלתם בבעיות בשימוש ב-AAPT2,
אפשר לדווח על באג. אפשר גם
להשבית את AAPT2 על ידי הגדרה של
android.enableAapt2=false
gradle.properties
של הקובץ והפעלה מחדש של דימון (daemon) של Gradle על ידי הרצת הפקודה./gradlew --stop
משורת הפקודה.
תכונות חדשות
- תלות מבוססת-וריאנטים ניהול. כשיוצרים וריאציה מסוימת של מודול, הפלאגין עכשיו מתאימה אוטומטית וריאציות של יחסי תלות של מודול ספריות מקומיות של המודול שאתם בונים.
- כולל פלאגין חדש של מודול Feature לתמיכה אפליקציות ללא התקנה ל-Android SDK של אפליקציות ללא התקנה ל-Android (שניתן להוריד). באמצעות מנהל ה-SDK). למידע נוסף על יצירת מודולים של תכונות באמצעות הפלאגין החדש, אפשר לקרוא את המאמר המבנה של אפליקציה ללא התקנה עם מספר תכונות.
- תמיכה מובנית לשימוש בתכונות שפה מסוימות של Java 8 ו-Java 8 של הספריות. ג'ק הוצא משימוש ולא נדרש יותר, קודם צריך להשבית את Jack כדי להשתמש בתמיכה המשופרת של Java 8 המובנית ברירת המחדל של הכלי. מידע נוסף זמין במאמר הבא: שימוש בתכונות השפה של Java 8.
-
נוספה תמיכה בהרצת בדיקות עם ב-Android תזמור בדיקות, שמאפשר להריץ כל אחת מהבדיקות של האפליקציה הפעלה של אינסטרומנטציה משלו. מאחר שכל בדיקה פועלת מופע אינסטרומנטציה, כל מצב משותף בין בדיקות לא מצטבר במעבד (CPU) או בזיכרון של המכשיר. וגם אם בדיקה אחת קורסת, היא קורסת רק מופע נפרד של אינסטרומנטציה, כך שהבדיקות האחרות עדיין ירוצו.
- המערכת הוסיפה את
testOptions.execution
כדי להחליט אם להשתמש תזמור בדיקות במכשיר. אם רוצים להשתמש תזמור בדיקות של Android, צריך לצייןANDROID_TEST_ORCHESTRATOR
, כמו שמוצג בהמשך. כברירת מחדל, המאפיין מוגדר ל-HOST
, כך שהוא מושבת במכשיר תזמור היא השיטה הסטנדרטית להפעלת בדיקות.
מגניב
android { testOptions { execution 'ANDROID_TEST_ORCHESTRATOR' } }
Kotlin
android { testOptions { execution = "ANDROID_TEST_ORCHESTRATOR" } }
- המערכת הוסיפה את
-
הגדרת יחסי התלות החדשה של
androidTestUtil
מאפשרת לך להתקין APK נוסף של כלי עזר לבדיקה לפני הרצת בדיקות האינסטרומנטציה, כמו תזמור בדיקות של Android:מגניב
dependencies { androidTestUtil 'com.android.support.test:orchestrator:1.0.0' ... }
Kotlin
dependencies { androidTestUtil("com.android.support.test:orchestrator:1.0.0") ... }
-
הוספת את
testOptions.unitTests.includeAndroidResources
אל לתמוך בבדיקות יחידות (unit testing) שמחייבות משאבי Android, כמו רובואלקטרי. כשתגדירו את זה למאפייןtrue
, הפלאגין מבצע משאב, נכס למיזוג מניפסטים לפני הרצת בדיקות היחידה. לאחר מכן הבדיקות יש לבדוק אתcom/android/tools/test_config.properties
ב classpath למפתחות הבאים:-
android_merged_assets
: הנתיב המוחלט אל את ספריית הנכסים הממוזגים.הערה: במודולים של ספריות, הנכסים שמוזגו יהיו זהים לא מכילות את הנכסים של יחסי התלות ( בעיה #65550419).
-
android_merged_manifest
: הנתיב המוחלט אל קובץ מניפסט שמוזג. -
android_merged_resources
: הנתיב המוחלט אל ספריית המשאבים הממוזגת, שמכילה את כל המשאבים על המודול ועל כל יחסי התלות שלו. -
android_custom_package
: שם החבילה של שיעור ר' האחרון. אם תשנה את מזהה האפליקציה באופן דינמי, האפשרות הזו שם החבילה לא יכול להיות תואם למאפייןpackage
למניפסט של האפליקציה.
-
- תמיכה בגופנים משאבים (תכונה חדשה שהושקה ב- Android 8.0 (רמת API 26)).
- תמיכה בחבילות APK ספציפיות לשפה באמצעות ב-Android SDK של אפליקציות ללא התקנה מגרסה 1.1 ואילך.
-
עכשיו אפשר לשנות את ספריית הפלט של ה-build המקורי החיצוני של הפרויקט, כפי שמוצג בהמשך:
מגניב
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 שמגדיר כללים מותאמים אישית לאיתור שגיאות בקוד, ואריזת אותו ב-AAR ופרויקטים של APK.הכללים בהתאמה אישית לאיתור שגיאות בקוד חייבים להשתייך לפרויקט נפרד שמפיק פלט JAR יחיד, וכולל רק
compileOnly
של יחסי התלות. לאחר מכן, מודולים אחרים של אפליקציות וספריות יכולים להסתמך על איתור השגיאות בקוד שלך פרויקט באמצעות התצורהlintChecks
:מגניב
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 מסוימים, וה-build שלך לא פועל.
אם משתמשים בהם. לדוגמה, כבר לא תוכלו להשתמש ב-וריאנטs API כדי
גישה ל-
outputFile()
אובייקטים או שימוש ב-processManifest.manifestOutputFile()
לקבלת קובץ המניפסט לכל וריאנט. מידע נוסף זמין במאמר הבא: שינויים ב-API. - כבר לא צריך לציין גרסה לכלי ה-build (לכן
עכשיו אפשר להסיר את הנכס
android.buildToolsVersion
). על ידי כברירת מחדל, הפלאגין משתמש באופן אוטומטי בכלי ה-build המינימליים הנדרשים בגרסת הפלאגין של Android שבה משתמשים. - הפעלת/השבתה של דחיסת קובצי PNG ב-
buildTypes
כמו שמתואר בהמשך. דחיסת קובצי PNG מופעלת כברירת מחדל בכל גרסאות ה-build חוץ מגרסאות build של ניפוי באגים, כי הן מאריכות את זמני הבנייה של פרויקטים כוללים קובצי PNG רבים. אז כדי לקצר את זמני ה-build של סוגי build אחרים, יש להשבית דחיסת PNG או המרה את התמונות ל-WebP.מגניב
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.