نحوه ساخت و انتشار کتابخانه اندروید

نحوه ساخت و انتشار کتابخانه اندروید

توسعه دهندگان اندروید قادر به استفاده از کتابخانه هایی هستند که سایرین ساخته اند و به راحتی می توانند آنها را در پروژه خود جای دهند، این مزیت بسیاری از مشغله های فکری توسعه دهندگان اندروید را می کاهد و توسعه اپلیکیشن را تسهیل می بخشد. در این مقاله قصد داریم شما را با نحوه ساخت و انتشار کتابخانه های اندروید آشنا کنیم، با این کار سایر توسعه دهندگان قادر خواهند بود از کتابخانه شما بدون هیچ مشکلی استفاده کنند.

1. ساخت یک کتابخانه اندروید

چنانچه قصد دارید تا در کتابخانه خود از کلاس های جاوا استفاده کنید، پکیج کردن آن به عنوان فایل JAR و توزیع آن با استفاده از یک فایل میزبان ساده ترین و سریع ترین راه حل برای اشتراک گذاری خواهد بود. چنانچه قصد ساخت آن از کنسول را دارید کامند زیر را برای این کار مورد استفاده قرار دهید:

jar cvf mylibrary.jar Class1.class Class2.class ... ClassN.class

این مطلب آموزشی به شما نحوه کار با کتابخانه های پیچیده تر را نیز می آموزد، کتابخانه هایی که نه تنها در بر گیرنده کلاس های جاوا، بلکه شامل انواع گوناگونی از فایل ها و منابع XML نیز می باشند. کتابخانه های این چنینی به عنوان ماژول های کتابخانه اندروید ساخته می شوند و به صورت فایل AAR پکیج بندی می گردند.

برای شروع کار بیایید یک کتابخانه ساده اندروید بسازیم که یک ویوی شخصی سازی شده را در اختیار توسعه دهندگانی که مایل به استفاده از آنند قرار می دهد.

گام 1: یک ماژول جدید بیفزایید

برای شروع کار با انتخاب New > New Module  از منوی فایل یک ماژول اندروید جدید به پروژه خود بیفزایید. تصویر مشابه زیر به شما نمایش داده می شود که گزینه های متعددی را در اختیار قرار می دهد:

blog_16038_1

Android Library را انتخاب کرده و Next را بزنید. در فرمی که در ادامه به نمایش در می آید یک نام برای کتابخانه خود انتخاب کرده و Next را بزنید. کتابخانه موردنظر در اینجا mylittlelibrary نام گرفته است.

در آخرین صفحه Add no Activity را انتخاب کرده و سپس Finish را بزنید.

در این مرحله پروژه شما دارای دو ماژول خواهد بود، یکی برای اپلیکیشن و دیگری برای کتابخانه. در زیر ساختار آن نمایش داده شده است:

blog_16038_2

گام 2: ساخت یک لی اوت

با کلیک راست بر روی فولدر res از ماژول کتابخانه خود و انتخاب New > XML > Layout XML File یک لی اوت XML جدید بسازید. نام فایل را my_view.xml بگذارید.

برای سادگی این مطلب ما یک ویوی کاستوم که دارای دو TextViewwidgets درون یک LinearLayout است استفاده خواهیم کرد. پس از افزودن مقداری متن به ویجت های TextView لی اوت XML باید چیزی مشابه تصویر زیر باشد:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent" android:layout_height="match_parent"

android:orientation="vertical"

android:padding="16dp">

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textAppearance="?android:attr/textAppearanceLarge"

android:text="Hello!"/>

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textAppearance="?android:attr/textAppearanceMedium"

android:text="This is my custom view from my little library."/>

</LinearLayout>

گام 3: ساخت یک کلاس جاوا

یک کلاس جاوای جدید به نام MyView.java بسازید، این فایل باید درون پوشه src از ماژول کتابخانه قرار بگیرد نه ماژول اپلیکیشن.

برای اینکه این کلاس عملکردی مشابه با ویو داشته باشد آن را به یک زیرکلاس از کلاس LinearLayoutclass کنید. اندروید استودیو از شما درخواست چندین سازنده برای این کلاس می کند، پس از افزودن آنها کلاس جدید باید چیزی مشابه زیر باشد:

public class MyView extends LinearLayout {

public MyView(Context context) {

super(context);

}

public MyView(Context context, AttributeSet attrs) {

super(context, attrs);

}

}

