Android NDK
• จำเป็นต้องมี SDK 1.5
• บน windows จำเป็นต้องลง http://www.cygwin.com/ (จะมี gmake และ gcc มาให้)
• ทำให้เขียน c/c++ เพื่อรันบน android ได้
• native code จะถูกเรียกใช้ผ่าน JNI
• เขียนไม่ดีจะกลายเป็นว่าซับซ้อนกว่าเดิมโดยใช่เหตุเพราะว่ามันต้องรันบน dalvik VM อีกชั้นอยู่แล้ว
• ในอนาคต code ของ native อาจจะใช้ไม่ได้บ้างบางส่วนเพราะว่ามันมียังมีการปรับอยู่เรื่อยๆ
• ต้องเขียน android.mk และ application.mk เองด้วย
• c++ ใช้ .cpp เป็นพื้นฐาน สามารถ config ให้รับ .cxx อื่นๆ ได้
• ประกอบด้วย
∘ cross-toolchains ( compilers, linker, etc) ที่สามารถสร้าง native ARM binaries บน Linux, OSX, Windows(ที่มี Cygwin)
NDK แบบคร่าวๆ
หลังจากโหลด ndk มาและแตกไฟล์ออกมาจะมีโครงสร้าง dir ดังนี้
โดย
- code ที่เขียนออกมาจะไม่ได้กลายเป็น app โดยตรง
- เมื่อ compile แล้วมันจะสร้าง lib native ให้อยู่ใน apps/
- เรียกผ่าน JNI ของ android อีกทีหนึ่ง
โดยที่เราจะต้องเขียน Application.mk (makefile) และ AndroidManifest.xml เพิ่มเติมเองเพื่อให้มันเรียกใช้ได้
sources/ จะมี Android.mk ที่เป็นตัวกำหนดว่าต้อง build หรือ compile ไฟล์ใด dir ใดบ้าง เพราะฉะนั้นมันจะมีอยู่แทบทุก subdir
สำหรับ code ของ c/c++ ที่เขียนใน sources จะมีลักษณะที่ทำไว้ให้ jni เรียกได้ด้วย แล้วไฟล์ที่ว่านั้นอาจจะไปเรียก code c อื่นๆ ก็ได้
** second.c **
#include "first.h" // เรียกใช้ func อื่น #include <jni.h> // เรียก jni jint Java_com_example_twolibs_TwoLibs_add( JNIEnv* env, // Java_com_example_twolibs_TwoLibs_ < คือชื่อ pkg และ class, add คือชื่อ method jobject this, jint x, jint y ) // argument พื้นฐานคือ JNIEnv* env,jobject this argument เพิ่มเติมคือ jint x, jint y { return first(x, y); // เรียกใช้ function จากไฟล์อื่น (first.c) } |
** first.c **
#include "first.h" int first(int x, int y) { return x + y; } |
** first.h **
#ifndef FIRST_H #define FIRST_H extern int first(int x, int y); #endif /* FIRST_H */ |
และจะเรียกใช้ผ่าน JNI ได้ในลักษณะนี้
package com.example.twolibs; import ... public class TwoLibs extends Activity { @Override public void onCreate(Bundle savedInstanceState) { /* do something */ int x = 1000; int y = 42; // dynamically load the library at runtime // before calling the native method. System.loadLibrary("twolib-second"); int z = add(x, y); /* show z output */ } public native int add(int x, int y); } |
STABLE lib ที่สามารถเรียกใช้ได้
C standard, <stdlib.h>, <stdio.h>, etc... และ <pthread.h><math.h>
C++ <cstddef> <new> <utility> <stl_pair.h>
C lib เฉพาะของ android <android/log.h>
Zip
<zlib.h> <zconf.h>
เริ่มใช้ android NDK
1. ตรวจสอบ system requirement
- SDK 1.5
- GNU Make 3.81 ขึ้นไป ทดสอบโดยการ พิมพ์ make -v
build/host-setup.sh
3. เขียน source แล้วเก็บไว้ที่ source/<mysrc>/...
4. เขียน sources/<mysrc>/Android.mk เพื่ออธิบาย source code ให้ NDK build ได้ถูกต้อง
- เขียน source code
5. เขียน apps/<myapp>/Application.mk เพื่ออธิบายโปรแกรม และ native code มันจำเป็นต้องใช้กับ NDK build system
- เขียน app ที่เรียก native code
6. Build Native code ด้วย คำสั่ง make APP=<myapp> ที่ root dir ของ NDK
7. Generate .apk ด้วย Eclipse
Configurating the NDK
ไม่มีความคิดเห็น:
แสดงความคิดเห็น