JDK环境变量及设置
1.下载安装JDK
2.我的电脑-高级设置-环境变量
2.1 JAVA_HOME:你的jdk安装目录
2.2 Path:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
2.3 CLASSPATH: .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
3.开始-运行-cmd,在启动的命令窗口中运行java和javac,确定输出正确
AndroidSDK环境变量设置
1.下载Android SDK包
2.我的电脑-高级设置-环境变量
2.1 ANDROID_HOME: Android SDK的安装目录
2.2 在Path中添加: %ANDROID_HOME%\platforms;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;
3.开始-运行-cmd,在启动的命令窗口中运行adb,android
Android NDK环境变量设置
1.下载Android NDK r7以上的包
2.我的电脑-高级设置-环境变量
2.1 ANDROID_NDK: Android NDK的安装目录
2.2 在Path中添加: %ANDROID_NDK%;%ANDROID_NDK%\build;
3.开始-运行-cmd,在启动的命令窗口中运行ndk-build
使用eclipse开发JNI程序
eclipse最好使用Google官方提供的ADT build包,如果是自己配置eclipse要添加cdt插件,Android adt,ndk插件
1.新建一个普通的Android项目。
2.Window-Preferce-Android(NDK)设置NDK路径
4.选中项目,右键,选择Android Tools-Add Native Supprot,在弹出的输入框中填写.so名字。一般用lib+.so
3.选中项目,右键-properties-C/C++ General-Paths and Symbols->Add-File System Tree->C:\develop\android-ndk-r9d\platforms\android-19\arch-arm\usr\include
4.在eclipse生成的jni下,将.cpp改成.c,并将Android.mk文件中LOCAL_SRC_FILES := libtestjni.cpp 改为LOCAL_SRC_FILES := libtestjni.c
5.在Activity中添加一个native方法,返回一个字符串即可
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toast.makeText(this, sayHello(), Toast.LENGTH_LONG).show(); } private native String sayHello();
6.通过cmd进入到项目的src目录下,运行javah 包名.Activity名
javah com.example.testjni.MainActivity
7.在eclipse项目中,刷新目录,找到生成的头文件,将方法名复制到jni下已修改为*.c的文件中。
8.在c文件新添加的方法中设置形参名
javah生成的方法名
JNIEXPORT jstring JNICALL Java_com_example_testjni_MainActivity_sayHello (JNIEnv *, jobject);
c文件中修改后的方法
JNIEXPORT jstring JNICALL Java_com_example_testjni_MainActivity_sayHello (JNIEnv *env, jobject obj){ return (*env)->NewStringUTF(env,"Hello"); }
9.在左上角确定当前处于C/C++视图,找到类似锤子的按钮,单击,在Console观察输出,找到类似
[armeabi] Compile thumb : testjni <= libtestjni.c
10.在使用到jni方法的Activity中,添加如下内容.注意loadLibrary中的名字要和console中Compile thumb输出的一直
static { System.loadLibrary("testjni"); }
11.运行Android项目,如果能够成功弹出tost提示,则表示jni调用成功了
Tips
1.JNI使用的方法名与Activity中使用的对应规则
com.example.testjni.Activity.sayHello() == Java_com_example_testjni.Activity_sayHello()