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

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

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

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

ספריות מתפרסמות כקובצי AAR. הקבצים האלה מכילים קוד שעבר הידור בתור bytecode וספריות נייטיב, מניפסט של 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. הפלאגין Maven Publish מאפשר להצהיר על פרסומים מאגרי הנתונים הקיימים ויוצרת משימות לפרסום הפרסומים האלה מאגרים. אתרי החדשות האלה צורכים מופע SoftwareComponent ש הפלאגין שיוצר את ה-build, שיכול להיות AGP או הפלאגין java-library.

חשוב לשים לב: כשמפעילים את הפלאגין Maven Publish עם AGP, התוכנה רכיבים לא נוצרים ישירות כשמחילים את הפלאגין. במקום זאת שנוצרו במהלך afterEvaluate() קריאה חוזרת (callback). לכן, אתר החדשות שבוחר את רכיב התוכנה צריך להגדיר אותן גם במהלך השלב 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