کتابخانه ها (Library) در برنامه نویسی، تکههایی جدا از کد هستند که کار مشخصی انجام میدهند. کتابخانهها معمولا از پیش کامپایل شده و قابل استفاده دوباره در برنامههای مختلف میباشند. در برنامهنویسی موبایل با اندروید استودیو (Android Studio) نیز ما از کتابخانه های از پیش آماده زیادی استفاده می کنیم. این کتابخانه ها معمولا با جاوا (Java) یا کاتلین (Kotlin) نوشته شدهاند.
در این نوشته میخواهیم یک کتابخانه جاوا در اندروید استودیو ایجاد کنیم و آن را در دیگر برنامهها (با جاوا یا کاتلین) بکار ببریم. حتی میتوانیم این کتابخانه را در برنامههایی که با C++\QT نوشتهایم نیز استفاده کنیم.
ساخت کتابخانه جاوا
برای ایجاد کتابخانه جاوا، اندروید استودیو را باز کرده و یک پروژه جدید ایجاد کنید. سپس File -> New -> New Module را انتخاب کنید. در پنجره باز شده از سمت چپ Android Library را انتخاب کنید و نام و تنظیمات کتابخانه را وارد کنید. مانند شکل زیر:

کتابخانهای که میخواهیم ایجاد کنیم یک کتابخانه ساده برای استفاده در C++\Qt است. این کتابخانه دارای یک کلاس است که در سازنده کلاس دو پارامتر میگیرد. و شامل یک متد (تابع) است که یک رشته اطلاعات را بر میگرداند و همجنین یک متد native. متد های native، تابع هایی در سمت ++C هستند که کد جاوا میتواند آنها را فراخوانی کند. این تابعها را میتوانیم در سمت ++C در موتور جاوا ثبت (Regiser) و استفاده کنیم. استفاده از کتابخانه های جاوا در C++\Qt را در نوشته «ارتباط با کتابخانه جاوا در C++\Qt» بررسی خواهیم کرد.
در ادامه من از نام های تصویر مثال استفاده می کنم. شما آنها را با نامهایی که انتخاب کردهاید جایگزین کنید. حالا در اندروید استودیو از سمت چپ روی testlibrary -> java -> ir.samiyacode.testlibrary کلیک راست کرده و یک کلاس جدید بنام TestClass ایجاد کنید. کد داخل کلاس را بصورت زیر کامل کنید:
package ir.samiyacode.testlibrary;
import android.content.Context;
public class TestClass {
private final Context ctx;
private final String str;
public TestClass(Context _ctx, String _str) {
System.out.println("MyCtxClass constructor");
ctx = _ctx;
str = _str;
}
public String getInfo() {
runFromCpp("Invoke C++ method");
return ctx.getPackageName() + " -> " + str;
}
public native void runFromCpp(String msg);
}
در کلاس بالا، فراخوانی متد runFromCpp در getInfo فقط و فقط برای نمایش فراخوانی یک تابع native در جاوا انجام شده است. یک مثال کاربردیتر زمانی است که ما یک درخواست روی شبکه ارسال میکنیم و نتیجه را در یک callable میخوانیم و در پایان برای مطلع کردن سمت ++C یک متد native را فراخوانی میکنیم. در صورتیکه قرار نیست کتابخانه با کد ++C کار کند نیازی به تعریف متدهای native نیست.
کامپایل و ساخت کتابخانه
پس از ایجاد کلاسها و توابع مورد نیاز، حالا میتوانید کتابخانه testlibrary را کامپایل کنید. برای اینکار روی testlibrary کلیک کرده و Make -> build -> testlibrary Module را از منوی بالا انتخاب کنید. پس از اتمام کامپایل، فایل کتابخانه ساخته شده در مسیر testlibrary/build/outputs/aar به نام testlibrary-debug.aar ایجاد شده است. این فایل را میتوانیم در پروژههایی که با اندروید استودیو یا Qt Creator برای اندروید میسازیم بکار ببریم.
در نوشته «ارتباط با کتابخانه جاوا در C++\Qt» استفاده از این کتابخانه را در Qt و ++C بررسی خواهیم کرد.