کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

نوشتن کتابخانه برای اپلیکیشن های اندرویدی

پروژه های کتابخانه ای اندروید و کتابخانه های جاوا

استفاده از کتابخانه های اندروید و جاوا

یک پروژه ی اندرویدی به راحتی می تواند از کدهای موجود در فایل های JAR (فایل های فشرده حاوی چندین کلاس جاوا به همراه metadata و منابع مورد نیاز که به کتابخانه های جاوایی معروف هستند) استفاده کند.

جدا از فایل های JAR، اندروید از یک فرمت توزیع نرم افزار (binary distribution) ویژه به نام Android ARchive(AAR) (کتابخانه هایی که جدا از کلاس های جاوا دربردارنده ی انواع فایل ها و منابع مبتنی بر XML می باشند) استفاده می کند. .aar bundle در واقع یک پروژه ی کتابخانه ای اندروید است با روش توزیع نرم افزار binary distribution (به صورت کامپایل شده) ارائه ی می شود.

یک فایل AAR تقریبا شبیه به یک فایل JAR است اما علاوه بر کلاس های نوشته شده با جاوا، حامل سایر منابع و محتوا و نیز byte-code کامپایل شده می باشد. فایل AAR را می توان در فرایند build و کامپایل اپلیکیشن درست مانند فایل JAR بکار برد.

توسعه دهنده می تواند ماژول های کتابخانه ای ایجاد کرده و از آن ها به عنوان dependency در پروژه های اندرویدی استفاده کند. این ماژول ها به شما امکان می دهد تا کد برنامه (source code) و منابعی همچون عکس و متن را ذخیره کرده و بین سایر پروژه های اندرویدی به اشتراک گذاشته و استفاده کنید.

نحوه ی استفاده از فایل JAR در اپلیکیشن اندرویدی

به منظور استفاده از یک فایل JAR (فایل کتابخانه ای جاوا) در پروژه، کافی است آن فایل را داخل پوشه ی libs در اپلیکیشن خود جایگذاری کنید. فایل های jar داخل این پوشه از طریق فایل build.gradle پیش فرض، در compile classpath قرار داده می شوند.

محدودیت هایی در استفاده از کتابخانه های java

در صورت نیاز به استفاده از کتابخانه ها لازم است این نکته را به خاطر داشته باشید که این کتابخانه ها تنها باید از API ها و توابع متعارف و شناخته شده در اندروید استفاده کنند. به طور مثال، کتابخانه های اندروید کتابخانه های لازم برای طراحی رابط کاربری اپلیکیشن همچون java.awt و javax.swing را ندارند. کتابخانه ای که کلاس های موجود در این کتابخانه ها را فراخوانی کند، قابل استفاده در اندروید نخواهد بود.

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

ماژول های اختصاصی کتابخانه ای اندروید (library modules)

ماژول های کتابخانه ای (library module)

زمانی که یک پروژه (application project) از ماژول کتابخانه (Android library module یا همان ماژول که بخشی مجزا از اپلیکیشن است) استفاده می کند، ابزار ساخت و توسعه ی اپلیکیشن های اندروید / ADT کد و منابع لازم را از پروژه ی کتابخانه ای در خروجی کامپایل و build شده ی پروژه می گنجاند. این بدین معنی است که کامپوننت ها، کد و منابع پروژه کتابخانه ای (library project) کاملا ترجمه شده و همگی در قالب فایل .apk اپلیکیشن کامپایل شده پکیج بندی می شوند.

از اینرو می توان به library module به چشم یک مصنوع زمان کامپایل نگاه کرد. ماژول کتابخانه ای می تواند شامل کلاس های جاوا، کامپوننت های نرم افزاری اندروید و منابع باشد. تنها نوع فایلی که در این کتابخانه ها جایی ندارد، asset ها هستند.

جهت ایجاد یک پروژه ی کتابخانه، در ویزارد ساخت پروژه های اندرویدی (Android project generation wizard)، گزینه ی Mark this project as library را انتخاب کنید.

یک پروژه ی کتابخانه ای بایستی تمامی کامپوننت های خود نظیر activity ها، سرویس و غیره ... را در لایه ی XML، داخل فایل تنظیمات AndroidManifest.xml اعلان کند. اپلیکیشنی که از این کتابخانه استفاده می کند نیز بایستی تمامی کامپوننت های نرم افزاری مورد استفاده را داخل فایل تنظیمات اپلیکیشن مربوطه اعلان نماید.

اولویت در انتخاب منابع (conflicting resources)

ابزار ساخت و توسعه اپلیکیشن های اندرویدی (Android development tool) منابع پروژه ی کتابخانه را با منابع پروژه ی اپلیکیشن ادغام می کند. حال چنانچه ID یا شناسه ی منابع پروژه چندین بار به صورت تکراری اعلان شده باشد، ADT تلاش می کند آن منبعی را از اپلیکیشن یا کتابخانه گزینش نماید که بالاترین اولویت را داشته و منابع اضافی را دور می ریزد.

ایجاد ماژول های کتابخانه ای اختصاصی در اندروید (Android library module)

استفاده از پروژه های کتابخانه ای (library project) به توسعه دهنده کمک می کند تا کد اپلیکیشن را به صورت بهینه سازمان دهی کند. جهت ایجاد یک ماژول کتابخانه ای جدید در محیط برنامه نویسی Android Studio، بر روی المان File از نوار بالایی محیط کلیک کرده و گزینه ی New Module را باز نمایید و سپس Android Library را انتخاب کنید.

تمرین: ساخت یک library module (کتابخانه ی اندروید)

