如何在我的 Android NDK 项目中包含字体文件 (.ttf)?
How do I include a font file (.ttf) in my Android NDK project?
所以我需要在我的 Android NDK 项目中包含一个用于 Freetype 字体渲染的 .ttf 字体文件。我应该把它放在哪里,它才会被放入 apk 中?
在 src/main/
中,我在放置 .ttf
的 java/
、jni/
和 res/
文件夹旁边创建了另一个文件夹 assets/
文件并将其上传到apk。我仍在尝试让 Freetype 看到它,因为当前命令没有得到它:
FT_New_Face(ft, "/assets/Arial.ttf", 0, &face);
但那是另一个问题了。
我将添加我的解决方案,它是通过传递 assetManager,并在 C++ 端保留对它的引用。字体 ttf 文件存储在字体文件夹内的资产文件夹中。
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);
所以我需要在我的 Android NDK 项目中包含一个用于 Freetype 字体渲染的 .ttf 字体文件。我应该把它放在哪里,它才会被放入 apk 中?
在 src/main/
中,我在放置 .ttf
的 java/
、jni/
和 res/
文件夹旁边创建了另一个文件夹 assets/
文件并将其上传到apk。我仍在尝试让 Freetype 看到它,因为当前命令没有得到它:
FT_New_Face(ft, "/assets/Arial.ttf", 0, &face);
但那是另一个问题了。
我将添加我的解决方案,它是通过传递 assetManager,并在 C++ 端保留对它的引用。字体 ttf 文件存储在字体文件夹内的资产文件夹中。
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);