Я пытаюсь получить доступ к своему ресурсу, который находится в res/raw/coolvetica.ttf
.
Вот мой класс активности 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 правильный.
Будет ли это иметь какое-либо отношение к общедоступной библиотеке?У него нет доступа к ресурсам?
Спасибо за любую помощь.