前言,
在这里用写个NDK的实例。
一,软件环境
WinXP SP3
Android SDK 2.2
Android NDK r5
二,调用方的 APP
非常简单的应用程序,就是简单的调用一下 JNI 的函数。
HelloNDK.java
package net.dncsoft.android.sample;
import android.app.Activity;
import android.os.Bundle;
public class HelloNDK extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
NDKBoundary ndkBoundary = new NDKBoundary();
int i = ndkBoundary.ndk_add(1, 2);
i++;
}
}
NDKBoundary.java
package net.dncsoft.android.sample;
public class NDKBoundary {
static {
System.loadLibrary("HelloNDKImpl");
}
public native int ndk_add(int a, int b);
}
编译生成 .class 文件。直接运行的话肯定出错。呵呵,废话,lib 还没做呢。
三,生成接口定义 H 文件
javah -o d:\HelloNDKImpl.h -classpath d:\WS\HelloNDK\bin net.dncsoft.android.sample.NDKBoundary
三,被调用的 LIB
HelloNDKImpl.cpp
#include <HelloNDKImpl.h>
jint Java_net_dncsoft_android_sample_NDKBoundary_ndk_1add(JNIEnv* env,
jobject thiz, jint x, jint y) {
return x + y;
}
Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := HelloNDKImpl
LOCAL_CFLAGS := -Werror
LOCAL_SRC_FILES := HelloNDKImpl.cpp
include $(BUILD_SHARED_LIBRARY)
用上一讲的方法能编译成 libHelloNDKImpl.so 文件。
四,运行看看
用下面命令启动模拟器,导入 LIB
cd %AndroidRoot%\tools
start emulator -avd avdname -partition-size 512
adb remount
adb -s emulator-5554 push d:\libHelloNDKImpl.so /system/lib
第 2 行命令是防止 Out of Memory 错误。
第 3 行命令是防止 Read-Only 错误。
现在可以运行 APP 啦。
五,Debug环境 (待续)