همانطور که مشاهده می کنید دو سازنده داریم. برای جلوگیری از افزوده شدن کد مقداردهی اولیه به هرکدام از سازنده ها متد initialize از هر کدام از سازنده ها را فراخوانی کنید و کد زیر را به هریک از سازنده ها بیفزایید:

initialize(context);

در این متد initialize باید inflateرا جهت نسبت دادن کلاس به لی اوتی که در گام پیش ساخته ایم فراخوانی کنید.

private void initialize(Context context){

inflate(context, R.layout.my_view, this);

}

2. استفاده از کتابخانه به صورت لوکال

هم اکنون که کتابخانه موردنظر ساخته شده باید آن را در ماژول اپلیکیشن از همان پروژه استفاده کنیم تا از عملکرد صحیح آن مطمئن شویم. برای این کار آن را به عنوان یک وابستگی compile در فایل build.gradle  ماژول اپلیکیشن بیفزایید.

compile project(":mylittlelibrary")

یک کلاس جاوای جدید به نام MainActivity در ماژول اپلیکیشن بسازید و آن را یک زیرکلاس از کلاس Activity  کرده و متد onCreate آن را اورراید نمایید.

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

}

}

درون متد onCreate یک نمونه از ویوی کاستوم با استفاده از سازنده آن بسازید و آن را به متد setContentView انتقال دهید با این کار تمامی فضای نمایش Activity پر می شود:

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

View v = new MyView(this);

setContentView(v);

}

در این مرحله Activity شما آماده است، پس از افزودن آن به منیفست اپلیکیشن پروژه را بیلد کرده و آن را بر روی گوشی اندروید به اجرا در آورید. با اجرای اپلیکیشن باید قادر به مشاهده کاستوم ویوی ساخته شده باشید.

3. انتشار کتابخانه در Bintray

Bintray یک پلتفرم محبوب برای انتشار کتابخانه های اندروید می باشد که به صورت رایگان در اختیار توسعه دهندگان قرار گرفته است. برای شروع کار باید یک حساب کاربری در Bintray بسازید، پس از وارد شدن به حساب کاربری خود مشاهده خواهید کرد که دارای 6 ریپوزیتوری هستید، می توانید یکی از آنها را مورد استفاده قرار دهید و یا اقدام به ساخت یک ریپوزیتوری جدید نمایید. در این مطلب از ریپوزیتوری به نام Maven استفاده می شود.

blog_16038_3

به صفحه پروفایل خود مراجعه کرده و بر روی دکمه Edit کلیک کنید، در صفحه بعد بر روی API Keylink کلیک کنید تا API key به شما نمایش داده شود.

blog_16038_4

API key را یادداشت کنید زیرا برای احراز هویت خود در هنگام استفاده از پلاگین Bintray به آن نیاز خواهید داشت.

گام 1: افزودن پلاگین های موردنیاز

به منظور تعامل با Bintray در اندروید استودیو باید Bintray plugin را در وابستگی های فایل build.gradle پروژه خود قرار دهید.

classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2'

از آنجا که شما کتابخانه را در ریپوزیتوری Maven آپلود خواهید کرد باید Maven plugin را نیز همانطور که در زیر نشان داده شده بیفزایید.

classpath "com.github.dcendents:android-maven-gradle-plugin:1.3"

گام 2: تایید پلاگین ها

فایل build.gradle از ماژول کتابخانه خود را باز کنید و کد زیر برای برای تایید پلاگین هایی که در مرحله قبلی افزوده بودیم تایید کنید.

apply plugin: 'com.jfrog.bintray'

apply plugin: 'com.github.dcendents.android-maven'

گام 3: مشخص کردن POM Details

پلاگین Bintray در زمان آپلود کتابخانه به دنبال فایل POM می گردد. حتی با این وجود که پلاگین Maven آن را برای شما تولید می کند، باز هم نیاز به مشخص کردن مقدار تگ groupId و مقدار تگ نسخه خود دارید. برای این کار از متغیرهای group و version در فایل gradle استفاده کنید.

group = 'com.github.hathibelagal.librarytutorial' // Change this to match your package name

version = '1.0.1' // Change this to match your version number

چنانچه با Maven آشنایی دارید ممکن است این سوال برای شما بوجود آمده باشد که چرا مقدار تگ artifactId را تعیین نکرده ایم، دلیل این امر این است که پلاگین Maven به طور پیش فرض از نام کتابخانه برای مقدار artifactId استفاده می کند.

