اندروید NDK هرچیزی که لازم است بدانید + آموزش نصب

هرچند جاوا زبان رسمی برنامه نویسی اندروید است، اما همیشه بهترین راه برای ساختن اپلیکیشن های اندروید، مخصوصا بازی ها، نیست. بسیاری از موتور هایی که برای ساختن بازی مورد استفاده قرار میگیرند، از کیت توسعه بومی (Android Native Development Kit) یا اندروید NDK استفاده میکنند. به این دلیل که NDK به برنامه نویسان اجازه میدهند که کد ها را به زبان C یا C++ بنویسند که به کد های محلی کامپایل میشوند. این یعنی بازی ها یا برنامه هایی که با اندروید NDK ساخته شده اند، میتوانند پردازش بیشتری را از دستگاه بیرون بکشند. در این مقاله یک راهنما برای طرز استفاده شما از اندروید NDK را آماده کرده ایم. با برنامه چی همراه باشید. (منبع نوشته: AndroidAuthority)

این مقاله دارای قسمت های زیر است:
اندروید NDK چیست؟
چگونه کار میکند؟
نحوه نصب و راه اندازی
جمع بندی


اندروید NDK چیست؟

اندروید NDK چیست؟

Android Native Development Kit یا همان اندروید NDK به برنامه نویسان اجازه میدهد که بیشترین عملکرد را از دستگاه بیرون بکشند. این خصوصیت برای موتور های بازی سازی مانند Unity و Unreal بسیار مفید است. به این دلیل که کد های منبع مستقیما به زبان ماشین برای CPU کامپایل میشود. (یعنی دیگر لازم نیست که به یک زبان واسطه مانند جاوا تبدیل شده و بعد به CPU برسند). از این طریق میتوانید بیشترین عملکرد دستگاه را استفاده کنید. همچنین میتوانید از کتابخانه ای که دیگران نوشته اند نیز استفاده کنید یا اینکه میتوانید خودتان آنها را ایجاد نمایید.


چگونه کار میکند؟

اندروید NDK چگونه کار میکند؟

کدهای ndk-build قلب برنامه های اندروید NDK محسوب میشوند و مسئول این هستند که بصورت اتوماتیک متوجه بشوند پروژه شما قرار است چه چیز هایی را بسازید. همچنین این کد ها وظیفه دارند Binary ها را تولید کنند و آنها را در مسیر پروژه شما کپی کنند. شما میتوانید از کلمه native استفاده کنید تا به کامپایلر جاوا بفهمانید که در حال استفاده از اندروید NDK هستید. نمونه را در اینجا میبینید:

public native int numbers(int x, int y);

همچنین کتابخانه های به اشتراک گذاشته شده بومی (با پسوند .so) نیز وجود دارند که NDK آنها را از روی سورس کد های محلی و کتابخانه های بومی استاتیک (با پسوند .a) میسازد. این موارد میتوانند با بقیه کتابخانه ها هم لینک بشوند. رابط کاربری باینری اپلیکیشن که به انگلیسی Application Binary Interface یا ABI گفته میشود، از فایل های با پسوند .so استفاده میکند تا بفهمد که دقیقا کدهای ماشین اپلیکیشن شما، وقتی که آنرا اجرا میکنید، چگونه با سیستم کار میکنند. Android NDK بصورت پیشفرض از ARMABI و MIPS و x86 پشتیبانی میکند. (اطلاعات بیشتر در مورد ABI را در یک مقاله جدا توضیح خواهیم داد).

همه چیز زیر یک رابط کاربری که به نام Java Native Interface یا (JNI) شناخته میشود کار میکند. این دقیقا همان روشی است که اجزای برنامه های C و C++ میتوانند با کدهای جاوا ارتباط برقرار کنند. (در مورد JNI در یک مقاله جدا توضیح داده خواهد شد). اگر شما قصد دارید با استفاده از کدهای ndk یک اپلیکیشن تولید کنید، ابتدا باید دو فایل بسازید: Android.mk و Application.mk. فایل Android.mk باید درون فولدر jni قرار بگیرد و مشخص کننده این موارد باشد: ماژول بعلاوه نام آن، Build Flag ها (که کتابخانه ها به آن لینک میشوند)، و اینکه چه فایل های منبعی نیاز است تا کامپایل شوند. فایل Application.mk نیز همچنین در فولدر jni قرار میگیرد. این فایل ماژول هایی که اپلیکیشن شما به آن نیاز دارد را مشخص میکند.


نحوه نصب و استفاده

نصب و راه اندازی اندروید NDK

نصب کردن اندروید NDK بسیار ساده است. برای سیستم عامل OS X به مسیر زیر بروید:
Prefrences>Android SDK>Android NDK
برای ویندوز هم این مراحل را دنبال کنید:
File>Settings>Android SDK>SDK Tools>NDK
وقتی که نصب شد، شما نیاز به کمی کار سریع دارید تا برنامه خود را با استفاده از NDK ویرایش کنید. ما به عنوان مثال با یک اپلیکیشن جدید شروع میکنیم. شما باید با استفاده از Android Studio 2.2 یا بالاتر این آموزش را دنبال کنید. پس از نصب بودن آخرین نسخه آن مطمئن شوید.

