将 sqlite 数据库包含在 C++ JNI 项目中
Include sqlite database into a C++ JNI project
我已经编写了C++类,现在我必须创建库才能在Android上使用它们。一个类处理我预先准备好的数据库(它包括图片和字符串)。在Qt中,它工作正常,因此代码是健壮的。我在Eclipse中有我的Android项目,JNI似乎还可以,因为在运行时android不会崩溃。问题是数据库未命中。
有人可以告诉我如何以通过构建apk文件将其包含在项目中吗?看过一个教程,它解释了将其放入 assets 文件夹并创建一个扩展的 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();
更新:我看过一个例子,其中数据库包含在 assets 文件夹中,并且可以使用 getResources().getAssets().open("some_file") 访问该文件。问题是这是针对Java端的,但我不想从Java端访问它,我需要使用本机库从C++/JNI端访问它。
我用另一种方式解决了。我在虚拟 SD 卡上加载了数据库,并在C++类中更改了数据库的路径。现在它工作正常。当然,这不是正确的方法,但我必须在周五之前介绍该项目......我也找到了另一个解决方案,但它需要 API 2.3,其中包括原生端的 getResources()。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法在 CLion 中构建 C++ 项目
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 欧拉项目#8答案是大以获得有效答案
- 从链接列表c++中删除一个项目
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 既然存在危险,为什么项目要使用-I include开关
- cmake在我的项目中所需的所有静态库都不成功
- 安卓项目中 jni 和 cpp 包之间的区别
- 如何在Android Studio中编写CMakelists来调用我的C 项目(JNI)的功能
- 如何将 gnu-libstdc++ 包含在 JNI Java swing 项目中
- 适当的JNI转换将数组项目从jobjectarray到分开const char
- 使用 JNI 将 C# 加载到 Java 项目中的未解决链接错误
- 灵活的 jni 项目
- 如何在使用JNI的C++/Java项目中使用CRT中的工具检测内存泄漏
- 如何使JNI项目在所有JB、KK和LP下工作,这些项目仅在一个平台下编译
- 将 sqlite 数据库包含在 C++ JNI 项目中
- 将C++项目导出到 Android - JNI/JavaCPP/Visualgdb