Android Gradle Plugin 3.4.0 (אפריל 2019)

כדי להשתמש בגרסה הזו של הפלאגין ל-Android, נדרשים:

גרסת מינימום גרסת ברירת מחדל הערות
Gradle 5.1.1 5.1.1 מידע נוסף זמין במאמר עדכון Gradle. כשמשתמשים ב-Gradle מגרסה 5.0 ואילך, גודל ערימת הזיכרון של Gradle ל-daemon יורד מ-1GB ל-512MB. התוצאה עלולה להיות רגרסיה של ביצועי ה-build. כדי לשנות את הגדרת ברירת המחדל הזו, מציינים את גודל האשפה של הדימון של Gradle בקובץ gradle.properties של הפרויקט.
SDK Build Tools 28.0.3 28.0.3 מתקינים או מגדירים את SDK Build Tools.

3.4.3 (יולי 2020)

העדכון המשני הזה תומך בתאימות להגדרות ברירת מחדל חדשות ולתכונות חדשות של חשיפה של חבילות ב-Android 11.

פרטים נוספים זמינים בנתוני הגרסה 4.0.1.

3.4.2 (יולי 2019)

העדכון המשני הזה תומך ב-Android Studio 3.4.2 וכולל תיקוני באגים ושיפורי ביצועים שונים. כדי לראות רשימה של תיקוני באגים בולטים, אפשר לקרוא את הפוסט הרלוונטי ב בלוג של עדכוני הגרסאות.

3.4.1 (מאי 2019)

העדכון המשני הזה תומך ב-Android Studio 3.4.1 וכולל תיקוני באגים ושיפורי ביצועים שונים. כדי לראות רשימה של תיקוני באגים בולטים, אפשר לקרוא את הפוסט הרלוונטי ב בלוג של עדכוני הגרסאות.

תכונות חדשות

  • הגדרות אישיות חדשות של יחסי תלות לבדיקות איתור שגיאות בקוד: ההתנהגות של lintChecks השתנתה והוספה הגדרת תלות חדשה, lintPublish, כדי לתת לכם יותר שליטה על בדיקות איתור השגיאות בקוד שיארזו בספריות של Android.

    • lintChecks: זוהי הגדרה קיימת שצריך להשתמש בה לבדיקות איתור שגיאות בקוד (lint) שרוצים להריץ רק כשמפתחים את הפרויקט באופן מקומי. אם השתמשתם בעבר בהגדרת התלות lintChecks כדי לכלול בדיקות איתור שגיאות בקוד ב-AAR שפורסם, תצטרכו להעביר את יחסי התלות האלה ולהשתמש במקום זאת בהגדרה החדשה של lintPublish שמתוארת בהמשך.
    • lintPublish: משתמשים בהגדרה החדשה הזו בפרויקטים של ספריות לבדיקות איתור שגיאות בקוד שרוצים לכלול ב-AAR שפורסם, כפי שמתואר בהמשך. פירוש הדבר הוא שגם בפרויקטים שמשתמשים בספרייה שלכם יתבצעו בדיקות ה-lint האלה.

    דוגמת הקוד הבאה משתמשת בשתי הגדרות התלות בפרויקט של ספריית Android מקומית.

    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks project(':lint')
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish project(':lintpublish')
    }
            
    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks(project(":lint"))
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish(project(":lintpublish"))
        }
            
    • באופן כללי, משימות האריזה והחתימה אמורות להניב שיפור כללי במהירות ה-build. אם שמתם לב לירידה בביצועים שקשורה למשימות האלה, דווחו על באג.

