前言
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,生成路径如下
 

117FB902-1DAB-4613-9427-D1B69219DBCC.png
项目目录

C87AB7E0-5AFC-4743-A671-EC957F46C9B6.png
方法使用

0063CF84-58B8-4923-A72F-739D413AE587.png
结语
如果有什么问题以及有什么不对可以留言我会尽快回复哟