1、配置项目NDK的路径
在项目Project Structure中设置 Android NDK Location
2、创建类
在项目里src/main/java中创建类 NDKTest.java
3、native
在此类里创建一个native方法,用来获取一个字符串
public class NDKTest {
public static native String getString();
}
4、创建文件夹JNI
在src/main下创建文件夹jni,用来存放C/C++文件等
5、生成方法
在android studio 的Terminal中,
先到src/main/java路径下 输入: cd /src/main/java
再生成.h文件 输入:javah -jni com.wj.change.NDKTest
最后会生成文件
com_wj_change_NDKTest.h
里面会自动生成一个方法名:
/*
* Class: com_wj_change_NDKTest
* Method: getString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_wj_change_NDKTest_getString
(JNIEnv *, jclass);
6、创建C++文件
创建C/C++文件 com_wj_change_NDKTest.cpp
备注:文件名不必保持一致,但保持一致能更直观,便于理解等
输入代码:
#include "com_wj_change_NDKTest.h"
JNIEXPORT jstring JNICALL Java_com_wj_change_NDKTest_getString (JNIEnv *env, jclass jls)
{
return (*env).NewStringUTF("23333333333");
}
备注:方法名可以抄.h文件中的方法名。此方法能获取到一段字符串,即
23333333333
7、创建Android.mk文件
在jni文件夹下,创建文件 Android.mk,内容为:
LOCAL_PATH :=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=A
LOCAL_SRC_FILES=com_wj_change_NDKTest.cpp
include $(BUILD_SHARED_LIBRARY)
备注:
LOCAL_MODULE为库的名称----A
LOCAL_SRC_FILES为想要编译的文件
8、创建文件Application.mk
在jni文件夹下,创建文件Application.mk,内容为:
APP_MODULES := A
APP_ABI := all
备注:
APP_MODULES 要和Android中的
LOCAL_MODULE保持一致 都是A
9、添加配置
在app/build.gradle中,defaultConfig内添加:
ndk {
moduleName "A"
}
sourceSets.main {
jni.srcDirs = []
jniLibs.srcDir "src/main/libs"
}
备注:
moduleName--仍然和前面保持一致
jniLibs
.
srcDir
"src/main/libs" ---jni文件所在位置
10、设置使用
在项目 gradle/wrapper/gradle-wrapper.properties文件的最后一行添加:
android.useDeprecatedNdk=true
备注:注意检查SDK和NDK路径。
11、build project
12、在Terminal中
先回溯到main文件夹下 输入:cd ..
然后build出.so文件 输入:ndk-build
最后可以看到再libs下会生成七种.so文件~
*******************************************华丽丽分割线*****************************************
下面说一下如何使用:
1、在NDKTest.java中引用库文件
public class NDKTest {
static{
System.loadLibrary("A");
}
public static native String getString();
}
2、在MainActivity中,使用,
((TextView)findViewById(R.id.tv)).setText(NDKTest.getString());
3、运行到手机之后,会看到界面中文本展示:23333333333