gpt4 book ai didi

java - 以示例应用程序为例并添加 SQLCipher 不起作用

转载 作者:行者123 更新时间:2023-11-29 09:01:26 26 4
gpt4 key购买 nike

我目前正在关注 Mark Murphys 的 SQLite android 教程。我偶然发现了 SQLCihper,当它从设备上取下时,它能够使数据不可读。我制作了自己的示例应用程序,DB 和 MainActivity 完美运行。我能够将数据库从模拟器中拉出,并且能够使用 SQLite browser 读取数据库的内容。 .然后我按照另一个 stackoverflow 的这些“简单”说明进行操作问题,但我收到错误。

这是我的示例应用程序中 MainActivity 中的 onCreate:

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

同样,上面的代码工作正常。

接下来我尝试将我的示例应用程序与 SQLCipher 集成:

  1. 将 icudt46l.zip 复制到/assets
  2. 复制三个.so文件到/armeabi
  3. 将三个 .so 文件复制到/x86
  4. 将三个 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)

最佳答案

看起来你们已经在问题的评论中对所有内容进行了排序,但为了引用和其他任何人,我们在此处提供了 SQLCipher 和 Android 项目的集成教程,其中包含 loadLibs 位;-)

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

正如@CommonsWare 所建议的,也欢迎所有人向 SQLCipher 用户邮件列表提出问题:

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

关于java - 以示例应用程序为例并添加 SQLCipher 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17223556/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com