گام 4: تولید یک Sources JAR

به منظور پذیرش استانداردهای Maven کتابخانه شما باید دارای یک فایل JAR که دربرگیرنده فایل های منبع کتابخانه است نیز باشد، برای تولید یک فایل JAR یک تسک جدید Jar با کمک generateJavadocsJar ایجاد کنید و مکان فایل های منبع را با کمک تابع from مشخص سازید.

task generateSourcesJar(type: Jar) {

from android.sourceSets.main.java.srcDirs

classifier 'sources'

}

گام 5: تولید یک Javadoc JAR

پیشنهاد می شود که کتابخانه شما یک فایل JAR شامل Javadocs را نیز داشته باشد، زیرا در حال حاضر شما هیچ Javadocs ندارید یک تسک جدید Javadocs بسازید و برای تولید آنها از generateJavadocs استفاده کنید. از متغیر source برای تعیین مکان فایل های منبع بهره بگیرید. علاوه بر این لازم است متغیر classpath را نیز آپدیت کنید، با این کار تسک می تواند کلاس هایی را که به Android SDK تعلق دارند بیابد. این کار با استفاده از مقدار بازگشتی متد android.getBootClasspath صورت می پذیرد.

task generateJavadocs(type: Javadoc) {

source = android.sourceSets.main.java.srcDirs

classpath += project.files(android.getBootClasspath()

.join(File.pathSeparator))

}

در گام بعد برای تولید یک JAR از Javadocs یک تسک Jar با generateJavadocsJar بسازید و ویژگی destinationDir از generateJavadocs را به تابع from بفرستید. تسک جدید شما باید چیزی شبیه زیر باشد:

task generateJavadocsJar(type: Jar) {

from generateJavadocs.destinationDir

classifier 'javadoc'

}

جهت کسب اطمینان از اینکه تسک generateJavadocsJar تنها پس از اتمام تسک generateJavadocs شروع به کار می کند، قطعه کد زیر را که از متد dependsOn جهت مرتب کردن ترتیب تسک ها استفاده می کند، اضافه کنید.

generateJavadocsJar.dependsOn generateJavadocs

گام 6: درج فایل های JAR تولید شده

به منطور درج فایل های Javadoc JAR در فهرست مصنوعات که در ریپوزیتوری Maven آپلود خواهد شد، باید نام تسک های آن را به یک configuration به نام archives اضافه کنید، برای این کار از قطعه کد زیر استفاده کنید:

artifacts {

archives generateJavaDocsJar

archives generateSourcesJar

}

گام 7: اجرای تسک ها

در این مرحله باید تسک هایی را که در گام های پیش ساخته بودیم به اجرا در آوریم. پنجره Gradle Projects را باز کنید و به دنبال تسکی به نام install بگردید.

blog_16038_5

بر روی آن دو بار کلیک کنید تا تسک های مرتبط با ماژول کتابخانه به اجرا در آیند. پس از اینکه فرآیند اجرا خاتمه یافت تمامی چیزهایی که برای انتشار کتابخانه موردنیاز است یعنی یک فایل POM معتبر، یک فایل AAR، JAR منابع و یک Javadocs JAR در دسترس خواهد بود.

گام 8: پیکربندی پلاگین Bintray

برای پیکربندی پلاگین باید از bintray closure در فایل Gradle استفاده کنید. اول از همه با استفاده از متغییرهای user  و key  متناظر با  username و API key خود جهت احراز هویت استفاده کنید.

در Bintray کتابخانه شما در یک پکیج Bintray قرار می گیرد و لازم است جزئیاتی از آن را شامل repo ،name ،licenses و vcsUrlparameters را در اختیار قرار دهید. چنانچه پکیج وجود نداشته باشد به طور خودکار برای شما تولید می شود.

زمانی که فایل ها را به Bintray آپلود می کنید نسخه پکیج Bintray نیز به آنها افزوده می شود، بنابراین پکیج باید دارای نسخه ای باشد که ویژگی نام آن منحصر به فرد است.

افزودن توضیحات، تاریخ ریلیز و تگ Git نیز اختیاری است و با پارامترهای desc ،released و vcsTag مشخص می شود.

در نهایت برای تعیین فایل هایی که باید آپلود کنید مقدار پارمتر configuration به archives را مشخص کنید.

در زیر یک پیکربندی ساده به نمایش گذاشته شده است:

