android studio 通过ndk创建so文件存储**

项目apk经过安全检测后,提出**硬代码,就是说**直接被当成常量写在java文件中了,建议把**写在so文件中,为了apk通过检测,只能把**写到so文件中,然后调用so文件去拿**,下面是具体过程:

1.安装ndk;

https://developer.android.google.cn/ndk/downloads/index.html

android studio 通过ndk创建so文件存储**

按照系统下载指定版本的安装包,然后一步一步安装就好。

2.android studio中创建app,然后给app配置ndk;

android studio 通过ndk创建so文件存储**

android studio 通过ndk创建so文件存储**

3.创建c/c++ 中对应的java类(定义c/c++中对应的方法):

android studio 通过ndk创建so文件存储**

4.生成 .h文件:

代码编译下,在 app - build - intermediates - classes - debug - com - 上个步骤创建的java类是否在对应的目录下;

android studio 通过ndk创建so文件存储**

开始生成 .h 文件:在android studio的Terminal窗口去执行命令,一般是把 .h 文件创建在main 目录下,所以执行命令到main目录下:

(1)通过dir查看工程下的目录结构:

android studio 通过ndk创建so文件存储**

(2)然后 cd 到指定的目录下,再dir 查看当前文件夹下的目录结构,依次执行下去,最后跳转到 main目录下:

android studio 通过ndk创建so文件存储**

(3)执行 javah -d jni -classpath 命令,生成对应的 .h文件;

android studio 通过ndk创建so文件存储**

命令执行完之后,在main目录下会看到 jni目录:

android studio 通过ndk创建so文件存储**

5.在jni目录下创建对应的cpp文件(cpp的文件名称就是System.loadLibrary("jniutil")中的jniutil ):

android studio 通过ndk创建so文件存储**

在 cpp文件中用c++ 写对应的逻辑,我上面的直接就返回了固定的值

6.在build.gradle中配置ndk:

android studio 通过ndk创建so文件存储**

7.调用很简单,直接new JniUtils ,然后调用对应的方法即可,运行app之后,可以在 build - intermediates - ndk - debug - lib 下找到对应平台下的so 包:

android studio 通过ndk创建so文件存储**

8.最后就可以把so包拿出来调用了。