前面说了so文件可以大大减少数据被泄露的情况,但这得是有前提条件。
因为正常的so文件,别人是可以拿到后可以直接在项目中使用的。
因为正常的so文件,别人是可以拿到后可以直接在项目中使用的。
那有什么方式可以增加难度,让别人需要一定复杂操作才能使用该so文件库呢?
下面就为你一一讲解本节的 Android-NDK-之so文件签名校验
实现原理
因为c++也是可以获取apk应用签名的,于是这里就可以通过获取的签名来匹配c++本地存放的签名,如果匹配相同则可以继续正常走需要走的逻辑代码。
源码解析
创建需要的java代码
例如:我这里需要一个getKey方法。这里需要有两个参数:
context --> 用于获取签名需要的上下文
type --> 告诉c我获取需要的key对应的类型值
返回值:
String -> 对应的key值
|
|
实现c语言对应的方法
javah 生成头文件
這里可以参考Android-NDK-之Hello-World来完成
(注:不会的先别急着点以上链接)
重点强调下这里有坑,因为直接通过javah 将KeyUtil生成.h文件会报如下错误)
|
|
解决方案,先将Context修改为Object类型,如下:
|
|
然后再进行javah 生成.h文件后,再改回为Context类型就可以了。
创建KeyUtil.cpp 并实现代码
继上面java代码编写cpp代码:
|
|
可根据需求自行修改以上代码。
so文件签名
获取正式项目的签名:
1.可以调用以下代码可以获取
|
|
2.利用第三方软件获取,如微信获取签名apk
修改cpp中RELEASE_SIGN值
修改cpp中RELEASE_SIGN值 为上面的签名值。
以上就完成所有so文件的编写代码的步骤了。
生成so文件正式项目使用
这里不再重复了,可参考Android-NDK-之Hello-World