Win7下安装
准备相关安装包
java环境:java官方网站下载jdk1.7(含)以上版本
Android SDK:下载或更新到最新,可以只下载几个关键的android版本,因为需要翻墙,下载办法参照《迅雷下载Android SDK》
Android NDK:官网下载,我下载的是android-ndk-r10d-windows-x86_64.exe,最好下载最新版本,直接执行解压。
Android Studio:android官网下载不包含sdk的exe文件,复制下载地址后可通过迅雷下载。
安装配置:
java:直接安装,增加环境变量JAVA_HOME和在Path里增加JAVA_HOME\bin
Android Studio:直接安装
启动Android Studio
1. 在安装目录下启动studio64.exe文件
2. 其中一步是指定SDK目录,指定后会出现更新的提示,可能需要翻墙后才能更新,我的电脑没翻墙也更新成功了。
新建Android项目
1. 新建一个android项目,注意包名,Android Studio自动生成的包名很奇怪。
工程放置的目录是在D:\team\and_prj\OneJni,工程包名com.jifeng.onejni
2. 新建两个java类,注意不能只建一个,如果只有一个,编译的步骤会报错,应该ndk的bug。java类内容如下
public class MathKit {
public static native int square(int num);
static {
System.loadLibrary("JniDemo");
}
}
public class StringKit {
static {
System.loadLibrary("JniDemo");
}
public static native String getStr(Stringstr);
}
3. 生成.h文件,放到jni目录
打开cmd,进入指定目录,运行命令如下
相同目录下会生成com_jifeng_onejni_MathKit.h和com_jifeng_onejni_StringKit.h文件
建立jni目录
拷贝之前的文件进去。
4. 编辑cpp文件
com_jifeng_onejni_MathKit.cpp
#include <com_jifeng_onejni_MathKit.h>
JNIEXPORT jint JNICALL Java_com_jifeng_onejni_MathKit_square
(JNIEnv *env, jclass cls, jint num) {
return num *num;
}
com_jifeng_onejni_StringKit.cpp(这个文件内容比较多,部分内容与本测试无关)
#include <jni.h>
#include <com_jifeng_onejni_StringKit.h>
#include <android/log.h>
#include <string.h>
#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "MainActivity", __VA_ARGS__))
#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "MainActivity", __VA_ARGS__))
JNIEXPORT jstring JNICALL Java_com_jifeng_onejni_StringKit_getStr(JNIEnv *env, jclass cls, jstring str){
const char* charStr = env->GetStringUTFChars(str, NULL);
LOGI("GetParam:%s", charStr);
jstring js = env->NewStringUTF("Hello World! I am native jni!大家好1234!");
return env->NewStringUTF(charStr);
}
5. 设置项目
设置根目录中的:local.properties
设置 APP 项目 build.gradle,添加NDK节点。
该设置是为了设置生成的Jni名称为:JniDemo
6. 测试
相关链接:
java官网jni文档
http://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/jniTOC.html
注意:
文件编码格式都要用UTF-8,不然输出中文时会产生乱码