【问题标题】:Unsatisfied Link error while using SQLCipher library使用 SQLCipher 库时出现不满意的链接错误
【发布时间】:2011-12-29 12:27:29
【问题描述】:

我正在使用适用于 Android 的 SQLCipher 库来加密/解密数据库文件。我正在按照 API 中讨论的确切步骤来添加库。

但是当我运行项目时,我收到了 Unsatisfied link 错误...这里是 logcat...

11-15 13:12:08.482: ERROR/AndroidRuntime(340): java.lang.UnsatisfiedLinkError: dbopen
11-15 13:12:08.482: ERROR/AndroidRuntime(340):     at info.guardianproject.database.sqlcipher.SQLiteDatabase.dbopen(Native Method)
11-15 13:12:08.482: ERROR/AndroidRuntime(340):     at info.guardianproject.database.sqlcipher.SQLiteDatabase.<init>(SQLiteDatabase.java:1876)
11-15 13:12:08.482: ERROR/AndroidRuntime(340):     at info.guardianproject.database.sqlcipher.SQLiteDatabase.openDatabase(SQLiteDatabase.java:870)
11-15 13:12:08.482: ERROR/AndroidRuntime(340):     at info.guardianproject.database.sqlcipher.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:904)
11-15 13:12:08.482: ERROR/AndroidRuntime(340):     at info.guardianproject.database.sqlcipher.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:107)
11-15 13:12:08.482: ERROR/AndroidRuntime(340):     at com.myproject1.getInstance(AppData.java:60)

请给我任何参考或提示。

【问题讨论】:

    标签: android sqlcipher


    【解决方案1】:

    您能分享一下您正在使用的 Android 版本的 SQLCipher 吗?我们最近发布了用于 Android 的新版本 SQLCipher,其中包含许多更改。如果您目前还没有更新到最新版本,您可以通过here 获取它。

    【讨论】:

    • 我在使用 SQLCipher v2.0 RC4 时遇到过这个异常。 .so 文件包含在项目中...
    • ^ 原来是另一个 Eclipse 错误导致了这个问题,因此包含的库实际上没有被包含。
    • @straya 在遵循 setfault 的建议后,我可能遇到了与 sqlcipher v2.1.1 相同的问题。它找不到“libraryName”stlport_shared“(id=830025040304)”。你是怎么解决这个问题的?
    • 原来库必须在文件夹“prj/libs”(复数)而不是“prj/lib”...多么可怕的依赖。
    【解决方案2】:

    您需要将 .so 文件添加到 eclipse 项目的 libs/armae​​bi 文件夹中并重新构建。

    【讨论】:

    • 如果你这样做了但仍然得到 UnsatisfiedLinkError 怎么办?
    【解决方案3】:

    java.lang.UnsatisfiedLinkError 在使用前未初始化 SQLCipher 库时发生。

    如需解决问题,请在使用前致电SQLiteDatabase.loadLibs(this);

    例如:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        SQLiteDatabase.loadLibs(this);
    
        // Set up the window layout
        setContentView(R.layout.main);
    
        //instance of database adapter
        db = DBAdapter.getInstance(this);
    
        //load database
        db.load("password goes here");
    

    【讨论】:

      猜你喜欢
      • 2019-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      • 1970-01-01
      • 2013-09-10
      相关资源
      最近更新 更多