私は今、これを何日も探していました。
私の会社のAndroidデバイス(弊社製)はAndroid 2.1を使用しています。顧客の 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
ただし、ファイル fonts.xm と DroidSansJapanese.ttf が /system/fonts/ に表示されません。
システムが読み取れるように、アラビア語フォントの名前を DroidSansJapanese.ttf に変更することを仕事に提案しましたが、これは将来混乱を招くことは間違いありません。
また、変更した fonts.xml を /system/fonts に手動で配置して、デバイスを再起動しようとしましたが、うまくいきませんでした。
また、FontLoader.java は fonts.xml をロードしますが、Bridge.java によって渡されるパス全体を指定しません。Bridge.java にもフル パスが渡されます。使用される変数は String fontOsLocation です。両方のクラスでこのように名前が付けられているため、検索を行いましたが、ソース内の正確な場所を指定するものは見つかりませんでした:
public static FontLoader create(String fontOsLocation) {}
私の最後のオプションは、FontLoader を書き直してみることです。そのため、fontOsLocation に文字列が必要な場合でも、SD カードからハードコードされたパスを指定するだけです。しかし、これがシステムにどのような影響を与えるかはわかりません。ありがとうございました。