تحميل مكتبتك

لمنح إذن الوصول إلى مكتبتك، عليك اختيار مستودع. توضّح لك هذه الصفحة الاعتبارات المتعلّقة باختيار نوع المستودع وكيفية إنشاء عملية نشر باستخدام مكوّن Maven Publish الإضافي.

قبل تحميل مكتبتك، تأكَّد من تجهيزها للإصدار وضبط أي صِيَغ نشر أو أدوات اختبار ضرورية.

اختيار نوع المستودع

يتم نشر المكتبات كملفات AAR. تحتوي هذه الملفات على رمز برمجي مجمّع كرمز بايت ومكتبات مجمّعة من رموز برمجية أصلية وملف بيان Android وموارد. لا تعلن الحزمة نفسها عن أي هوية أو إصدار أو تبعيات على مكتبات أخرى.

يُعدّ توفير ملفات AAR من خلال مستودع أفضل الممارسات بشكل عام، بدلاً من توزيع ملفات AAR مباشرةً. يساعد ذلك المستخدمين في فهم مصدر المكتبة بشكل أفضل بدلاً من التعامل مع ملف name.aar بدون تفاصيل مهمة، مثل الإصدار. عند الترقية إلى إصدار أحدث من مكتبة، استخدِم مستودعًا لضمان إضافة التبعيات المطلوبة فقط للإصدار الأحدث، حتى لا يضطر المستخدمون إلى تحديث التبعيات يدويًا.

هناك مزايا متعددة لاستخدام مستودع لنشر مكتبتك:

  • يمكن لـ Gradle إضافة تبعيات مكتبتك تلقائيًا إلى الرسم البياني للتبعية.
  • يمكن أن يضمن Gradle وجود إصدار واحد من مكتبتك في الرسم البياني للتبعية، وحلّ التعارضات إذا تم تضمين مكتبتك بشكل انتقالي أكثر من مرة بإصدارات مختلفة.
  • يمكن لمكوّن إضافي لنظام Gradle المتوافق مع Android (AGP) إجراء عملية إزالة التجميل اللغوي بشكل أكثر كفاءة إذا كانت مكتباتك تستخدم ميزات لغة Java 8 أو إصدار أحدث، ما يقلّل من مدّة التصميم للمستخدمين.
  • يمكن لمكتبتك استخدام ميزة نشر الصيغ وتضمين ميزات مثل أدوات الاختبار.

لا يؤدي توزيع ملفات AAR مباشرةً إلى تزويد المستخدم بأي معلومات تتعلق بهوية مكتبتك أو إصدارها أو تبعياتها. عند النشر في مستودع، يتم التعامل مع التوزيع بواسطة ملف منفصل يمثل جزءًا من آلية المستودع. بالنسبة إلى مستودعات Maven، هذا هو ملف POM. لذلك، ننصح بشدة بنشر المكتبات باستخدام المستودعات بدلاً من توزيع ملفات AAR يدويًا.

أنواع المستودعات

هناك ثلاثة أنواع من المستودعات:

  • تتيح المستودعات المجانية على الإنترنت، مثل Maven Central، لأي مستخدم تحميل المكتبات وتنزيلها.
  • تسمح المستودعات الخاصة، التي يمكن الوصول إليها عن طريق تسجيل الدخول، بالتوزيع الخاضع للرقابة للمكتبات الخاصة.
  • تتيح المستودعات المحلية المستندة إلى المجلدات توزيع المكتبات من خلال التنزيل اليدوي.

إنّ استخدام المستودعات المحلية المستندة إلى المجلدات يشبه إلى حد كبير تزويد المستخدمين برابط تنزيل يدوي لملف AAR أو إرسال ملف AAR عبر البريد الإلكتروني. يتمثل الاختلاف الرئيسي في أنك لا ترسل فقط AAR ولكن أيضًا المعلومات الإضافية حول الهوية والإصدار والتبعيات.

يمكنك توزيع ملف ZIP للمستودع المستند إلى المجلدات والذي يحتوي على ملف AAR بالإضافة إلى البيانات الوصفية. يمكن للمستخدمين بعد ذلك استخراج محتوى الملف وإضافته إلى مشروعهم وتوجيه Gradle إليه. ومنذ ذلك الحين، يمكن للمستخدمين الإعلان عن تبعية للمكتبة باستخدام إحداثيات Maven، كما لو كانت المكتبة في مستودع على الإنترنت، والاستفادة من جميع المزايا المذكورة سابقًا.

إنشاء جهة النشر

انشر باستخدام مكوّن Gradle Maven Publish الإضافي. يتيح لك المكوّن الإضافي Maven Publish الإعلان عن المنشورات والمستودعات وإنشاء مهام لنشر هذه المنشورات في المستودعات. تستخدم عمليات النشر هذه مثيل SoftwareComponent الذي ينشئه المكوّن الإضافي الذي يشغّل عملية الإنشاء، والذي يمكن أن يكون AGP أو المكوّن الإضافي java-library.

يُرجى العِلم أنّه عند تشغيل المكوّن الإضافي Maven Publish مع "المكوّن الإضافي لنظام Gradle المتوافق مع Android"، لا يتم إنشاء مكوّنات البرنامج مباشرةً عند تطبيق المكوّن الإضافي. بدلاً من ذلك، يتم إنشاؤها أثناء خطوة معاودة الاتصال 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 تتكون من اسم المنشور واسم المستودع. شغِّل هذه المهمة لإنشاء المستودع في الموقع الجغرافي المقدَّم. في هذا المثال، يتم إنشاء المستودع داخل مجلد الإصدار الخاص بالمشروع، ضمن دليل 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.