ubuntu ndk 环境变量配置
1. 下载NDK for linux版本,我下载的是android-ndk-r10e。
2. 将NDK添加到环境变量中。在/etc/environment 添加/root/android-ndk-r10e,然后source /etc/environment
3. 在Terminal中输入ndk-build。出现以下提示说明安装成功:
Android NDK: Could not find application project directory !
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
/root/android-ndk-r10e/build/core/build-local.mk:143: *** Android NDK: Aborting . Stop.
在eclipse中使用jni
1. 新建Android应用程序。我的应用程序包名是com.mibound.sostest
2. 在项目根目录下新建jni文件夹
3. 使用javah命令生成.h文件。在项目根目录下打开Terminal,执行javah -jni -classpath /bin/classes/ -d jni/ com.mibound.sostest.MainActivity命令(参数不熟悉可以输入javah查看)。
如果出现Error: Could not find class file for 'com.mibound.sostest.MainActivity'.
或者Error: jni cannot access android.app.Activity
需要将android.jar包加到classpath中。即javah -jni -classpath/root/tools/adt-bundle-linux-x86_64-20140702/sdk/platforms/android-20/android.jar:bin/classes/ -d jni/ com.mibound.sostest.MainActivity
如果成功会发现jni目录下多了一个.h文件com_mibound_sostest_MainActivity.h
4. 编写MainActivity.java
private native String show();
static {
System.loadLibrary("app_jni");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTxtData = (TextView) findViewById(R.id.txt_data);
mTxtData.setText(show());
}
5. 在jni目录下新建app_jni.c文件,实现本地方法
#include <string.h>
#include <jni.h>
jstring Java_com_mibound_sostest_MainActivity_show(JNIEnv* env, jobject thiz)
{
return (*env)->NewStringUTF(env, "Show message from jni");
}
6. 在jni目录下新建Android.mk文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := app_jni
LOCAL_SRC_FILES := app_jni.c
include $(BUILD_SHARED_LIBRARY)
7. 在项目根目录下执行ndk-build
执行成功会在libs/armeabi/目录下生成libapp_jni.so
运行应用程序会发现TextView显示
“Show message from jni”