Android SDK developer at Tapsell
آپلود کردن لایبرری اندروید در bintray با گریدل
یه بخش از پروژم رو تبدیل کردم به یه ماژول که از کد ماژول اصلی جدا بشه و بعدا هم بتونم ازش تو پروژههای دیگه استفاده کنم. با خودم گفتم چرا تبدیلش نکنم به لایبرری و نذارمش توی Bintray که بعدا مثل کتابخونههای عادی به برنامهام اضافه کنمش؟
چنتا مقاله و داکیومنت رو خوندم اما هر کدوم یه جور نقص داشتن و یه مدل ارور داشتن. دنبال یه منبع بودم که خلاصه و مفید کارم رو راه بندازه و کتابخونهام رو آپلودش کنم. از ترکیب چیزایی که خوندم تونستم بالاخره این کار رو انجام بدم. تو این مقاله نحوهی انجام کارم رو توضیح میدم.
قدم اول: حساب Bintray
باید اول توی سایت Bintray حساب بسازید و وارد شید.
بعد از اینکه وارد شدید یه سازمان (Organization) بسازید.
بعدش روی سازمانی که ساختید کلیک کنید و یه مخزن (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، گیت استفاده کنید، برای سایت هم میتونید سایت خودتون رو بذارید اگر دارید، اگر هم نه مثل اینجا صرفا لینک حساب گیتهاب رو بذارید.
لایسنسها: در مورد لایسنسها اینجا بیشتر بخونید:
با این متغیرها کد گریدل لایبرری شما بدین صورت خواهد بود:
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 رو کپی کنید.
توی فایل 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 هم این کار رو انجام بدید.
# Cmd
gradle.bat clean install
# Terminal
./gradlew clean install
بعد از اون تسک bintrayUpload رو باید ران کنید. از منوی تسکهای ماژول بخش publishing میتونید اون رو انتخاب کنید.
بعد از اتمام اجرا، مطمئن شید که تسک موفقیتآمیز بوده. بعد میتونید برید به سایت و بعد از رفرش ببینید که فایلهای جدید اضافهشدن.
الآن میتونید از همین طریق با url لایبرری رو به یک پروژهی اندروید اضافه کنید:
توی صفحهی پکیج، لینکی که به لایبرری اشاره داره رو باید به repositories اضافهکنید.
repositories {
google()
jcenter()
maven { url 'https://dl.bintray.com/mah-d/maven' }
}
و بعد توی dependencies کد لایبرری رو اضافهکنید:
همچنین در صورتی که لایبرری مناسب Jcenter (مخزن اصلی که توی اندروید به طور پیشفرض اضافهمیشه) هست میتونید اون رو به Jcenter اضافه کنید. با این کار نیاز به اضافهکردن لینک مخزن نیست.
گیتهاب لایبرری و همهی این کدها رو هم میتونید اینجا پیدا کنید.
لینک مقالههای مفید و مرتبط:
مطلبی دیگر از این انتشارات
ساخت پلاگین یونیتی برای لایبرری اندرویدی
مطلبی دیگر از این انتشارات
سرویس وررکر چیست؟ و چرا باید از اون استفاده کنیم؟
مطلبی دیگر از این انتشارات
گزارش آماری پوشه از کاربران موبایل های اندرویدی در ایران