AndroidStudioでSQLiteを暗号化するSQLCipherを使う

AndroidStudioでSQLiteを暗号化するSQLCipherを使う手順の忘備録。
SQLCipherのOpen SourceのページからSQLCipher For Androidをダウンロードします。

ダウンロードしたSQLCipher+for+Android+v3.1.0.zipを展開します。展開すると次のようになっています。これらをAndroid Studioに適切にコピーすればbuild.gradleを編集しなくてもSQLCipherが使えるようになります。

 
ではAndroid Studioにコピーしていきましょう。
src > main の中に「assets」フォルダを作成します。
assetsの中身をAndroid Studioのassetsフォルダ内にコピーします。
libsの中身のうち、jarファイルだけをapp > libs フォルダの中にコピーします。

commons-codec.jar
guava-r09.jar
sqlcipher.jar

src > main の中に「jniLibs」フォルダを作成します。
libsの中身のうち、フォルダをsrc > main > jniLibs フォルダの中にコピーします。

armeabi
armeabi-v7a
x86

コピーが完了すると次のようになっているはずです。

 
これだけです。以上でSQLCipherの環境が整いました。
では早速動作テストを行ってみましょう。コーディングサンプルにあるHelloSQLCipherActivityを実装してみます。
[java]
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import net.sqlcipher.database.SQLiteDatabase;</code>
import java.io.File;
public class HelloSQLCipherActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hello_sqlcipher);
InitializeSQLCipher();
}
private void InitializeSQLCipher() {
SQLiteDatabase.loadLibs(this);
File databaseFile = getDatabasePath("demo.db");
databaseFile.mkdirs();
databaseFile.delete();
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFile, "test123", null);
database.execSQL("create table t1(a, b)");
database.execSQL("insert into t1(a, b) values(?, ?)", new Object[]{"one for the money",
"two for the show"});
}
….
[/java]
実行するとアプリケーションのフォルダにデータベースが作成されています。

/demo/demo/アプリケーションパッケージ名/databese/demo.db

実際にsqliteのデータベースが暗号化され、開けないことを確認します。
SQLite Database Browser で開いたところ、Invalid file format.と表示され、開けないことがわかります。

以上でSQLCipherの動作テストは完了です。
参考:AndroidStudioでSQLiteを暗号化するSQLCipherを使う

上部へスクロール