פלאגין 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.