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 Android studio中使用sqlcipher安卓7.0中.so文件加载失败问题。_第1张图片 3.5.7 Android studio中使用sqlcipher安卓7.0中.so文件加载失败问题。_第2张图片

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

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

你可能感兴趣的:(Android studio中使用sqlcipher安卓7.0中.so文件加载失败问题。)