我正在尝试访问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);
}
这是我的共享库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的代码是正确的。
与共享库有什么关系吗?它没有资源吗?
感谢您的帮助。