首先为什么要用JNI呢?
因为Android平台的独特性,别人拿到apk后,可以进行反编译,可以看到你代码中的一些重要的内容,比如秘钥等.
虽然说可以通过混淆来做到代码不易读,但是字符串等常量是不能被混淆的.
知道JNI下生成的so文件被反编译,获取的难度就大了很多.决定把保密的东西放在底层中,然后通过JNI访问它.
下面说说如何使用JNI:
- 下载NDK,这个不知道的可以百度或者google查询下.
- 使用NDK,也即是编写C,C++的代码,需要AndroidStudio来支持
- 配置 ndk.dir
在 local.properties 添加如下配置:
sdk.dir=/path/to/android-sdk
ndk.dir=/path/to/android-ndk
4.AS中可以通过两种方式可以实现
5. 通过设置gradle.properties中设置android.useDeprecatedNdk=true
,然后在App中的build.gradle中设置android{} ` ndk{
moduleName “NdkJniDemo” //生成的so名字
ldLibs “log”, “z”, “m” //添加依赖库文件,因为有log打印等
abiFilters “armeabi”, “armeabi-v7a”, “x86” //输出指定三种abi体系结构下的so库。目前可有可无。
}
具体参考:这里写链接内容
6. 可以通过官网指导即可
7,官网中遇到的问题
不可以定义多个JNI函数,原因是因为cpp文件定义的函数没有被extern “C”包含,这个折磨了我很久,作为记录留存.