android - 对 AAssetManager_fromJava 的 undefined reference

标签 android android-ndk android-assets

我正在尝试使用 AAssetManager 从 android apk 访问 Assets 。但是,我不断得到 “未定义对 AAssetManager_fromJava 的引用”,即使我包含了 asset_manager.h 和 asset_manager_jni.h asset_manager.h 中的其他函数,如 AAssetManager_openDir(mgr, "") 等也无法引用。

完整代码如下

#define EXPORT_API

#include <string.h>
#include <jni.h>
#include <android\log.h>

#include <sys\types.h>
#include <android\asset_manager.h>
#include <android\asset_manager_jni.h>

#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, "com.devin - native", __VA_ARGS__)

JNIEnv* env=0;

#ifdef __cplusplus
extern "C" {
#endif

JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* pvt){
    LOGD("JNI_OnLoad() called");
    vm->AttachCurrentThread(&env, 0);
    return JNI_VERSION_1_2;
}

EXPORT_API void LoadAsset(char* filename, jobject assetManager){
    AAssetManager* mgr = AAssetManager_fromJava(env, assetManager);
        /* More stuff */
}

#ifdef __cplusplus
};
#endif

此代码位于 .cpp 文件中,并使用 NDK R8 进行编译。我在这里做错了什么吗?

最佳答案

我的错误。我没有将“android”库添加到链接器。我实际上已经在 Visual Studio Express 上设置了 NDK 开发环境,默认情况下“android”库没有添加到我的项目中。

如果您使用的是 makefile,请务必在使用 native AssetManager 时将 -landroid 添加到您的 LOCAL_LDLIBS。

关于android - 对 AAssetManager_fromJava 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12552208/

相关文章:

java - 我的按钮无法通过单击它们来获取下一个 Activity

android - 如何在外部对象上实现 Parcelable?

android - 安装 Xamarin 后 ADB 无法在 Android Studio 中运行

android - Cocos2d-x 和 Android Studio

java - 使用 Netty 提供文件 - 响应被截断一个字节

android - 将文件私下保存到内部存储

android - 在android模拟器中创建文件夹

android - 在 JNI 中获取字符串列表的正确方法

android - 使用 ffmpeg 和 android ndk 提取视频中的第一帧

android - android中资源的数据加密