接入與遷移android
Android 項目接入 WCDB,能夠選擇經過 Maven 接入或經過 AAR 包接入。github
對於大部分開發者,推薦使用 Maven 接入 WCDB,在 APP 模塊的 build.gradle 下添加 WCDB 依賴便可sql
dependencies {
// 修改"1.0.0"爲實際引用的版本
compile 'com.tencent.wcdb:wcdb-android:1.0.0'
}複製代碼
經過 AAR 包接入數據庫
你也能夠從發佈頁面下載 AAR 包,而後導入到工程來接入 WCDB。bash
在 Android Studio 選擇 File -> New -> New Module... -> Import JAR/AAR Package
在 File -> Project Structure... 或編輯 APP 模塊的 build.gradle 將 WCDB 加入依賴項:
dependencies {微信
compile project(':wcdb')複製代碼
}架構
選擇接入的 CPU 架構框架
WCDB 包含 armeabi, armeabi-v7a, arm64-v8a, x86 四種架構的動態庫,若是你的應用但願只接入 其中一種或幾種架構,能夠在 APP 模塊的 build.gradle 里加入如下代碼來選擇要接入的架構:maven
android {
defaultConfig {
ndk {
// 只接入 armeabi-v7a 和 x86 架構
abiFilters 'armeabi-v7a', 'x86'
}
}
}複製代碼
WCDB Android 使用與 Android SDK SQLite 框架幾乎同樣的接口
若是你的 APP 以前使用 Android SDK 的數據庫接口,只須要將 import 裏的 android.database. 改成 com.tencent.wcdb.,以及 android.database.sqlite. 改成 com.tencent.wcdb.database. 便可。
若以前使用 SQLCipher Android Binding,也須要對應修改 import。
加密與非加密數據庫差別只有打開時,打開後後續操做與 Android SDK 一致。具體請參考 WCDB API 文檔。
若是你以前使用的是非加密數據庫,接入後想遷移到加密數據庫並保留原來的數據,你須要使用 SQL 函數 sqlcipher_export() 進行遷移。
詳情請見 sample-encryptdb 示例,它示範瞭如何使用 SQLiteOpenHelper 實現數據從非加密往加密遷移和 Schema 升級。
注意: WCDB 對 sqlcipher_export() 函數作了擴展,本來只接受一個參數爲導出到哪一個 ATTACHED DB, 如今能夠接受第二個參數指定從哪一個 DB 導出。所以能夠反過來實現導入:
ATTACH 'old_database' AS old;
SELECT sqlcipher_export('main', 'old'); -- 從 'old' 導入到 'main'
DETACH old;複製代碼
若是你以前使用的是 SQLCipher 數據庫,但願遷移到 WCDB 庫並沿用原數據庫文件,須要在代碼裏作一點改動。
String passphrase = "passphrase";
SQLiteCipherSpec cipher = new SQLiteCipherSpec() // 加密描述對象
.setPageSize(1024) // SQLCipher 默認 Page size 爲 1024
.setSQLCipherVersion(3); // 1,2,3 分別對應 1.x, 2.x, 3.x 建立的 SQLCipher 數據庫
// 如之前使用過其餘PRAGMA,可添加其餘選項
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(
"path/to/database", // DB 路徑
passphrase.getBytes(), // WCDB 密碼參數類型爲 byte[]
cipher, // 上面建立的加密描述對象
null, // CursorFactory
null // DatabaseErrorHandler
// SQLiteDatabaseHook 參數去掉了,在cipher裏指定參數可達到一樣目的
);複製代碼
關鍵改動點爲 密碼轉換爲byte[] 以及 傳入SQLiteCipherSpec描述加密方式, 加密方式必須和以前的 SQLCipher 設置一致,不然會報錯誤,建議先行測試再上線。
SQLCipher 密碼與加密方式錯誤可能會致使 SQLite 框架認爲其損壞從而觸發 DatabaseErrorHandler, 默認實現會重命名或刪除損壞 DB,若是此行爲不是你但願的,請務必自定義 DatabaseErrorHandler。
注意若是以前調用了 SQLCipher 的 SQLiteDatabase.loadLibs(...),能夠將其刪去,WCDB 在第一次引用時會自動加載動態庫。
若是你以爲此文對您有所幫助,歡迎入羣 QQ交流羣 :232203809
微信公衆號:終端研發部
(這裏 學到的不單單是技術)