AAssetManager не может получить доступ к необработанному ресурсу из общей библиотеки - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь получить доступ к своему ресурсу, который находится в 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);
}

А вот мой код NDK C ++ внутри моей общей библиотеки GlyphCreator:

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 голосов
/ 24 октября 2018

Просто поместите это как «ответ» из области комментариев согласно намерению автора помочь другим: Как получить файл в активах с Android NDK

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...