前言
ndk是android学习的比修之路,提高性能,so加密等,以及so移植等
配置
- 下载NDK
- local.properties 添加以下
ndk.dir=/Users/huangb/Library/Android/sdk/ndk-bundle
- gradle.properties 添加如下
android.useDeprecatedNdk=true
(ps:3.0以后 android.deprecatedNdkCompileLease=1511832698813)
- 以及在module的gradle中的defaultConfig添加
ndk{
moduleName "forkApp" //生成的so名字
ldLibs "log" //Log打印
abiFilters "armeabi", "armeabi-v7a" //输出指定三种abi体系结构下的so库。目前可有可无。
}
- 注意编译的SDK的环境最好是最新的
过程
- 新建一个class如下 这是需要使用的方法
public class JniDemo {
public native String getHelloWordText(String message);
}
- 生成JniDemo的class文件,在终端中输入
javac JniDemo.java
- 生成.h头文件,切换到main/java路径在终端输入
javah com.example.ndk.JniDemo
- 生成jni文件夹
new -> Folder -> JNI Folder - 把生成的.h头文件复制到jni文件夹下
- 新建一个.c文件写入我们要处理的方法
#include "com_example_ndk_JniDemo.h"
#include <jni.h>
JNIEXPORT jstring JNICALL
Java_com_example_ndk_JniDemo_getHelloWordText
(JNIEnv *env, jobject orgin, jstring str) {
//新建一个string对象
jstring encrypt;
//把string转为char
char *cstr = (*env)->GetStringUTFChars(env, str, 0);
// 把char转为jstring拼接 these
encrypt = (*env)->NewStringUTF(env, strcat (cstr,"these"));
return encrypt;
}
- 构建项目生成so Rebuild Project,生成路径如下
项目目录
方法使用
结语
如果有什么问题以及有什么不对可以留言我会尽快回复哟