如何在Android NDK项目中包含字体文件(.ttf)?

时间:2016-06-30 14:31:14

标签: android android-ndk freetype freetype2

所以我需要在我的Android NDK项目中包含一个用于Freetype字体渲染的.ttf字体文件。我把它放在哪里以便放入apk?

2 个答案:

答案 0 :(得分:3)

我将通过传递assetManager来添加我的解决方案,并在c ++端保留对它的引用。字体ttf文件存储在fonts文件夹内的assets文件夹中。

FT_library library;
FT_Face fontFace;

AAsset* fontFile = AAssetManager_open(manager, "fonts/Roboto-Medium.ttf", AASSET_MODE_BUFFER);
off_t fontDataSize = AAsset_getLength(fontFile);

FT_Byte* fontData = new FT_Byte[fontDataSize];
AAsset_read(fontFile, fontData, (size_t) fontDataSize);
AAsset_close(fontFile);


if (FT_Init_FreeType(&library)) {
    LOGE("Could not load library");
}
if (FT_New_Memory_Face(library, (const FT_Byte*)fontData, (FT_Long)fontDataSize, 0, &fontFace)) {
    LOGE("Load memory failed");
}

要传递assetManager,只需将其作为对象传递,然后在C ++端进行转换。

AAssetManager *manager = AAssetManager_fromJava(javaEnv, assetObject);

答案 1 :(得分:-1)

src/main/我在assets/java/jni/文件夹旁边创建了另一个文件夹res/,我放置了.ttf文件它被上传到apk。我仍然试图让Freetype看到它,因为目前的命令还没有得到它:

FT_New_Face(ft, "/assets/Arial.ttf", 0, &face);

但那是另一个问题。