1安卓android studio ,下载国内配置好代理服务器的安装包,安装成功后下载sdk和ndk,注意不要安装在有汉字的路径中
2 安装jdk,配置好jdk的环境,在path中添加 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%JAVA_HOME%\incloud;
3新建项目一个项目,在项目中创建一个class
public class JniUtils {
public static native String getStringFormC();
}
4然后clean project 再rebuild project 生成class文件,
这时候打开如下图的文件夹看是否生成了classes文件夹,没有生成请重新来过。
5再打开Terminal输入指令
cd app/build/intermediates/classes/debug
然后再输入指令
javah -jni com.wobiancao.ndkjnidemo.ndk.JniUtils
注意 这里javah -jni后面跟的是JniUtils类的全路径,如果javah报不存在之类的,是你的java环境没有配置好。
6这时候打开classes/debug下面的文件发现多了一个文件
com_wobiancao_ndkjnidemo_ndk_JniUtils.h
然后在src/main下新建文件夹jni,把生成的.h文件复制或者剪切到jni文件夹下面去,新建一个c类随便取一个名字,添加代码如下
#incloud“com_wobiancao_ndkjnidemo_ndk_JniUtils.h
”
JNIEXPORT jstring JNICALL Java_com_wobiancao_ndkjnidemo_ndk_JniUtils_getStringFormC (JNIEnv *env, jobject obj){ return (*env)->NewStringUTF(env,"这里是来自c的string");
7 按着提示做就行了 在gradle.properties文件末尾添加
android.useDeprecatedNdk=true
就ok啦然后在app文件下得build.gradle ->defaultConfig括号内添加如下代码
ndk { moduleName "NdkJniDemo" //生成的so名字 abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库,目前可有可无。
}
到了这一步重新build项目,发现已经没有变红了。接下来就是运用了,在JniUtils类里面添加如下代码
static { System.loadLibrary("NdkJniDemo");//之前在build.gradle里面设置的so名字,必须一致
}
注意我用的studio版本是2.0的低于这个版本可能会出问题下载地址:http://www.androiddevtools.cn/#java-dao-generate-tools