2011-05-15 38 views
0

我编写了我的C++类,现在我必须创建库以在android上使用它们。一个类处理一个数据库,我事先准备好了它(它包括图片和字符串)。在Qt中它工作正常,所以代码是健壮的。我在Eclipse中有我的Android项目,JNI似乎没问题,因为在运行时android不会崩溃。问题是数据库遗漏。将sqlite数据库包含到C++ JNI项目中

有人能告诉我如何将它包含到项目中,以便通过构建apk文件包含它?已经看到了一个教程,解释将它放入资产文件夹并创建一个扩展Java类,但我不知道它是否也适用于i0m在JNI级别(使用C++)使用查询调用。

正如我以前悲伤,我没有错误,既没有编译,也没有运行时间。应用程序根本无法工作......因为没有数据库。当我将本地方法的定义留空时,它不会崩溃,所以它意味着对本地方法的调用可以正常工作。

一个例子,在C++类,我有:

bool Database::open() { 
if (sqlite3_open(dataBaseName, &databaseConnection) == SQLITE_OK){ 
    return true; 
} 
return false; 
} 

我叫它与本地通话:

JNIEXPORT void JNICALL Java_com_tamagotchi_ItemShop_openDatabase(JNIEnv *, jobject){ 
    db->open(); 
    } 

... Java类:

static { 
    System.loadLibrary("nativeLib"); 
} 

public native void openDatabase(); 

更新: 我见过一个例如数据库包含在资产文件夹中,并且可以使用getResources()。getAssets()。open(“some_file”)访问文件。问题是这是针对Java方面的,但我不需要从Java端访问它,我需要使用nativelibrary从C++/JNI端访问它。

+1

你的问题被截断。请编辑它,并至少发布一些代码或错误消息 - 我们无法猜测出现了什么问题。 – Mat 2011-05-15 15:45:17

回答

0

我以另一种方式解决。我将数据库加载到虚拟SD卡上,并在我的C++类中更改了数据库的路径。现在它工作正常。诅咒,这是不正确的做法,但我不得不提出的项目不晚于周五...... 我也找到了另一种解决方案,但它需要API 2.3,其中包括getResources()也在本地方。

相关问题