AAssetManager无法从共享库访问原始资源

时间:2018-10-24 03:08:52

标签: android android-ndk

我正在尝试访问res/raw/coolvetica.ttf中的资源。 enter image description here

这是我的Java活动类,它加载了NDK共享库:

public class OGLActivity extends Activity{
    private GLSurfaceView m_glView;

    @Override
    public void onCreate(Bundle savedInstanceBundle) {
        super.onCreate(savedInstanceBundle);
        // some init code and setting the current view here, not neccessary for code to run
        getGlyphs(getResources().getAssets(), "Hello World");
    }

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

    public native int getGlyphs(AssetManager amgr, String text);
}

这是我的共享库GlyphCreator中的NDK C ++代码:

extern "C"
JNIEXPORT jint JNICALL Java_com_myapplication_sometest_OGLActivity_getGlyphs(JNIEnv *env, jobject object, jobject assetManager, jstring text)
{
    AAssetManager *assetMgr = AAssetManager_fromJava(env, assetManager);
    if(assetMgr != nullptr)
    {
        AAsset *fontFile = AAssetManager_open(assetMgr, "res/raw/coolvetica.ttf", AASSET_MODE_BUFFER);
        if(fontFile != nullptr)
        {
            // The code here is never reached, fontFile is always NULL
        }
    }
}

我已经调试了代码,并调用了函数getGlyphs()

fontFile始终为NULL,我尝试从字符串"coolvetica.ttf", "raw/coolvetica.ttf", "res/raw/coolvetica.ttf"加载资源,它们都导致fontFile为NULL。

AAssetManager不为NULL,我认为获取AAssetManager的代码是正确的。

与共享库有什么关系吗?它没有资源吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

仅出于作者帮助他人的意图,将其作为评论区域的“答案”即可: How To Get File In Assets From Android NDK