בדף הזה מתבצע מעקב אחרי ההוצאה משימוש וההסרות של ממשקי API של Android Gradle (AGP), וגם שמסביר איך לעדכן את הקוד בהתאם.
מעקב אחרי הסרות והוצאה משימוש של ממשקי API
הטבלה הבאה מציגה סיכום של המקרים שבהם ממשקי AGP API הוצאו משימוש והוסרו, ב: בתנאי הגרסה של AGP.
API | הוצא משימוש בגרסת AGP | הוסרה מגרסת AGP |
---|---|---|
Component.setAsmFramesComputationMode |
7.2 | |
Component.transformClassesWith |
7.2 | |
RenderScript | 7.2 | |
טרנספורמציה | 7.2 | 8.0 |
AGP 8.0
בטבלה הבאה מפורטים עדכוני API חשובים ל-AGP 8.0.
Transform API הוסר
החל מ-AGP 8.0,
טרנספורמציה
ה-API הוסר. זה אומר שכל הכיתות בחבילה
com.android.build.api.transform
הוסרו.
אנחנו מסירים את Transform API כדי לשפר את ביצועי ה-build. פרויקטים להשתמש ב-Transform API לאלץ את ה-AGP להשתמש בתהליך פחות אופטימלי בשביל ה-build יכולות לגרום לרגרסיות גדולות בזמני ה-build. קשה גם להשתמש לבצע טרנספורמציה של ה-API ולשלב אותו עם תכונות אחרות של Gradle; ממשקי ה-API החלופיים המטרה היא להקל על הרחבת AGP בלי לשפר את הביצועים או את גרסת ה-build כמה בעיות נכונות.
ממשקי API חלופיים
אין תחליף אחד ל-Transform API – יש תחליף חדש וממוקד
ממשקי API לכל תרחיש לדוגמה. כל ממשקי ה-API החלופיים נמצאים בבלוק androidComponents
{}
. כל ממשקי ה-API האלה זמינים ב-AGP 7.2.
תמיכה בטרנספורמציה של בייטקוד
כדי לבצע טרנספורמציה של בייטקוד, צריך להשתמש ב-Instrumentation API. לגבי ספריות, אפשר
לרשום אינסטרומנטציה רק למחלקות פרויקטים מקומיות; לאפליקציות ולבדיקות,
תוכלו לבחור לרשום מדידה רק לכיתות מקומיות או לכולם
כולל יחסי תלות מקומיים ומרוחקים. כדי להשתמש ב-API הזה,
התגים פועלים בנפרד בכל מחלקה, עם גישה מוגבלת למחלקה אחרת
לכיתות בנתיב הכיתה (ראו
createClassVisitor()
לקבלת מידע נוסף). ההגבלה הזו משפרת את הביצועים של
גרסאות build מלאות ומצטברות, והופכות את פלטפורמת ה-API לפשוטה. כל ספרייה
נעשה שימוש במקביל במקביל, ברגע שהוא מוכן, במקום אחרי כן
הושלם. בנוסף, שינוי בכיתה אחת
כלומר, צריך לתקן רק את המחלקות המושפעות באופן מצטבר
build. לדוגמה לשימוש ב-Instrumentation API,
שינוי כיתות באמצעות ASM
מתכון של AGP.
תמיכה בהוספת כיתות שנוצרו לאפליקציה
כדי להוסיף לאפליקציה עוד כיתות שנוצרו, צריך להשתמש ב
פריטי מידע שנוצרו בתהליך הפיתוח (Artifact)
API עם
MultipleArtifact.ALL_CLASSES_DIRS
.
ובאופן ספציפי, משתמשים
artifacts.use(TaskProvider)
.wiredWith(...)
.toAppend(Artifact.Multiple)
עם MultipleArtifact.ALL_CLASSES_DIRS
כדי לצרף
של ספריות למחלקות הפרויקט. הבחירה ב-Artifacts API תתבצע באופן אוטומטי
מיקום ייחודי לפלט של המשימה המותאמת אישית. לצפייה
המתכון של addToAllClasses
דוגמה לאופן השימוש ב-API הזה.
תמיכה בטרנספורמציות על סמך ניתוח התוכנית כולה
כדי ליישם טרנספורמציות על סמך ניתוח התוכנית כולה, ניתן לקבוע שעברו טרנספורמציה במשימה אחת. צריך להשתמש בגישה הזו בזהירות כי העלות של ביצועי ה-build גבוהה בהרבה מאשר השימוש באינסטרומנטציה API. אם הפלאגין משתמש ב-API הזה, מומלץ לבצע את הטרנספורמציה להיות הסכמה לכל סוג build, כדי שמפתח האפליקציה יוכל להשבית זאת עבור ופיתוחים.
כדי לרשום משימה שמשנה את כל הכיתות ביחד, צריך להשתמש בפלאגין של Android Gradle בגרסה 7.4
מציג את
Artifacts.forScope
API. כדי לשנות את כל המחלקות בפרויקט הנוכחי, משתמשים
Artifacts.forScope.PROJECT
כדי לשנות את כל המחלקות בפרויקט הנוכחי,
פרויקטים מיובאים וכל יחסי התלות החיצוניים, משתמשים ב-Artifacts.forScope.ALL
.
הקוד הבא מראה איך להשתמש ב-Artifacts.forScope.ALL
כדי לרשום
שמשנה את כל המחלקות ביחד:
variant.artifacts.forScope(ScopedArtifacts.Scope.ALL)
.use(taskProvider)
.toTransform(
ScopedArtifact.CLASSES,
ModifyClassesTask::allJars,
ModifyClassesTask::allDirectories,
ModifyClassesTask::output,
)
לצפייה לשינוי המתכון שלProjectClasses דוגמה לאופן השימוש ב-API הזה CustomizeAgpDsl דוגמה לרישום תוספים מותאמים אישית לסוגי ה-build של Android.
אם התרחיש לדוגמה שלכם לא מכוסה על ידי אף Androidרכיבי יש לדווח על באג.
כמה מיישומי פלאגין נפוצים כבר הועברו לשימוש בממשקי ה-API החדשים האלה, כולל הפלאגין לניטור ביצועים של Firebase (תואם ל-1.4.1 AGP 8.0) והפלאגין Hilt Gradle (2.40.1 תואם ל-AGP 8.0). ה-AGP השדרוג של Assistant יעזור גם למפתחי פרויקטים לשדרג פריטים שנמצאים בשימוש נפוץ יישומי פלאגין לפי הצורך.
אם אתם משתמשים ב-Transform API באמצעות פלאגין של צד שלישי, עליכם לאפשר אל המחבר יודע שיהיה צורך לעדכן את הפלאגין שלו כדי שיעבוד עם ממשקי ה-API החדשים ל-AGP 8.0.
AGP 7.2
בטבלה הבאה מפורטים עדכוני API חשובים ל-AGP 7.2.
RenderScript הוצא משימוש
החל מ-AGP 7.2, ממשקי ה-API של RenderScript הוצאו משימוש. הם ימשיכו לפעול, אבל לגרום לאזהרות והוא יוסר לחלוטין בעתיד של AGP. לקבלת הנחיות איך להפסיק את השימוש ב-RenderScript, אפשר לעיין במאמר בנושא מעבר מ-RenderScript.
Component.transformClassesWith
ו-Component.setAsmFramesComputationMode
הוצאו משימוש
החל מ-AGP 7.2, ממשקי ה-API של האינסטרומנטציה של מחלקה של בייטקוד
Component.transformClassesWith
ו-
Component.setAsmFramesComputationMode
הוצאו משימוש. הם עברו לחסימה חדשה, Component.instrumentation
,
מכילה את כל ממשקי ה-API שקשורים להגדרת תהליך האינסטרומנטציה. שפת תרגום
להמשיך להשתמש בתכונות האינסטרומנטציה האלה, להשתמש בממשקי ה-API התואמים
את הבלוק החדש, כפי שמוצג בקטע הקוד הבא:
androidComponents {
onVariants(selector().all(), {
instrumentation.transformClassesWith(AsmClassVisitorFactoryImpl.class,
InstrumentationScope.Project) { params ->
params.x = "value"
}
instrumentation.setAsmFramesComputationMode(
COMPUTE_FRAMES_FOR_INSTRUMENTED_METHODS
)
})
}