פלאגין Android Gradle‏ 3.4.0 (אפריל 2019)

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

גרסת המינימום גרסת ברירת המחדל הערות
Gradle 5.1.1 5.1.1 מידע נוסף זמין במאמר בנושא עדכון Gradle. כשמשתמשים ב-Gradle 5.0 ומעלה, גודל ה-heap של זיכרון הדמון של Gradle יורד מ-1GB ל-512MB. התוצאה יכולה להיות רגרסיה בביצועי ה-build. כדי לשנות את הגדרת ברירת המחדל הזו, צריך לציין את גודל ה-heap של Gradle daemon בקובץ 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 וכולל תיקוני באגים שונים ושיפורי ביצועים. כדי לראות רשימה של תיקוני באגים חשובים, אפשר לקרוא את הפוסט שקשור לכך ב בלוג של עדכוני גרסה.

תכונות חדשות

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

    • lintChecks: זוהי הגדרה קיימת שצריך להשתמש בה לבדיקות Lint שרוצים להריץ רק כשמבצעים build של הפרויקט באופן מקומי. אם השתמשתם בעבר בהגדרת התלות lintChecks כדי לכלול בדיקות lint ב-AAR שפורסם, אתם צריכים להעביר את התלויות האלה כדי להשתמש במקום זאת בהגדרה החדשה lintPublish שמתוארת בהמשך.
    • lintPublish: משתמשים בהגדרה החדשה הזו בפרויקטים של ספריות לבדיקות lint שרוצים לכלול ב-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"))
        }
            
    • באופן כללי, אמור להיות שיפור במהירות הבנייה של משימות האריזה והחתימה. אם אתם מבחינים בירידה בביצועים שקשורה למשימות האלה, אתם מוזמנים לדווח על באג.

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

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

  • הפעלת R8 כברירת מחדל:‏ R8 משלב את הפעולות desugaring,‏ shrinking,‏ obfuscating,‏ optimizing ו-dexing בשלב אחד – וכתוצאה מכך הביצועים של הבנייה משתפרים באופן משמעותי. הכלי R8 הוצג ב-Android Gradle plugin 3.3.0 ועכשיו הוא מופעל כברירת מחדל גם באפליקציות וגם בפרויקטים של ספריות Android באמצעות plugin 3.4.0 ואילך.

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

לפני גרסה R8, ‏ ProGuard היה שלב קומפילציה שונה מ-dexing ומ-desugaring.

עכשיו, עם R8, כל הפעולות האלה – desugaring,‏ shrinking,‏ obfuscating,‏ optimizing ו-dexing ‏ (D8) – מתבצעות בשלב אחד, כפי שמוצג בהמשך.

ב-R8, כל הפעולות של desugaring,‏ shrinking,‏ obfuscating,‏ optimizing ו-dexing מתבצעות בשלב קומפילציה אחד.

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

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

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

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

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

בעיות מוכרות

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

              android.uniquePackageNames = true
              
            

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