שינויים בהתנהגות

  • אזהרה על הוצאה משימוש של הפלאגין של תכונות של אפליקציות אינסטנט ל-Android: אם אתם עדיין משתמשים בפלאגין com.android.feature כדי ליצור את האפליקציה ללא התקנה, תופיע אזהרה על הוצאה משימוש בפלאגין Android Gradle 3.4.0. כדי לוודא שעדיין תוכלו ליצור אפליקציה ללא התקנה בגרסאות עתידיות של הפלאגין, עליכם להעביר את האפליקציה ללא התקנה לשימוש בפלאגין של התכונות הדינמיות. הפלאגין הזה מאפשר גם לפרסם את חוויית השימוש באפליקציה המותקנת ואת חוויית השימוש באפליקציה ללא התקנה מקובץ Android App Bundle אחד.

  • R8 מופעל כברירת מחדל: R8 משלב הסרה של סוכר, דחיסה, ערפול, אופטימיזציה והסרה של קוד מיותר (dexing) בשלב אחד, וכתוצאה מכך יש שיפורים משמעותיים בביצועי ה-build. R8 הושק בפלאגין Android Gradle גרסה 3.3.0, ועכשיו הוא מופעל כברירת מחדל בפרויקטים של אפליקציות וספריות Android שמשתמשים בפלאגין 3.4.0 ואילך.

בתמונה הבאה מוצגת סקירה כללית ברמה גבוהה של תהליך הידור לפני ההשקה של R8.

לפני R8, ב-ProGuard היה שלב הידור שונה מזה של הסרת סמים
 והסרת סוכרים.

עכשיו, ב-R8, תהליכי הסרת הסוכר, הצמצום, הטשטוש, האופטימיזציה וההמרה ל-dex (D8) מתבצעים בשלב אחד, כפי שמתואר בהמשך.

עם R8 אפשר לבצע הסרת סוכרים, כיווץ, ערפול קוד (obfuscation), אופטימיזציה
 והסרת שיער בשלב הידור אחד בלבד.

חשוב לזכור ש-R8 תוכנן לפעול עם כללי ProGuard הקיימים שלכם, ולכן סביר להניח שלא תצטרכו לבצע פעולות כלשהן כדי ליהנות מ-R8. עם זאת, זו טכנולוגיה שונה מ-ProGuard ומיועדת במיוחד לפרויקטים של Android, ולכן יכול להיות שהצמצום והאופטימיזציה יגרמו להסרת קוד ש-ProGuard לא הסיר. לכן, במצב הלא סביר הזה, יכול להיות שתצטרכו להוסיף כללים נוספים כדי שהקוד הזה יישאר בפלט ה-build.

אם נתקלת בבעיות ב-R8, מומלץ לקרוא את השאלות הנפוצות בנושא תאימות ל-R8 כדי לבדוק אם יש פתרון לבעיה שלך. אם הפתרון לא מתועד, אפשר לדווח על באג. כדי להשבית את R8, מוסיפים את אחת מהשורות הבאות לקובץ gradle.properties של הפרויקט:

      # Disables R8 for Android Library modules only.
      android.enableR8.libraries = false
      # Disables R8 for all modules.
      android.enableR8 = false
      
    

הערה: לסוג build נתון, אם מגדירים את הערך של useProguard ל-false בקובץ build.gradle של מודול האפליקציה, הפלאגין של Android Gradle משתמש ב-R8 כדי לצמצם את הקוד של האפליקציה לסוג ה-build הזה, גם אם משביתים את R8 בקובץ gradle.properties של הפרויקט.

  • ndkCompile הוצא משימוש: עכשיו תקבלו שגיאת build אם תנסו להשתמש ב-ndkBuild כדי להדר את ספריות ה-Native. במקום זאת, צריך להשתמש ב-CMake או ב-ndk-build כדי להוסיף קוד C ו-C++ לפרויקט.

בעיות מוכרות

  • בשלב זה אנחנו לא אוכפים את השימוש הנכון בשמות חבילות ייחודיים, אבל נהיה מחמירים יותר בגרסאות מאוחרות יותר של הפלאגין. ב-Android Plugin Gradle בגרסה 3.4.0, אפשר להוסיף את השורה הבאה לקובץ gradle.properties כדי לבדוק אם הפרויקט מצהיר על שמות חבילות קבילים.

              android.uniquePackageNames = true
              
            

    למידע נוסף על הגדרת שם חבילה באמצעות הפלאגין של Android Gradle, ראו הגדרת מזהה האפליקציה.