2011-11-15 97 views
5

我正在使用SQLCipher Library for Android来加密/解密数据库文件。我遵循API中讨论的确切步骤来添加库。使用SQLCipher库时出现不满意的链接错误

但我得到一个不合适的链接错误,当我运行项目......这里的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) 

请给我任何参考或提示。

回答

3

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

+0

如果你已经完成并仍然得到UnsatisfiedLinkError,那么呢? – scottyab

1

您能分享您正在使用的Android版SQLCipher的版本吗?我们最近发布了一个适用于Android的SQLCipher的新版本,并进行了许多更改。如果您目前没有及时了解最新版本,您可以获得here

+0

我已经经历了使用SQLCipher 2.0 RC4此异常。 .so文件包含在项目中......^ – straya

+0

^原来这是另一个导致这个错误的Eclipse错误,其中包含了实际包含的库werent。 – straya

+0

@straya在遵循setfault的建议之后,我可能遇到了与sqlcipher v2.1.1相同的问题。它无法找到“libraryName \t”stlport_shared“(id = 830025040304)”。你是如何解决这个问题的? – stephen

14

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");