آپلود کردن لایبرری اندروید در bintray با گریدل

یه بخش از پروژم رو تبدیل کردم به یه ماژول که از کد ماژول اصلی جدا بشه و بعدا هم بتونم ازش تو پروژه‌های دیگه استفاده کنم. با خودم گفتم چرا تبدیلش نکنم به لایبرری و نذارمش توی Bintray که بعدا مثل کتابخونه‌های عادی به برنامه‌ام اضافه کنمش؟چنتا مقاله و داکیومنت رو خوندم اما هر کدوم یه جور نقص داشتن و یه مدل ارور داشتن. دنبال یه منبع بودم که خلاصه و مفید کارم رو راه بندازه و کتابخونه‌ام رو آپلودش کنم. از ترکیب چیزایی که خوندم تونستم بالاخره این کار رو انجام بدم. تو این مقاله نحوه‌ی انجام کارم رو توضیح می‌دم.قدم اول: حساب Bintrayباید اول توی سایت Bintray حساب بسازید و وارد شید.بعد از اینکه وارد شدید یه سازمان (Organization) بسازید.ساخت organizationبعدش روی سازمانی که ساختید کلیک کنید و یه مخزن (Repository) بسازید.ساخت repositoryبعد از وارد کردن نام مخزن،‌‌‌ Type اون رو Maven قرار بدید، چون قراره کتابخونه برای اندروید باشه.برای مثال من اسم سازمان رو mah-d انتخاب کردم و اسم مخزن رو maven. اینا رو باید حواسمون باشه، چون باهاشون کار داریم.حالا باید یه پکیج بسازیم توی مخزن. روی مخزن کلیک کنید و Add New Package رو انتخاب کنید.ساخت پکیجاطلاعات وارد شده مختص کتابخونه‌ی شماست و اطلاعاتی که من توی عکس گذاشتم صرفا مثال هست.تا اینجا کارهای مربوط سایت تموم شده و بهتره بریم سراغ اندروید استودیو.قدم دوم: راه‌اندازی اندروید استودیواین دو خط رو به بلاک dependencies مربوط به فایل پروژه (و نه ماژول‌ها) اضافه کنید:classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4'برای راحتی کار کل کد‌هایی که قراره اضافه‌کنیم رو توی یه فایل میذاریم و ماژولی که قراره آپلود بشه از این فایل استفاده خواهد کرد. پس کنار فایل گریدل پروژه (و دوباره، ماژول نه) یک فایل می‌سازیم به اسم bintray.gradle و کدهای زیر رو به ترتیب داخلش قرار می‌دیم.دو تا پلاگین رو اول توی فایل فعال می‌کنیم:apply plugin: 'com.github.dcendents.android-maven' apply plugin: 'com.jfrog.bintray'بعد متغیرهای لازم رو می‌سازیم (برای اینکه متغیر‌ها همه‌جا قابل استفاده باشن اونا رو توی بلاک ext می‌ذاریم).ext { bintrayRepo = 'maven' // نام مخزن bintrayName = 'pulp' // نام پکیج // publishedGroupId:artifact:libraryVersion publishedGroupId = 'ir.malv.utils' // پکیج‌نیم لایبرری artifact = 'pulp' // اسم ماژول libraryVersion = '0.0.1' // نسخه libraryName = 'Pulp' // عنوان لایبرری libraryDescription = 'Simple logger' // توضیح برای لایبریی siteUrl = 'https://github.com/mahdi-malv' // لینک سایت gitUrl = 'https://github.com/mahdi-malv/pulp.git' // لینک گیت developerId = 'mahdi-malv' // آی‌دی توسعه‌دهنده developerName = 'Mahdi Malvandi' // اسم توسعه‌دهنده developerEmail = 'email@gmail.com' // ایمیل licenseName = 'The Apache Software License, Version 2.0' // عنوان لایسنس licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt' // لینک لایسنس allLicenses = ["Apache-2.0"] // همه‌ی لایسنس‌ها }نام مخرن: مخزنی که در ابتدا ساختید.نام پکیج: پکیجی که برای اون مخزن ساختید.پکیج‌نیم لایبرری: پکیج‌نیمی که ماژول داره (همون application id)اسم ماژول: تو منوی projects اندروید استودیو و فایل settings.gradle ماژول عنوانی داره که منظور همونه.نسخه‌: نسخه‌ای که ماژول داره.عنوان: به دلخواه یه نام برای کتابخونه. مثلا همون اسم ماژول.لینک‌ها: برای لایبرری یک ریپوی گیت بسازید و اون رو برای issues، گیت استفاده کنید، برای سایت هم می‌تونید سایت خودتون رو بذارید اگر دارید، اگر هم نه مثل اینجا صرفا لینک حساب گیت‌هاب رو بذارید.لایسنس‌ها: در مورد لایسنس‌ها اینجا بیشتر بخونید: https://opensource.org/licenses با این متغیرها کد گریدل لایبرری شما بدین صورت خواهد بود:publishedGroupId:artifact:libraryVersion`ir.malv.utils:pulp:0.0.1بعد از اینکه این متغیر‌ها درست تنظیم‌شدن، کد‌های زیر رو اضافه کنید.group = publishedGroupId version = libraryVersion install { repositories.mavenInstaller { pom.project { packaging 'aar' groupId publishedGroupId artifactId artifact name libraryName description libraryDescription url siteUrl licenses { license { name licenseName url licenseUrl } } developers { developer { id developerId name developerName email developerEmail } } scm { connection gitUrl developerConnection gitUrl url siteUrl } } } } task sourcesJar(type: Jar) { classifier = 'sources' from android.sourceSets.main.java.srcDirs } task javadoc(type: Javadoc) { source = android.sourceSets.main.java.srcDirs classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) } task javadocJar(type: Jar, dependsOn: javadoc) { classifier = 'javadoc' from javadoc.destinationDir } artifacts { archives javadocJar archives sourcesJar }و حالا این کدها رو اضافه کنید که کانفیگ لایبرری در Bintray هست.Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) bintray { user = properties.getProperty("bintray.user") key = properties.getProperty("bintray.apikey") configurations = ['archives'] pkg { repo = bintrayRepo name = bintrayName desc = libraryDescription userOrg = 'mah-d' websiteUrl = siteUrl vcsUrl = gitUrl licenses = allLicenses dryRun = false publish = true override = false publicDownloadNumbers = true version { desc = libraryDescription } } }توی این بلاک چنتا فیلد مهم هست. یکی userOrg که همون سازمان (Organization) هست که در ابتدای قدم اول ساختید.فیلدهای user و key:برای ارتباط با Bintray یک نام‌کاربری لازمه و یک ApiKey. نام کاربری که مشخصه، اما ApiKey رو باید از سایت بردارید. روی پروفایل کلیک کنید و Edit profile رو بزنید و مطابق تصویر ApiKey رو کپی کنید.گرفتن API keyتوی فایل local.properties دوتا فیلد اضافه کنید:bintray.user=userName bintray.apikey=apiKey!:‌دقت کنید که مقدارها رو توی double quote یا single quote نذارید.دلیل قراردادن این مقدارها توی این فایل اینه که چون حساس و مهم هستن بهتره بیان توی فایلی که توی .gitignore هست و توی گیت پوش نمی‌شه.کار فایل bintray.gradle تموم‌شده و حالا کافیه که به فایل گریدل ماژول اضافه کنیم و گریدل رو سینک کنیم:این کد رو به انتهای فایل build.gradle (مربوط به ماژول) اضافه کنید:apply from: '../bintray.gradle'این یعنی فایل توی یک فولدر بالاتر از محل کنونیه (اگر فایل رو جای دیگه‌ای گذاشتید، آدرس درست رو قرار بدید).بعد از سینک کردن باید تسک‌های clean و install رو ران کنید. دوبار کلید Ctrl رو بزنید و کامند زیر رو وارد کنید و Enter رو بزنید. دقت کنید که عملیات موفقیت‌آمیز باشه و اگر خطا داشتید ابتدا خطا رو رفع کنید بعد دوباره کامند رو ران کنید.gradle clean installهمچنین می‌تونید توی ترمینال یا CMD هم این کار رو انجام بدید.# Cmdgradle.bat clean install# Terminal./gradlew clean installبعد از اون تسک bintrayUpload رو باید ران کنید. از منوی تسک‌های ماژول بخش publishing می‌تونید اون رو انتخاب کنید.بعد از اتمام اجرا، مطمئن شید که تسک موفقیت‌آمیز بوده. بعد می‌تونید برید به سایت و بعد از رفرش ببینید که فایل‌های جدید اضافه‌شدن.الآن می‌تونید از همین طریق با url لایبرری رو به یک پروژه‌ی اندروید اضافه کنید:توی صفحه‌ی پکیج، لینکی که به لایبرری اشاره داره رو باید به repositories اضافه‌کنید.لینک مخزن که پکیج توی اون قرار داره repositories { google() jcenter() maven { url 'https://dl.bintray.com/mah-d/maven' } }و بعد توی dependencies کد لایبرری رو اضافه‌کنید:کد dependency لایبرریهم‌چنین در صورتی که لایبرری مناسب ‌Jcenter (مخزن اصلی که توی اندروید به طور پیش‌فرض اضافه‌می‌شه) هست می‌تونید اون رو به Jcenter اضافه کنید. با این کار نیاز به اضافه‌کردن لینک مخزن نیست.گیت‌هاب لایبرری و همه‌ی این کدها رو هم می‌تونید اینجا پیدا کنید.لینک مقاله‌های مفید و مرتبط:Simple way to publish your library to JcenterBintray gradle pluginPublishing to bintray with gradle