یک پروژه جدید بسازید و گزینه Basic Activity را انتخاب کنید. گزینه Play را بزنید تا برنامه اجرا شده و مشخص شود سالم است. وقتی همه چیز تنظیم شد، بیایید برای توسعه بومی آماده شویم.
به قسمت Preferences یا Settings بروید. (با توجه به سیستم عامل این مورد فرق میکند). بعد این مسیر را دنبال کنید:
Build Tools>Gradle
و سپس روی گزینه ی Use default gradle wrapper کلیک کنید، البته احتمالا این گزینه از قبل انتخاب شده است. آخرین پلاگین آزمایشی Gradle را از این آدرس میتوانید پیدا کنید و شماره آخرین نسخه آن را یادداشت کنید. حالا Gradle پروزه خود را باز کنید (پروژه، نه ماژول) و این کدها را درون آن پیدا کنید:

classpath ‘com.android.tools.build:gradle:2.1.0’

این ها را با کد های زیر جایگزین کنید: (به جای Version Number باید نسخه ورژن که یادداشت کرده اید را بنویسید).

classpath 'com.android.tools.build:gradle-experimental:version number'

این کد ها نسخه پایدار Gradle را با یک نسخه آزمایشی که از اندروید NDK پشتیبانی کند، جایگزین میکند. اکنون به قسمت gradle ماژول های خود بروید و کدهای قدیمی را با این کدها جایگزین کنید:

apply plugin: 'com.android.model.application'model {
  android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"
    defaultConfig {
      applicationId "com.example.abutt.aandk"
      minSdkVersion.apiLevel 22
      targetSdkVersion.apiLevel 23
      versionCode 1
      versionName "1.0"
    }
    buildTypes {
      release {
        minifyEnabled false
        proguardFiles.add(file('proguard-android.txt'))
      }
    }
    ndk {
      moduleName "hello-android-jni"
    }
  }
}
// others below this line: no change

برنامه را اجرا کنید تا مطمئن شوید درست کار میکند. زیر قسمت buildTypes توی build.gradle ماژول هایتان، این کد ها را اضافه کنید:

  ndk {
    moduleName "hello-android-jni"
  }

به قسمت MainActivity.java اپلیکیشن خودتان بروید و این کد ها را به انتهای آن اضافه کنید:

// new code
static {
  System.loadLibrary("hello-android-jni");
}
public native String getMsgFromJni();
  // new code done
} // class MainActivity

برنامه را اجرا کنید و مطمئن شوید همه جیز هنوز همانطوز که باید کار کند، کار میکند. کار بعدی این است که فایل C یا C++ را بسازید. حتما باید متوجه شده باشید که تابع getMsgFromJni() به رنگ قرمز درآمده است. ماوس خود را روی نام تابع ببرید تا یک چراغ قرمز ظاهر شود. روی این لامپ کلیک کنید و گزینه اول که Creating a Function هست را انتخاب کنید.

فایل C یا C++ باید درون یک فولدر جدید به نام jni باشد. این فایل را باز کنید و کد زیر را درون آن Paste نمایید.

#includejni.h
JNIEXPORT jstring JNICALL
Java_com_example_abutt_aandk_MainActivity_getMsgFromJni(JNIEnv *env, jobject instance) {
// TODO
return (*env)->NewStringUTF(env, "Hello From Jni! This was done in C!");
}

مطمئن شوید که نام “com_example_abutt_aandk” را به نام اپلیکیشن خود تغییر دهید. این فایل توسط getMsgFromJni() تولید شده است که پیام “Hello From Jni! This was done C!” را نمایش بدهد.

به MainActivity اپلیکیشن خود برگردید و این کد را به پایان متد OnCreate() اضافه کنید.

((TextView) findViewById(R.id.jni_msgView)).setText(getMsgFromJni());

تمام شد! اپلیکیشن شما باید به درستی اجرا شود و از اندروید NDK استفاده کند. اما این یک مثال از استفاده واقعی از Android NDK نیست. مثال واقعی تر در این مورد را میتوان توسعه با استفاده از OpenGL و Vulkan یا استفاده از موتورهایی مانند Unity و Unreal است که دارای NDK درون خود هستند.


جمع بندی

اندروید NDK کاربردهای خاصی دارد و چیزی نیست که هر روز در توسعه اندروید از آن استفاده کنید. اما NDK به سازندگان موتور های بازی سازی یک راه عالی نشان داده است تا محصولاتشان را برای اندروید بهینه کنند که باعث میشود قابلیت های عالی گرافیکی با استفاده از منابع کمتر فعال بشوند. ساختن یک اپلیکیشن ساده با استفاده از NDK زیاد سخت نیست. با مقداری تمرین هم میتوانید از OpenGL استفاده کنید. آیا شما هم از اندروید NDK برای توسعه اندروید استفاده کرده اید؟ تجربه های خود را در قسمت نظرات با ما در میان بگذارید.

درباره نویسنده

1 در مورد “اندروید NDK هرچیزی که لازم است بدانید + آموزش نصب”

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

اسکرول به بالا