העלאת הספרייה

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

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

בחירת סוג המאגר

הספריות מתפרסמות כקובצי AAR. הקבצים האלה מכילים קוד שעבר הידור (קומפילציה) כקוד בייטים וספריות Native, מניפסט של Android ומשאבים. החבילה עצמה לא מצהירה על זהות, גרסה או תלות בספריות אחרות.

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

יש כמה יתרונות לשימוש במאגר כדי לפרסם את הספרייה:

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

אם תפיצו את ה-AAR ישירות, המשתמשים לא יקבלו מידע על הזהות, הגרסה או יחסי התלות של הספרייה. כשמפרסמים במאגר, ההפצה מטופלת על ידי קובץ נפרד שהוא חלק ממנגנון המאגר. במאגרי Maven, זהו קובץ ה-POM. לכן, מומלץ מאוד לפרסם ספריות באמצעות מאגרים במקום להפיץ קובצי AAR באופן ידני.

סוגי מאגרים

יש שלושה סוגים של מאגרים:

  • מאגרים חינמיים באינטרנט, כמו Maven Central, מאפשרים לכל אחד להעלות ולהוריד ספריות.
  • מאגרים פרטיים, שהגישה אליהם היא באמצעות התחברות, מאפשרים הפצה מבוקרת של ספריות פרטיות.
  • מאגרים מקומיים שמבוססים על תיקיות מאפשרים להפיץ ספריות באמצעות הורדה ידנית.

השימוש במאגרים מקומיים שמבוססים על תיקיות דומה מאוד למתן קישור להורדה ידנית של ה-AAR למשתמשים או לשליחת ה-AAR באימייל. ההבדל העיקרי הוא שאתם לא שולחים רק את ה-AAR, אלא גם את המידע הנוסף על הזהות, הגרסה והתלויות.

אתם מפיצים קובץ ZIP של המאגר שמבוסס על תיקיות, שמכיל את קובץ ה-AAR והמטא-נתונים. לאחר מכן המשתמשים יכולים לחלץ את תוכן הקובץ, להוסיף את התוכן לפרויקט שלהם ולהפנות את Gradle אליו. מאותו רגע, המשתמשים יכולים להצהיר על תלות בספרייה באמצעות קואורדינטות של Maven, כאילו הספרייה נמצאת במאגר אונליין, וליהנות מכל היתרונות שצוינו קודם.

יצירת אתר החדשות

מפרסמים באמצעות Gradle Maven Publish Plugin. הפלאגין Maven Publish מאפשר להצהיר על פרסומים ומאגרים, ויוצר משימות לפרסום הפרסומים האלה במאגרים. הפרסומים האלה צורכים מכונה של SoftwareComponent שנוצרת על ידי הפלאגין שמפעיל את ה-build, שיכול להיות AGP או הפלאגין java-library.

שימו לב: כשמפעילים את הפלאגין Maven Publish עם AGP, רכיבי התוכנה לא נוצרים ישירות כשהפלאגין מופעל. במקום זאת, הם נוצרים במהלך שלב הקריאה החוזרת (callback) של afterEvaluate(). לכן, צריך להגדיר גם את הפרסום שבוחר את רכיב התוכנה במהלך השלב afterEvaluate().

קטע הקוד הבא של קובץ build.gradle ברמת המודול יוצר פרסום לווריאנט נתון שנוצר באמצעות singleVariant() או multipleVariants():

מגניב

publishing {
  publications {
    release(MavenPublication) {
      groupId = 'com.my-company'
      artifactId = 'my-library'
      version = '1.0'

      afterEvaluate {
        from components.release
      }
    }
  }
}

Kotlin

publishing {
  publications {
    register<MavenPublication>("release") {
      groupId = "com.my-company"
      artifactId = "my-library"
      version = "1.0"

      afterEvaluate {
        from(components["release"])
      }
    }
  }
}

בדוגמה שלמעלה, השם של הרכיב (components.release) מבוסס על השם שניתן ל-singleVariant() או ל-multipleVariants().

אחרי שמצהירים על פרסום, צריך ליצור מאגר יעד.

פרסום במאגר מקומי

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

מגניב

publishing {
  publications {
    release(MavenPublication) {
      ...
    }
  }
  repositories {
    maven {
      name = 'myrepo'
      url = layout.buildDirectory.dir("repo")
    }
  }
}

Kotlin

publishing {
  publications {
    register<MavenPublication>("release") {
      ...
    }
  }
  repositories {
    maven {
      name = "myrepo"
      url = uri(layout.buildDirectory.dir("repo"))
    }
  }
}

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

כדי ליצור באופן אוטומטי קובץ ZIP של המאגר, משתמשים בקוד הבא:

מגניב

tasks.register('generateRepo', Zip) {
  def publishTask = tasks.named('publishReleasePublicationToMyrepoRepository')
  from publishTask.map { it.getRepository().getUrl() }
  into 'mylibrary'
  archiveFileName.set('mylibrary.zip')
}

Kotlin

tasks.register<Zip>("generateRepo") {
  val publishTask = tasks.named(
    "publishReleasePublicationToMyrepoRepository",
    PublishToMavenRepository::class.java)
  from(publishTask.map { it.repository.url })
  into("mylibrary")
  archiveFileName.set("mylibrary.zip")
}

הקוד הזה יוצר משימת Zip בשם generateRepo שצורכת את התוכן של משימת הפרסום ודוחסת אותו, תוך הבטחה שרשומות ה-ZIP נמצאות בתיקייה ברמה העליונה בשם mylibrary. הפלט נמצא בקטע build/distributions.