bintray {

user = 'test-user'

key = '01234567890abcdef01234567890abcdef'

pkg {

repo = 'maven'

name = 'com.github.hathibelagal.mylittlelibrary'

version {

name = '1.0.1-tuts'

desc = 'My test upload'

released = new Date()

vcsTag = '1.0.1'

}

licenses = ['Apache-2.0']

vcsUrl = 'https://github.com/hathibelagal/LibraryTutorial.git'

websiteUrl = 'https://github.com/hathibelagal/LibraryTutorial'

}

configurations = ['archives']

}

گام 9: آپلود فایل با استفاده از پلاگین Bintray

پنجره Gradle Projects را مجددا باز کنید و تسک bintrayUpload را جستجو کنید، با دو بار کلیک بر روی آن کار آپلود فایل ها را آغاز کنید.

blog_16038_6

با اتمام تسک یک مرورگر را باز کنید و صفحه جزئیات پکیج Bintray را مشاهده کنید. شما قادر به مشاهده یک نوتیفیکیشن خواهید بود که به شما می گوید که دارای 4 فایل منتشر نشده هستید، به منظور انتشار این فایل ها بر روی لینک Publish کلیک کنید.

blog_16038_7

4. استفاده از کتابخانه Bintray

در این مرحله کتابخانه شما به عنوان یک پکیج در دسترس است، چنانچه URL ریپوزیتوری Maven خود را همراه با group ID ،artifact ID و شماره نسخه به اشتراک بگذارید هر توسعه دهنده ای قادر به دستیابی به کتابخانه شما خواهد بود. جهت استفاده از کتابخانه ای که ساخته ایم توسعه دهندگان باید از قطعه کد زیر استفاده کنند.

repositories {

maven {

url 'https://dl.bintray.com/eruzza/maven'

}

}

dependencies {

compile 'com.github.hathibelagal.librarytutorial:mylittlelibrary:1.0.1@aar'

}

توجه داشته باشید توسعه دهنده لازم است ریپوزیتوری شما را در فهرست ریپوزیتوری ها پیش از افزودن کتابخانه به عنوان یک وابستگی compile درج کند.

5. افزودن کتابخانه به JCenter

به طور پیشفرض اندروید استودیو در یک ریپوزیتوری به نام JCenter به جستجوی کتابخانه های می پردازد. چنانچه کتابخانه خود را در ریپوزیتوری JCenter قرار دهید دیگر نیازی برای افزودن چیز دیگری به فهرست ریپوزیتوری ها از سوی توسعه دهندگان احساس نمی شود.

جهت افزودن کتابخانه خود به JCenter یک مرورگر را باز کنید و صفحه جزئیات پکیج Bintray را مشاهده کنید و بر روی دکمه ای به نام Add to JCenter کلیک کنید.

blog_16038_8

در ادامه به صفحه ای هدایت خواهید شد که به شما امکان نگارش یک متن را می دهد، می توانید از فیلد Comments نیز برای ذکر هرگونه جزئیاتی درباره کتابخانه استفاده کنید.

blog_16038_9

به منظور آغاز فرآیند بررسی Bintray بر روی دکمه Send  کلیک کنید، در مدت یک الی دو روز کتابخانه شما به ریپوزیتوری JCenter لینک خواهد شد و شما قادر به مشاهده لینک به JCenter در صفحه جزئیات پکیج خود خواهید بود.

blog_16038_10

در این مرحله هر توسعه دهنده ای بدون نیاز به ایجاد تغییر در فهرست ریپوزیتوری ها قادر به استفاده از کتابخانه شما خواهد بود.

نتیجه گیری

در این مطلب آموزشی شما نحوه ساخت یک کتابخانه ساده اندروید و انتشار آن بر روی ریپوزیتوری Maven خود و ریپوزیتوری Jcenter را آموختید و با نحوه ساخت و اجرای انواع گوناگونی از تسک های gradle نیز آشنایی پیدا کردید.

جهت کسب اطلاعات بیشتر درباره Bintray می توانید به لینک Bintray's user manual مراجعه کنید.

 

http://code.tutsplus.com برگرفته از

اینها را هم بخوانید

نظرات کاربران

  1. Reza Zarchi
    Reza Zarchi
    باتشکر از مطلب مفید شما. به نظر می‌رسه این روش برای پروژه‌های کلوزسورس جواب نمیده. درباره این مسئله ایده‌ای دارین؟

    به این نظر پاسخ دهید