اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
شش دقیقه
یکی از روشهایی که امروزه مورد استقبال برنامه نویسان اندروید و جاوا قرار گرفتهاست، استفاده از یک سیستم DSL به نام Gradle (+) است. ابتدا در سیستمهای Apache Ant (+) و Maven (+) مورد استفاده قرار میگرفت، ولی با جمع کردن نقاط ضعف آن دو سیستم، و رفع عیوب آنها و افزودن مزیتهای جدید، Gradle ایجاد شد. یکی از استفادههایی که به شدت مورد استفادهی برنامه نویسان اندروید قرار میگیرد، استفاده از یک سیستم توزیع برای کلاسهای اندرویدی است. اگر امروزه به خیلی از سورسهای قرار گرفته بر روی گیت هاب، نگاه کنید، به غیر از روش افزودن آن سورس به پروژه به عنوان ماژول، روش دیگری نیز وجود دارد که آن، استفاده از سیستم توزیع Gradle است. استفاده از این روش محبوبیت زیادی دارد و بسیار هم راحتتر است از افزودن یک سورس به پروژه.
برای افزودن یک ماژول به پروژه از طریق گریدل، به صورت زیر اقدام میکنیم:
هر ماژول شامل یک فایل به نام build.gradle است که تنظیمات سطح آن ماژول را به عهده دارد و پروژه نیز یک build.gradle دارد که تنظیمات آن در سطح پروژه صورت میگیرد. برای اقزودن سورس در سطح یک ماژول لازم است که تعدادی خط کد را که معرف و آدرس آن سورس را دارد، به فایل build.gradle اضافه کنیم. به عنوان مثال برای سورس Active Android را که یک ORM عالی در سطح اندروید به شمار میآید، به ماژولمان اضافه میکنیم:
برای افزودن یک ماژول به پروژه از طریق گریدل، به صورت زیر اقدام میکنیم:
هر ماژول شامل یک فایل به نام build.gradle است که تنظیمات سطح آن ماژول را به عهده دارد و پروژه نیز یک build.gradle دارد که تنظیمات آن در سطح پروژه صورت میگیرد. برای اقزودن سورس در سطح یک ماژول لازم است که تعدادی خط کد را که معرف و آدرس آن سورس را دارد، به فایل build.gradle اضافه کنیم. به عنوان مثال برای سورس Active Android را که یک ORM عالی در سطح اندروید به شمار میآید، به ماژولمان اضافه میکنیم:
dependencies { compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT' }
سوال : اندروید استودیو، کتابخانههای اندرویدی را از کجا دانلود میکند؟
Apache Maven یک سیستم آزاد است که برای توزیع کتابخانهها مورد استفاده قرار میگیرد. سرورهای این سیستم شامل یک مخزن maven هستند که کتابخانهها در آن قرار میگیرند و شناسهی دسترسی به آن کتابخانه از طریق همان شناسهای است که شما در build.gradle تعریف میکنید. به طور عادی دو سرور استاندارد برای اینکار وجود دارند که یکی از آنها jcenter و دیگری mavenCnteral است. البته سرورهای دیگری نیز وجود دارند، یا اینکه حتی خودتان هم میتوانید میزبانی را به عهده بگیرید و یا بعضی از شرکتها برای خود مخزنی جداگانه دارند.
JCenter
این سرور که یک مخزن maven است، توسط Bintray میزبانی میشود که میتوانید آن را در این آدرس بیابید. برای اینکه شناسههای gradle مربوط به این سرور در اندروید استودیو دانلود شود، نیاز است خط زیر را به build.gradle سطح پروژه اضافه کنید:
allprojects { repositories { jcenter() } }
MavenCentral
این مخزن توسط Sonatype.org میزبانی میشود که کل مخزن آن را میتوانید در این آدرس بیابید. برای دسترسی به مخازن این سرور نیاز است خطوط زیر را به gradle سطح پروژه اضافه کنید:
allprojects { repositories { mavenCentral() } }
موقعی که شما شناسهی گریدل را اضافه میکنید، حتما باید دقت کنید مخزن آن کجا قرار گرفته است؟ آیا در یکی از آدرسهای بالاست یا حتی میتواند در هر دو آدرس بالا قرار گرفته باشد؛ یا مخزنی غیر از مخازن بالاست.
به عنوان مثال Twitter's Fabric.io خودش کتابخانهی خودش را میزبانی میکند و مخزن آن در این آدرس https://maven.fabric.io/public قرار گرفته است و برای افزودن این کتابخانه به پروژه نیاز است مسیر زیر طی شود:
به عنوان مثال Twitter's Fabric.io خودش کتابخانهی خودش را میزبانی میکند و مخزن آن در این آدرس https://maven.fabric.io/public قرار گرفته است و برای افزودن این کتابخانه به پروژه نیاز است مسیر زیر طی شود:
//project build.gradle repositories { maven { url 'https://maven.fabric.io/public' } } //module build.gradle dependencies { compile 'com.crashlytics.sdk.android:crashlytics:2.2.4@aar' }
سوال : کدامیک از مخازن بالا را انتخاب کنیم؟
اینکه کدامیک را انتخاب کنیم مساله ای است که به خودتان مرتبط است و هر دو برای یک هدف ایجاد شدهاند و آن میزبانی کتابخانههای جاوا و اندرویدی است. بسیاری از توسعه دهندگان از هر دو استفاده میکنند؛ ولی بعضیها هم تنها یکی از آن دو را بر میگزینند. اندروید استودیو در نسخههای اولیهی خود به طور پیش فرض mavencenteral را صدا میزد و به طور پیش فرض در buil.gradle پروژه، آن را معرفی کرده بود. ولی مساله ای که در این بین بود، این بود که این مخزن چندان به مذاق توسعه دهندگان خوش نمیآمد و کمی کار با آن دشوار و سخت بود. لذا تیم اندروید بنا به دلایلی مثل آن و موارد امنیتی و ... و اینکه توسعه دهندگان بیرونی بیشتر از jcenter استفاده میکردند، آن هم به سمت jcenter رفتند که در ورژنهای فعلی اندروید استودیو میتوانید ببینید که کتابخانهی پیش فرض تغییر یافته است و ()jcenter به جای ()mavencentral صدا زده میشود.
دلایل مهاجرت از mavencentral به jcenter:
- سیستم jcenter از طریق یک CDN عمل میکند که در این صورت میتواند تجربهی خوبی از سرعت بهتر را برای توسعه دهندگان به همراه داشته باشد.
- کتابخانههای jcenter بسیار بیشتر از mavencentral هستند؛ تا جایی که میتوان گفت اکثر کتابخانههایی که روی mavencenteral پیدا میشوند، روی jcenter هم هست و jcenter بزرگترین مخزن به شمار میآید.
- آپلود کتابخانه بر روی jcenter بسیار راحتتر است و نیاز به کار پیچیدهای ندارد.
بررسی قسمتهای یک شناسه Gradle
هر شناسه شامل سه قسمت میشود:
GROUP_ID:ARTIFACT_ID:VERSION
کتابخانههای زیر، از یک خانواده هستند که به راحتی میتوانید آنها را از هم تشخیص دهید:
dependencies { compile 'com.squareup:otto:1.3.7' compile 'com.squareup.picasso:picasso:2.5.2' compile 'com.squareup.okhttp:okhttp:2.4.0' compile 'com.squareup.retrofit:retrofit:1.9.0' }
شناخت فایلهای AAR
همانطور که میدانید فرمت فایلهای بایت کدی جاوا JAR میباشد که هم توسط جاوا و هم اندروید پشتیبانی میشود. ولی در صورتیکه کلاس شما یک پروژهی اندرویدی باشد، نمیتوانید آن را در قالب یک فایل JAR منتشر کنید. چرا که که کلاس اندرویدی میتواند شامل فایل مانیفست، منابع و ... باشد که در فایل JAR جایی برای آنها مهیا نشده است. به همین علت فایلهای نوع AAR برای اینکار مهیا شدهاند که این فایل در واقع یک فایل زیپ است که محتویات مورد نظر داخل آن قرار گرفته است و یکی از آن فایل Classes.jar برای کدهاست و مابقی آن به شرح زیر است:
- /AndroidManifest.xml (الزامی) - /classes.jar (الزامی ) - /res/ (الزامی ) - /R.txt (الزامی ) - /assets/ (اختیاری) - /libs/*.jar (اختیاری ) - /jni/<abi>/*.so (اختیاری ) - /proguard.txt (اختیاری ) - /lint.jar (اختیاری )
در مقالهی بعدی کار را با jcenter آغاز میکنیم.