1,下载NDK
百度云一个linux 64位的版本https://pan.baidu.com/s/1qXFTpLy
2,新建工程
3,导入ndk
右击工程->open Module Setting->SDK Locationi导入ndk
在local.properties文件中会出现 ndk.dir=/home/user/Downloads/android-ndk-r11b
4.build.gradle(module.app)设置(com/example/user/ndkdemo/是包名)
android {
....
defaultConfig {
...
ndk {
moduleName "helloNDK"
}
}
}
5.新建NdkJniUtils
此类定义c++接口(native方法)
public class NdkJniUtils {
static {
System.loadLibrary("helloNDK"); //defaultConfig.ndk.moduleName
}
public native String getCLanguageString();
}
6.javah命令通过class生成.h
Terminal下执行
cd /JNIDemo/app/src/main/java //到工程目录下
javah -jni com.example.user.jnidemo.NdkJniUtils //接口类
会在java下生成com_example_user_jnidemo_NdkJniUtils.h头文件剪切到jni包内
内容如下
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_user_jnidemo_NdkJniUtils */
#ifndef _Included_com_example_user_jnidemo_NdkJniUtils
#define _Included_com_example_user_jnidemo_NdkJniUtils
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_example_user_jnidemo_NdkJniUtils
* Method: getCLanguageString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_user_jnidemo_NdkJniUtils_getCLanguageString
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
7.创建.c文件
引入头文件
实现头文件的接口如下
#include "com_example_user_jnidemo_NdkJniUtils.h"
/*
* Class: com_example_user_ndkdemo_NdkJniUtils
* Method: getCLanguageString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_user_ndkdemo_NdkJniUtils_getCLanguageString
(JNIEnv *env, jobject obj){
//执行c代码
return (*env)->NewStringUTF(env,"This just a test for Android Studio NDK JNI developer!");
}
8.配置jni路径
build.gradle(module.app)设置
sourceSets.main {
jni.srcDirs 'src/main/java/com/example/user/jnidemo/jni'
}
9.页面调用
mTextView = (TextView) this.findViewById(R.id.test);
NdkJniUtils jni = new NdkJniUtils();
mTextView.setText(jni.getCLanguageString());