2 votes

Prendre un exemple d'application et ajouter SQLCipher ne fonctionne pas

Je suis actuellement les tutoriels de Mark Murphys sur SQLite Android. Je suis tombé sur SQLCihper et sa capacité à rendre les données illisibles lorsqu'elles sont retirées d'un appareil. J'ai créé mon propre exemple d'application, et la base de données et l'activité principale fonctionnent parfaitement. Je suis capable d'extraire la base de données de l'émulateur et de lire le contenu de la base de données à l'aide de Navigateur SQLite . J'ai ensuite suivi les instructions "simples" d'une autre personne. stackoverflow mais j'obtiens des erreurs.

Voici mon onCreate dans mon MainActivity dans mon exemple d'application :

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

Là encore, le code ci-dessus fonctionne correctement.

Ensuite, j'ai essayé d'intégrer mon application d'exemple avec SQLCipher :

  1. Copié le fichier icudt46l.zip dans /assets
  2. Copie de trois fichiers .so dans /armeabi
  3. Copie de trois fichiers .so dans /x86
  4. Copie de trois jarres dans /libs
  5. J'ai modifié mes importations dans ma classe DBHelper pour utiliser l'API de SQLCipher.
  6. Ajout d'un paramètre à la fonction getReadableDatabase() ;

Mon code onCreate de MainActivity ressemble maintenant à ceci :

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

Le logcat :

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)

0voto

Billy Gray Points 897

On dirait que vous avez tout réglé dans les commentaires de la question, mais pour référence et pour toute autre personne, nous avons un tutoriel d'intégration pour SQLCipher et les projets Android disponible ici, qui contient la partie loadLibs ;-)

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

Comme le suggère @CommonsWare, tout le monde est invité à poser des questions à la liste de diffusion des utilisateurs de SQLCipher :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X