天天看點

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:[email protected]’

或者

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檔案加載失敗問題。 重點在這:

3.5.7

Android studio中使用sqlcipher安卓7.0中.so檔案加載失敗問題。 重點在這:

2:7.0更對通路路徑做了限制

先來看下3.3.1的加載.so檔案的方法:

Android studio中使用sqlcipher安卓7.0中.so檔案加載失敗問題。 重點在這:

然後看下3.5.7的:

Android studio中使用sqlcipher安卓7.0中.so檔案加載失敗問題。 重點在這:

有沒有發現什麼問題?

對。其實原理都是一樣的都是一樣的。都是System.loadLobrary(”“);

是以隻要去更新下包就可以了。。 如果不是gradle模式 可以直接去https://github.com/sqlcipher/android-database-sqlcipher下載下傳最新的包,來替換原來的。

還有一點,記得如果使用了混淆要在proguard-rules中加

-keep class net.sqlcipher.* {;}

-keep class net.sqlcipher.database.* {;}

千萬别忘了。