برای تمرین جاری لازم است پروژه ای که در مباحث قبلی ایجاد کرده و اسم پکیج (top level package) آن com.example.android.rssfeed می باشد را در اختیار داشته باشید (می توانید به مقاله ی آموزش fragment ها مراجعه نمایید). پروژه ی کتابخانه ای که ایجاد می کنیم علاوه بر data model (کلاس های ساخته شده از جداول دیتابیس)، یک تابع جهت بازیابی تعداد نمونه ها (instances) در بر خواهد داشت. کتابخانه ی مورد نظر اجازه ی دسترسی به داده ها و اطلاعات (ساختگی) RSS را می دهد. فایل RSS نیز صرفا یک فایل XML است که برای انتشار و بارگذاری اخبار و نوشته ها و پست های وبلاگ مورد استفاده قرار می گیرد.

ایجاد یک کتابخانه ی جدید (library module)

در محیط برنامه نویسی Android Studio هر کتابخانه خود یک ماژول محسوب می شود. برای ایجاد یک ماژول یا کتابخانه ی جدید در محیط کاری نام برده، این مسیر را طی نمایید: File ▸ New Module و سپس Android Library را انتخاب نمایید.

ایجاد کتابخانه

به عنوان اسم ماژول، com.example.android.rssfeedlibrary و به عنوان اسم کتابخانه Rssfeed Library را وارد نمایید.

ایجاد کتابخانه جدید

زمانی که از شما درخواست می شود که قالب آماده یا template دلخواه را انتخاب نمایید، صریحا اعلان کنید که نمی خواهید activity ساخته شود. در نتیجه محیط کاری Android Studio یک ماژول دیگر برای شما به نمایش می گذارد.

ایجاد کتابخانه جدید 01

ایجاد کلاس model (data model)

یک کلاس به نام RssItem جهت ذخیره ی داده های مربوط به محتوای RSS ایجاد نمایید.

حال توابع getter و setter، تابع سازنده (constructor) و یک متد toString() در کلاس اعلان نمایید. خروجی بایستی ظاهری مشابه زیر داشته باشد:

package com.example.android.rssfeedlibrary;
public class RssItem {
        private String pubDate;
        private String description;
        private String link;
        private String title;
        public RssItem() {
        }
        public RssItem(String title, String link) {
                this.title = title;
                this.link = link;
        }
        public String getPubDate() {
                return pubDate;
        }
        public void setPubDate(String pubDate) {
                this.pubDate = pubDate;
        }
        public String getDescription() {
                return description;
        }
        public void setDescription(String description) {
                this.description = description;
        }
        public String getLink() {
                return link;
        }
        public void setLink(String link) {
                this.link = link;
        }
        public String getTitle() {
                return title;
        }
        public void setTitle(String title) {
                this.title = title;
        }
        @Override
        public String toString() {
                return "RssItem [title=" + title + "]";
        }
}

ایجاد کلاس های مورد نیاز (instances)

اکنون یک کلاس جدید به نام RssFeedProvider با یک متد static که لیستی از آبجکت های RssItem را در خروجی برمی گرداند، تعریف نمایید. این متد در حال حاضر تنها داده های آزمایشی (test data) را برمی گرداند.

package com.vogella.android.rssfeedlibrary;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class RssFeedProvider {
    public static List parse(String rssFeed) {
        List list = new ArrayList<>();
        Random r = new Random();
        // random number of item but at least 5
        Integer number = r.nextInt(10) + 5;
        for (int i = 0; i < number; i++) {
            // create sample data
            String s = String.valueOf(r.nextInt(1000));
            RssItem item = new RssItem("Summary " + s, "Description " + s);
            list.add(item);
        }
        return list;
    }
}

اضافه کردن کتابخانه به عنوان dependency به پروژه

به منظور استفاده از کتابخانه، کافی است آن را به عنوان dependency در بستر پروژه ی خود وارد کنید. برای این منظور مسیر رو به رو را طی نمایید: File ▸ Project Structure. پوشه ی app را انتخاب کنید. حال تب Dependencies را باز نموده و پس از کلیک بر روی علامت +، المان module dependencies را از فهرست انتخاب نمایید.

کتابخانه به عنوان dependency ایجاد کتابخانه dependency ایجاد کتابخانه dependency 01

استفاده از پروژه کتابخانه جهت بروز رسانی داده های details fragment ها

متد updateDetail را جهت استفاده از کامپوننت نرم افزاری RssFeedProvider، در بدنه ی کلاس MyListFragment بروز رسانی نمایید. کدهای موجود در آن صرفا آزمایشی (test code) هستند.

public class MyListFragment extends Fragment {
..// everything as before
    // triggers update of the details fragment
    public void updateDetail(String uri) {  // 							1) متد آپدیت شده
        List list = RssFeedProvider
                .parse("http://www.vogella.com/article.rss");
        String itemListAsString = list.toString();
        listener.onRssItemSelected(itemListAsString);
    }

تست اپلیکیشن و بررسی عملکرد صحیح آن

اپلیکیشن خود را اجرا کرده و مطمئن شوید که خروجی تابع ()toString (مقدار toString) از لیست RssItems در detail fragment نمایش داده می شود.

نکته :

لازم به ذکر است که لیست، با توجه به منطق و کدی که در حال حاضر برای اپلیکیشن تنظیم شده، صرفا به صورت تصادفی ایجاد می شود.

1396/01/29 5426 2221
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...






آموزش برنامه نویسی کاربر میهمان 1396/05/05
متشکرم

خیلی عالی بود. متشکر