Android 數據庫加密 android-database-sqlcipher 開源版本編譯過程

轉載請以連接形式標明出處: 本文出自:103style的博客html

build android-database-sqlcipherjava

介紹

android-database-sqlcipher 用於 Android SQLite 數據庫的加密。 維護者提供了 收費開源 兩個版本。 sqlcipher開發維護者官網www.zetetic.net/sqlcipher/ github開源項目地址android-database-sqlcipherlinux

如下是筆者基於 開源版本 4.1.3 版本 編譯以後生成文件的項目地址: android-database-sqlcipher 或者直接點擊下載 4.1.3版本對應的aar包下載連接android

使用方法

官方介紹:https://www.zetetic.net/sqlcipher/sqlcipher-for-android/git

  • 添加 aar 到 工程 libs 目錄下,而後添加如下
android {
   ...
   //此處看實際工程是否配置了統一的aar目錄
    repositories {
        flatDir {
            dirs 'libs'
        }
    }
    ...
}

dependencies {
    ...
    api(name: "android-database-sqlcipher-4.1.3", ext: 'aar')
}
複製代碼
  • 在初始化數據庫的時候先調用 SQLiteDatabase.loadLibs(context);
  • import net.sqlcipher.database.SQLiteDatabase 替換 import android.database.sqlite.SQLiteDatabase
  • import net.sqlcipher.database.SQLiteOpenHelper 替換 import android.database.sqlite.SQLiteOpenHelper
  • 可參考 Demo

編譯方法

  • 官方4.1.3版本 介紹的編譯方法感受太簡潔了,新手錶示很難受github

    Building
    In order to build android-database-sqlcipher from source you will need both the Android SDK as well as Android NDK. 
    With different Android SDK installation approaches available. We currently recommend using Android NDK version r15c. 
    To complete the make command, the ANDROID_NDK_ROOT environment variable must be defined which should point to your NDK root. 
    Once you have cloned the repo, change directory into the root of the repository and run the following commands:
     # this only needs to be done once
     make init
     # to build the source for debug:
     make build-debug
     # or for a release build:
     make build-release
    複製代碼
  • 筆者編程的過程 因爲當前的版本 不支持windows下的編譯,因此筆者只能走 Linux 環境了sql

    • 安裝Ubuntu 16.04
    • 安裝 Android Studio
    • 更新jdk爲 openjdk 1.8.0 版本, 1.7.0的版本會報錯
      1.按Ctrl + Alt + T打開終端。打開後,運行下面的命令來添加PPA:
      sudo add-apt-repository ppa:openjdk-r/ppa
      2.以後,更新系統包緩存並安裝OpenJDK 8: 
      sudo apt-get update
      sudo apt-get install openjdk-8-jdk
      3.若是您的系統上安裝了多個Java版本。運行下面的命令設置默認的Java:
      sudo update-alternatives --config java
      鍵入一個數字以選擇Java版本。
      設置默認的java版本
      並經過運行如下命令設置默認Java編譯器:
      sudo update-alternatives --config javac 
      4.最後經過運行如下步驟查看當前的Java版本:
      java -version
      它輸出這樣的東西:
      openjdk版本「1.8.0_01-internal」
      複製代碼
    • 下載 Android Ndk r15cLinux版本 r15c上面官方文檔推薦的版本
    • 配置 sdkndk目錄,以及添加ANDROID_NDK_ROOTpath ,參考 Ubuntu profile,不然會報找不到ANDROID_NDK_ROOT 以及 A problem occurred starting process 'command 'ndk-build''的錯誤。
    export ANDROID_NDK_ROOT=/home/xiaoke/android-ndk-r15c
      export ANDROID_HOME=/home/xiaoke/Android/sdk
      export PATH=$PATH:$ANDROID_NDK_ROOT 
    複製代碼
    • 安裝 git , clone 項目 android-database-sqlcipher
    • Android Studio 打開工程,安裝工程 編譯的對應的sdk工具版本, 若是已安裝對應sdk版本,會出現編譯報錯,沒事,這是正常的,而後執行下一步就好。
    • 定位到項目目錄,執行如下編譯命令
    1. make init
     2. make clean
     3. make build-release
    複製代碼
    • release版本混淆配置
      -keep class net.sqlcipher.** { *; }
      -keep class net.sqlcipher.database.* { *; }
      複製代碼

運行報錯問題

  • release版本運行報錯問題 No pending exception expected: java.lang.NoSuchFieldError 這是由於沒有添加如下混淆配置致使的
    -keep class net.sqlcipher.** { *; }
    -keep class net.sqlcipher.database.* { *; }
    複製代碼

若是以爲不錯的話,請幫忙點個讚唄。數據庫

以上編程


掃描下面的二維碼,關注個人公衆號 Android1024, 點關注,不迷路。 ubuntu

Android1024
相關文章
相關標籤/搜索