2

私は現在、Mark Murphy の SQLite android チュートリアルに従っています。私は SQLCihper に出くわしました。これは、デバイスから取り外されたときにデータを読み取れないようにする機能です。独自のサンプル アプリケーションを作成しましたが、DB と MainActivity は完全に機能します。エミュレーターからデータベースを引き出すことができ、SQLite ブラウザーを使用してデータベースの内容を読み取ることができます。次に、別のスタックオーバーフローの質問からこれらの「簡単な」指示に従いましたが、エラーが発生しています。

サンプル アプリの MainActivity の onCreate は次のとおりです。

super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DBHelper db = new DBHelper(this);
db.getReadableDatabase();

繰り返しますが、上記のコードは正常に動作します。

次に、サンプル アプリを SQLCipher と統合しようとしました。

  1. icudt46l.zip を /assets にコピーしました
  2. 3 つの .so ファイルを /armeabi にコピーしました
  3. 3 つの .so ファイルを /x86 にコピーしました
  4. 3 つの jar を /libs にコピーしました
  5. DBHelper クラスのインポートを SQLCipher の API を使用するように変更しました
  6. getReadableDatabase(); にパラメーターを追加しました。

したがって、私の MainActivity onCreate コードは次のようになります。

super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DBHelper db = new DBHelper(this);
db.getReadableDatabase("sekrit");

ログキャット:

06-20 20:50:33.178: E/AndroidRuntime(24805): FATAL EXCEPTION: main
06-20 20:50:33.178: E/AndroidRuntime(24805): java.lang.UnsatisfiedLinkError: Native method not found: net.sqlcipher.database.SQLiteDatabase.dbopen:(Ljava/lang/String;I)V
06-20 20:50:33.178: E/AndroidRuntime(24805):    at net.sqlcipher.database.SQLiteDatabase.dbopen(Native Method)
06-20 20:50:33.178: E/AndroidRuntime(24805):    at net.sqlcipher.database.SQLiteDatabase.<init>(SQLiteDatabase.java:1950)
06-20 20:50:33.178: E/AndroidRuntime(24805):    at net.sqlcipher.database.SQLiteDatabase.openDatabase(SQLiteDatabase.java:900)
06-20 20:50:33.178: E/AndroidRuntime(24805):    at net.sqlcipher.database.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:943)
06-20 20:50:33.178: E/AndroidRuntime(24805):    at net.sqlcipher.database.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:107)
06-20 20:50:33.178: E/AndroidRuntime(24805):    at net.sqlcipher.database.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:173)
06-20 20:50:33.178: E/AndroidRuntime(24805):    at com.example.testsqlcipher.MainActivity.onCreate(MainActivity.java:65)
06-20 20:50:33.178: E/AndroidRuntime(24805):    at android.app.Activity.performCreate(Activity.java:5104)
06-20 20:50:33.178: E/AndroidRuntime(24805):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
06-20 20:50:33.178: E/AndroidRuntime(24805):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
06-20 20:50:33.178: E/AndroidRuntime(24805):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
06-20 20:50:33.178: E/AndroidRuntime(24805):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
06-20 20:50:33.178: E/AndroidRuntime(24805):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
06-20 20:50:33.178: E/AndroidRuntime(24805):    at android.os.Handler.dispatchMessage(Handler.java:99)
06-20 20:50:33.178: E/AndroidRuntime(24805):    at android.os.Looper.loop(Looper.java:137)
06-20 20:50:33.178: E/AndroidRuntime(24805):    at android.app.ActivityThread.main(ActivityThread.java:5041)
06-20 20:50:33.178: E/AndroidRuntime(24805):    at java.lang.reflect.Method.invokeNative(Native Method)
06-20 20:50:33.178: E/AndroidRuntime(24805):    at java.lang.reflect.Method.invoke(Method.java:511)
06-20 20:50:33.178: E/AndroidRuntime(24805):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-20 20:50:33.178: E/AndroidRuntime(24805):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-20 20:50:33.178: E/AndroidRuntime(24805):    at dalvik.system.NativeStart.main(Native Method)
4

1 に答える 1

0

質問へのコメントですべてを整理したようですが、参照用および他の人のために、SQLCipher と Android プロジェクトの統合チュートリアルをここで入手できます。これには loadLibs ビットが含まれています ;-)

http://sqlcipher.net/sqlcipher-for-android/

@CommonsWare が示唆するように、SQLCipher ユーザーのメーリング リストにも質問を投稿できます。

http://groups.google.com/group/sqlcipher

于 2013-06-26T19:05:20.563 に答える