docomoのダサい絵文字を抹消することが目的。 絵文字を変更するだけだったら、後述のzFont 3を使えば解決するが、アプリ内で選択できるフォントでは空白の間隔がおかしくなったり、リンクを意味する下線が下に行き過ぎたりと、表示がおかしくなってしまう。それを解決するためにnoto-emojiのソースレベルで調整してビルドするという作戦をとる。
Galaxy S22
起動しているPCがWindowsなら
https://docs.docker.jp/docker-for-windows/install.html
起動しているPCがUbuntuなら
https://docs.docker.com/engine/install/ubuntu/
ビルド環境を用意するのが面倒なので、Dockerで用意した。 以下を実行する。devcontainerを使っている人はそのままGUI操作で開いてよい。
docker image build -t noto-emoji .
docker run --name noto-emoji-container -it noto-emoji /bin/bash
noto-emojiのリポジトリをCloneする。 今回は、Unicode 15.0の絵文字をビルドする。
git clone -b v2.038 https://github.com/googlefonts/noto-emoji.git
cd noto-emoji
絵文字以外のフォントやレイアウトを崩さないように以下のコマンドを実行する。
rm png/128/emoji_u002a* png/128/emoji_u0023* png/128/emoji_u003*
rm png/32/emoji_u002a* png/32/emoji_u0023* png/32/emoji_u003*
rm png/512/emoji_u002a* png/512/emoji_u0023* png/512/emoji_u003*
rm png/72/emoji_u002a* png/72/emoji_u0023* png/72/emoji_u003*
mv NotoColorEmoji.tmpl.ttx.tmpl NotoColorEmoji.tmpl.ttx.tmpl.bak
sed -e 's/".notdef" width="2550"/".notdef" width="680"/g' \
-e 's/"nonmarkingreturn" width="2550"/"nonmarkingreturn" width="680"/g' \
-e 's/"space" width="2550"/"space" width="680"/g' \
-e 's/".notdef" height="2500"/".notdef" height="680"/g' \
-e 's/"nonmarkingreturn" height="2500"/"nonmarkingreturn" height="680"/g' \
-e 's/"space" height="2500"/"space" height="680"/g' \
-e 's/underlinePosition value="-1244"/underlinePosition value="-300"/g' \
NotoColorEmoji.tmpl.ttx.tmpl.bak > NotoColorEmoji.tmpl.ttx.tmpl
調整方法は以下のサイトを参考にした。
Galaxyスマホの絵文字が気に食わないのでGoogleの絵文字に差し替える
そして、ソースコードを一部修正する。
フォントの一部のファイルを削除したことで、ビルド前のチェック実装に引っかかってしまってビルドが通らない。チェックをすり抜けるように以下の実装を修正する。
check_emoji_sequences.py
の315行目あたり。
nano check_emoji_sequences.py
- if not coverage_pass:
- exit("Please fix the problems mentioned above or run: make BYPASS_SEQUENCE_CHECK='True'")
+ # if not coverage_pass:
+ # exit("Please fix the problems mentioned above or run: make BYPASS_SEQUENCE_CHECK='True'")
ビルドは公式のREADMEに従って実行する。
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
rm -rf build/ && time make -j 48
結構かかるので、待つ。
ビルドが成功したら、以下のように出る。
Dropped outline ('glyf', 'CFF ') and related tables.
Found images for 3687 characters in 'build/compressed_pngs/emoji_u*.png'.
Embedding images for 3687 glyphs for this strike.
Strike ppem set to 109.
Output font 'NotoColorEmoji.ttf' generated.
CBDT table synthesized: 10249565 bytes.
CBLC table synthesized: 14864 bytes.
Output font 'NotoColorEmoji_WindowsCompatible.ttf' generated.
rm build/emoji/emoji_ufe82b.png
real 8m40.454s
user 131m19.178s
sys 0m36.879s
NotoColorEmoji.ttf
が今回ほしいフォントファイルになる。
別ターミナルで、以下を実行。
docker cp <コンテナID>:/noto-emoji/NotoColorEmoji.ttf NotoColorEmoji.ttf
Dockerからホスト側のPCにファイルを持ってくるときは以下のサイトを参考にする。
Dockerでホストとコンテナ間でのファイルコピー
ここからはAndroid側の操作となる。 別のブログのほうが詳しいので、ここを参考にする。
ドコモ絵文字を完全抹殺。システムフォント変更アプリ「zFont 3」の使い方