スマートフォン・ジン | Smartphone-Zine

引っ越し先→ https://smartphone-zine.com/

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を使う