一、背景
最近项目中网络请求用到了jni调用c++代码来实现加密的功能,做的过程中踩了一些坑,特此祭奠一下
二、过程
与eclipse中jni略有不同,as中需要在本地和gradle中做一下自己的配置
1.在项目gradle.properties目录中加入
Android.useDeprecatedNdk=true
解决本地ndk版本过低而不能正常编译的问题
2.在项目目录下的gradle中添加如下(android{}里边)
sourceSets {
main {
jniLibs.srcDirs 'src/main/obj/local'
jni.srcDirs=[]
}
}
jniLibs.srcDirs指定生成的so文件路径
jni.srcDirs解决ndk本地不能正常构建的问题
3.可以使用jdk工具自动编译.class生成不同处理器下so文件
在控制台进入app包的根目录下执行javah *.*.*.+ 命令(*代表文件夹,+代表写有native的类名)
即可生成如下图所示的.h文件
4.sha256加密(非对称加密)
原理:把要传递的参数,加入时间戳等内容,进行规则排序,然后进行sha256加密(本地需要一个私钥),这些操作都是
用c++代码实现的安全级别比较高
三、小结
现在开发不太忙了,慢慢把之前的东西消化消化,沉淀一下