android studio下的第一个jni项目
先配置ndk目录,百度即可,获取目录路径,下面要用到
1.新建一个项目,包名为com.app.myjni
2.在main下建立一个与java平级目录jni
3.在jni目录新建一个.C文件,取名(包名+文件名)com_app_myjni_Test,内容为:
#include <com_app_myjni_Test.h>
JNIEXPORT jstring JNICALL Java_com_app_myjni_Test_getName(JNIEnv * env, jobject jObj){
jstring str = (*env)->NewStringUTF(env, "HelloWorld from JNI !");
return str;
}
4.在jni目录新建一个.h头文件,取名(包名+文件名)com_app_myjni_Test,内容为:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
#ifndef _Included_com_app_myjni_Test
#define _Included_com_app_myjni_Test
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:
* Method: getName
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_app_myjni_Test_getName
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
(3、4步骤新建也可以合成一个步骤,在新建.c文件的弹框里勾选Create an associated header即可)
5.找到项目的local.properties文件,最后的SDK.dir=你的sdk路径这行下面添加一行
ndk.dir=D\:\\android-ndk-r10(这个路径是我的)
6.在app目录下的build.gradle里的defaultConfig里面添加ndk
defaultConfig {
ndk {
moduleName "Test"//(生成的so名称,调用的时候用到)
abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。目前可有可无。
}
}
7.新建一个Test类,内容:
public class Test {
static {
System.loadLibrary("Test");//
}
public native String getName();
}
8.找到项目的gradle.properties,在末尾添加android.useDeprecatedNdk=true
9.跑一下,我的报错:
Error:Execution failed for task ':app:compileDebugNdk'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'D:\android-ndk-r10\ndk-build.cmd'' finished with non-zero exit value 2
这是NDK在Windows下一个bug,当只编译一个单一文件时出现,解决办法就是再添加一个空的文件就行了
于是在jni文件夹随便添加一个caca.c文件
10.再跑一次,报找不到so库的错误,clean一下再跑就OK了
http://blog.csdn.net/yanbober/article/details/45309049