Android studio中使用sqlcipher安卓7.0中.so文件加载失败问题。

最近做项目的时候,甲方使用绿盟对APK进行了扫描。发现数据库存在安全漏洞,网上查阅众多资料,最后选用了sqlcipher来进行数据库加密。
关于sqlcipher的使用具体请参考[http://blog.csdn.net/wshngyf/article/details/51112664][1]或者http://www.cnblogs.com/whoislcj/archive/2016/07/30/5511522.html
这里就不在叙述用法了,网上用法已经很多了。

重点在这:

  使用build.gradle中引用sqlcipher包的时候,如果用的sqlcipher包版本不对。安卓7.0中可能会报找不到.so文件。我查阅了好多资料,要不说是android7.0的机子好多都是64位的,有的包里没有amr64文件夹中或者其中没有.so文件。还有一种说法是7.0更对访问路径做了限制。ps:问题后边再说。

解决方法:
1:如果你是studio中使用的gradle引用的包
例如:使用的是 compile ‘net.zetetic:android-database-sqlcipher:3.3.1’
那么你只要将包改成:
compile ‘net.zetetic:android-database-sqlcipher:3.5.7@aar’
或者
compile ‘net.zetetic:android-database-sqlcipher:3.5.7’
问题就解决了,那么 现在问题来了。
到底是什么问题造成了sqlcipher在7.0有的包不能用。
1:android7.0的机子好多都是64位的?
查看了3.3.1和3.5.7两个包的结构发现。一个有64一个没有64.可能问题就出现这了。ps:这是对于低版本和高版本的比较
3.3.1 这里写图片描述 3.5.7 3.5.7的.so文件存放目录

2:7.0更对访问路径做了限制
先来看下3.3.1的加载.so文件的方法:
这里写图片描述
然后看下3.5.7的:
这里写图片描述
有没有发现什么问题?
对。其实原理都是一样的都是一样的。都是System.loadLobrary(”“);
所以只要去升级下包就可以了。。 如果不是gradle模式 可以直接去https://github.com/sqlcipher/android-database-sqlcipher下载最新的包,来替换原来的。

还有一点,记得如果使用了混淆要在proguard-rules中加
-keep class net.sqlcipher.* {;}
-keep class net.sqlcipher.database.* {;}
千万别忘了。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值