微信 WCDB for Android 的接入

接入與遷移android

github.com/Tencent/wcd…git

接入與遷移
接入與遷移

接入 WCDB

Android 項目接入 WCDB,能夠選擇經過 Maven 接入或經過 AAR 包接入。github

經過 Maven 接入

對於大部分開發者,推薦使用 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

    遷移到 WCDB
    遷移到 WCDB

  • 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 Android 遷移

若是你以前使用的是 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。

WCDB歡迎你
WCDB歡迎你

注意若是以前調用了 SQLCipher 的 SQLiteDatabase.loadLibs(...),能夠將其刪去,WCDB 在第一次引用時會自動加載動態庫。

相信本身,沒有作不到的,只有想不到的

若是你以爲此文對您有所幫助,歡迎入羣 QQ交流羣 :232203809
微信公衆號:終端研發部

技術+職場
技術+職場

(這裏 學到的不單單是技術)

相關文章
相關標籤/搜索