הכנת הספרייה לגרסה

בדף הזה מתוארים המאפיינים והאפשרויות שצריך כדי להכין את הפרויקט של ספריית Android לפרסום באמצעות פלאגין Android Gradle‏ (AGP). גם אם הגדרתם חלק מהמאפיינים האלה בתחילת היצירה של הספרייה, כדאי לעיין בהנחיות הבאות כדי לבצע אופטימיזציה של ההגדרות.

בחירת מרחב שמות

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

החל מגרסה 7.0 של AGP, אפשר להגדיר את מרחב השמות בקובץ build.gradle של האפליקציה, כפי שמתואר בדוגמת הקוד הבאה:

Groovy

android {
  namespace = 'com.example.library'
}

Kotlin

android {
  namespace = "com.example.library"
}

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

בגרסאות קודמות של AGP, אפשר היה להגדיר גם את המאפיין applicationId (לאפליקציה) וגם את המאפיין namespace (לספרייה) באמצעות המאפיין package של המניפסט, מה שהוביל לבלבול.

בחירת ערך minSdkVersion

בחירת minSdkVersion לספרייה היא היבט חשוב בפרסום הספרייה. הערך של minSdkVersion צריך לשקף את גרסת Android המינימלית שהקוד יכול לתמוך בה.

כשבוחרים minSdkVersion, חשוב לשים לב לשיקולים הבאים:

  • בחירת ערך נמוך ל-minSdkVersion מאפשרת בדרך כלל הפצה רחבה יותר של הספרייה.

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

  • בחירת ערך גבוה ל-minSdkVersion עשויה למנוע מאפליקציות לכלול את הספרייה.

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

  • בחירת ערך גבוה של minSdkVersion עשויה לגרום למפתחי האפליקציות להשבית את בדיקות הבטיחות של מיזוג המניפסטים, וכתוצאה מכך לגרום לבעיות בשלב מאוחר יותר בתהליך ה-build.

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

  • יכול להיות שיהיה צורך לבחור ערך גבוה של minSdkVersion במקרים מיוחדים שבהם המניפסט של הספרייה כולל מקלט שידור או מנגנון אחר שבו הקוד מופעל באופן אוטומטי.

    במקרים כאלה, בחירה בערך גבוה של minSdkVersion מבטיחה שהקוד יוכל לפעול. לחלופין, אפשר להשבית את ההתנהגות האוטומטית כדי שהאפליקציה תוכל להביע הסכמה להפעלת הספרייה אחרי ביצוע הבדיקות המתאימות.

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

הגדרת מטא-נתונים של AAR

ספריית Android נארזת בקובץ Android Archive ‏ (AAR). המטא-נתונים של AAR מורכבים מנכסים שעוזרים ל-AGP לצרוך ספריות. אם הספרייה נצרכת על ידי הגדרה לא תואמת, והמטא-נתונים של AAR מוגדרים, תוצג למשתמשים הודעת שגיאה שתעזור להם לפתור את הבעיה.

בחירת ערך minCompileSdk

החל מגרסה 4.1, AGP תומך ב-minCompileSdk. זהו הערך המינימלי של compileSdk שפרויקטים צורכים יכולים להשתמש בו. אם הספרייה מכילה רשומות או משאבים של מניפסט שמשתמשים במאפייני פלטפורמה חדשים יותר, צריך להגדיר את הערך הזה.

אפשר להגדיר את הערך minCompileSdk בבלוק defaultConfig{}, בבלוק productFlavors{} ובבלוק buildTypes{} בקובץ build.gradle ברמת המודול:

Groovy

android {
  defaultConfig {
    aarMetadata {
      minCompileSdk = 29
    }
  }
  productFlavors {
    foo {
      ...
      aarMetadata {
        minCompileSdk = 30
      }
    }
  }
}

Kotlin

android {
  defaultConfig {
    aarMetadata {
      minCompileSdk = 29
    }
  }
  productFlavors {
    register("foo") {
      ...
      aarMetadata {
        minCompileSdk = 30
      }
    }
  }
}

אם מגדירים את minCompileSdk במספר מקומות, Gradle מקצה עדיפות למיקומי ההגדרות באופן הבא במהלך תהליך ה-build:

  1. buildTypes{}

  2. productFlavors{}

  3. defaultConfig{}

בדוגמה הקודמת, שבה minCompileSdk מוגדר גם ב-defaultConfig{} וגם ב-productFlavors{}, העדיפות ניתנת ל-productFlavors{} ו-minCompileSdk מוגדר לערך 30.

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

הפעלת ערכות בדיקה

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

כשמפרסמים ספרייה לשימוש של אחרים, כדאי ליצור ערכים קבועים לבדיקה של ה-API. אפשר להפעיל את ערכות הבדיקה בקובץ build.gradle ברמת המודול:

Groovy

android {
  testFixtures {
    enable = true
  }
}

Kotlin

android {
  testFixtures {
    enable = true
  }
}

כשמפעילים את ערכות הבדיקה, Gradle יוצר באופן אוטומטי קבוצת מקורות src/testFixtures שבה אפשר לכתוב ערכות בדיקה.

למידע נוסף, אפשר לעיין במסמכי העזרה של Gradle בנושא שימוש ב-fixtures לבדיקה.