0

我已经找了很多天了。

我公司的安卓设备(我们制造)使用的是安卓2.1。我们需要为我们的一位客户支持阿拉伯语。我们能够让第三方软件正确加入阿拉伯语并从另一个第三方购买字体以在 2.1 中显示阿拉伯语。

Android 2.1 有一个名为 fonts.xml 的文件,它指定何时使用字体,包括备用字体。

我想知道代码中的哪个组件读取 fonts.xml 文件(当前位于 /frameworks/base/data/fonts),以便我可以将此文件更改到另一个位置并为每个客户动态更改它,而无需重建新的每次系统的图像。

谢谢!

更新:

搜索 fonts.xml 我发现 sdk.atree 包含以下几行:

# fonts for layoutlib.
frameworks/base/data/fonts/fonts.xml                 platforms/${PLATFORM_NAME}/data/fonts/fonts.xml
frameworks/base/data/fonts/DroidSans.ttf             platforms/${PLATFORM_NAME}/data/fonts/DroidSans.ttf
frameworks/base/data/fonts/DroidSans-Bold.ttf        platforms/${PLATFORM_NAME}/data/fonts/DroidSans-Bold.ttf
frameworks/base/data/fonts/DroidSansMono.ttf         platforms/${PLATFORM_NAME}/data/fonts/DroidSansMono.ttf
frameworks/base/data/fonts/DroidSerif-Bold.ttf       platforms/${PLATFORM_NAME}/data/fonts/DroidSerif-Bold.ttf
frameworks/base/data/fonts/DroidSerif-BoldItalic.ttf platforms/${PLATFORM_NAME}/data/fonts/DroidSerif-BoldItalic.ttf
frameworks/base/data/fonts/DroidSerif-Italic.ttf     platforms/${PLATFORM_NAME}/data/fonts/DroidSerif-Italic.ttf
frameworks/base/data/fonts/DroidSerif-Regular.ttf    platforms/${PLATFORM_NAME}/data/fonts/DroidSerif-Regular.ttf
frameworks/base/data/fonts/DroidSansFallback.ttf     platforms/${PLATFORM_NAME}/data/fonts/DroidSansFallback.ttf
frameworks/base/data/fonts/DroidSansJapanese.ttf     platforms/${PLATFORM_NAME}/data/fonts/DroidSansJapanese.ttf

但是,我在 /system/fonts/ 中没有看到文件 fonts.xm 和 DroidSansJapanese.ttf

我建议我的工作将阿拉伯字体重命名为 DroidSansJapanese.ttf 以便系统读取它,但这肯定会在未来引起混乱。

我还尝试手动将修改后的 fonts.xml 放入 /sytem/fonts 并重新启动设备,但没有奏效。

此外,FontLoader.java 加载 fonts.xml,但它没有指定整个路径,因为它通过 Bridge.java 传递。Bridge.java 也通过了完整路径。使用的变量是 String fontOsLocation。它在两个类中都是这样命名的,所以我进行了搜索,但没有找到指定源中的确切位置:

public static FontLoader create(String fontOsLocation) {}

我的最后一个选择是尝试重新编写 FontLoader,因此即使它需要一个字符串作为 fontOsLocation,我也只是给它一个来自 SD 卡的硬编码路径。但我不知道这可能会对系统产生什么影响。谢谢你。

4

1 回答 1

2

好的,所以我找到了一种解决方案。对于遇到此问题的任何人,这里是:

external/skia/src/ports/SkFontHost_android.cpp -> 指定哪些 .ttf 文件用于哪种样式

并且字体文件需要添加到:

frameworks/base/data/fonts/ -> 这里是所有的 .ttf 文件

并且还需要修改 frameworks/base/data/fonts/ 文件夹中的 Android.mk,以便将新字体文件从该文件夹复制到 /system/fonts

希望这可以帮助某人。

于 2012-06-07T17:42:34.457 回答