Skip to content

Commit 817ff07

Browse files
committed
add python package
1 parent c88ffc8 commit 817ff07

File tree

16 files changed

+974
-64
lines changed

16 files changed

+974
-64
lines changed

.github/workflows/main.yml

Lines changed: 41 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,41 @@
1-
name: Upload zip
2-
on: push
3-
jobs:
4-
build:
5-
runs-on: ubuntu-latest
6-
steps:
7-
- uses: actions/checkout@v4
8-
- name: Make release zip
9-
run: |
10-
wget https://github.com/topjohnwu/Magisk/raw/master/scripts/module_installer.sh -O META-INF/com/google/android/update-binary
11-
zip -9 -x "*.git*" -x "extra/*" -x "extra" -r ../notocjk.zip ./
12-
sha256sum ../notocjk.zip > ../notocjk.zip.sha256sum
13-
- name: Release
14-
uses: softprops/action-gh-release@v2
15-
if: startsWith(github.ref, 'refs/tags/')
16-
with:
17-
files: |
18-
../notocjk.zip
19-
../notocjk.zip.sha256sum
20-
env:
21-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
22-
- uses: actions/upload-artifact@v4
23-
with:
24-
name: notocjk
25-
path: ./
26-
1+
name: Upload zip
2+
on:
3+
- push
4+
- pull_request
5+
- workflow_dispatch
6+
jobs:
7+
build:
8+
runs-on: ubuntu-latest
9+
steps:
10+
- uses: actions/checkout@v4
11+
- name: Set up Python
12+
uses: actions/setup-python@v4
13+
with:
14+
python-version: '3.13'
15+
cache: 'poetry'
16+
- name: Install poetry
17+
run: |
18+
python -m pip install --upgrade pip
19+
pip install poetry
20+
poetry install
21+
- name: Run python script
22+
run: |
23+
poetry run python -m chws_subset
24+
- name: Make release zip
25+
run: |
26+
zip -9 -x "*.git*" -x "chws_subset*" -x "extra*" -x "poetry.lock" -x "pyproject.toml" -r ../notocjk.zip ./
27+
sha256sum ../notocjk.zip > ../notocjk.zip.sha256sum
28+
- name: Release
29+
uses: softprops/action-gh-release@v2
30+
if: startsWith(github.ref, 'refs/tags/')
31+
with:
32+
files: |
33+
../notocjk.zip
34+
../notocjk.zip.sha256sum
35+
env:
36+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
37+
- uses: actions/upload-artifact@v4
38+
with:
39+
name: notocjk
40+
path: ./
41+

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
__pycache__/
2+
*.ttc

README.md

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,27 @@
22
[![Upload zip](https://github.com/simonsmh/notocjk/workflows/Upload%20zip/badge.svg)](https://github.com/simonsmh/notocjk/actions)
33
[![Download](https://img.shields.io/github/downloads/simonsmh/notocjk/total.svg)](https://github.com/simonsmh/notocjk/releases)
44

5-
NotoSansCJK & NotoSerifCJK full weight patch for Android devices.
5+
A full weight font patch for Android devices.
6+
> NotoSansCJK full weight patch supports Android 8+
7+
> NotoSerifCJK full weight patch supports Android 9+
68
7-
* NotoSansCJK VF support as full weight patch applies to Android 8-15
8-
* NotoSerifCJK full weight patch applies to Android 9-15
9+
Fonts files are provided by [noto-cjk](https://github.com/googlefonts/noto-cjk) from Google.
10+
> The fonts have been modified using [subset_noto_cjk.py](https://android.googlesource.com/platform/external/noto-fonts/+/refs/heads/main/scripts/subset_noto_cjk.py) to remove `cmap` entries for characters that should default to the emoji style on Android.
11+
> The fonts have been modified using [chws_tool](https://github.com/googlefonts/chws_tool) to include a `chws` table.
12+
> For more details, please visit https://github.com/WordlessEcho/patch-noto-cjk-for-android
913
10-
Fonts are provided by [Google](https://github.com/googlefonts/noto-cjk).
11-
12-
## Maintenance
13-
Currently, this module is still maintained. It was used to be stored at official repo but got removed in repo cleanup. Now you can download it directly in this repo's [release tabs](https://github.com/simonsmh/notocjk/releases).
14-
15-
[John Wu's Twitter for details](https://twitter.com/topjohnwu/status/1229896206584664065)
14+
![Noto Serif CJK variable test](extra/serif-variable-test.gif)
1615

1716
## NOTICE
18-
* Android 15+ doesn't need this module anymore.
19-
* You should use latest Magisk Manager/KernelSU to install this module.
20-
17+
* You should use latest Magisk/KernelSU to install this module.
18+
* For Android 15+, NotoSansCJK officially supports variable fonts but only within the weight range of 400-900. This module extends the range to 100-900.
2119
* Recent fixes:
22-
23-
Remove invalid old fonts which prevent MinikinFont from loading with npe when Magisk/KernelSU triggers unmounting.
24-
20+
* Removed old fonts that prevent MinikinFont from loading with an NPE when Magisk/KernelSU triggers unmounting.
2521
* Known issues:
22+
* HK fonts style is pending & waiting for Google solution in later android versions.
2623

27-
HK fonts style is pending & waiting for Google solution in later android versions.
28-
29-
30-
## Credit & Support
3124

25+
## Credit & Support & Maintenance
26+
* Currently, this module is still maintained. It was used to be stored at official repo but got removed in repo cleanup. Now you can download it directly in this repo's [release tabs](https://github.com/simonsmh/notocjk/releases). [John Wu's Twitter for details](https://twitter.com/topjohnwu/status/1229896206584664065)
3227
* Any issue or pull request is welcomed.
3328
* Star this module at [GitHub](https://github.com/simonsmh/notocjk).

chws_subset/__init__.py

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
import logging
2+
import shutil
3+
from os import PathLike
4+
from pathlib import Path
5+
6+
import chws_tool
7+
import httpx
8+
from fontTools import ttLib
9+
from nototools import font_data, tool_utils
10+
from tqdm import tqdm
11+
12+
## BEGIN: https://android.googlesource.com/platform/external/noto-fonts.git/+/refs/heads/android15-release/scripts/subset_noto_cjk.py
13+
# Characters supported in Noto CJK fonts that UTR #51 recommends default to
14+
# emoji-style.
15+
EMOJI_IN_CJK = {
16+
0x26BD, # ⚽ SOCCER BALL
17+
0x26BE, # ⚾ BASEBALL
18+
0x1F18E, # 🆎 NEGATIVE SQUARED AB
19+
0x1F191, # 🆑 SQUARED CL
20+
0x1F192, # 🆒 SQUARED COOL
21+
0x1F193, # 🆓 SQUARED FREE
22+
0x1F194, # 🆔 SQUARED ID
23+
0x1F195, # 🆕 SQUARED NEW
24+
0x1F196, # 🆖 SQUARED NG
25+
0x1F197, # 🆗 SQUARED OK
26+
0x1F198, # 🆘 SQUARED SOS
27+
0x1F199, # 🆙 SQUARED UP WITH EXCLAMATION MARK
28+
0x1F19A, # 🆚 SQUARED VS
29+
0x1F201, # 🈁 SQUARED KATAKANA KOKO
30+
0x1F21A, # 🈚 SQUARED CJK UNIFIED IDEOGRAPH-7121
31+
0x1F22F, # 🈯 SQUARED CJK UNIFIED IDEOGRAPH-6307
32+
0x1F232, # 🈲 SQUARED CJK UNIFIED IDEOGRAPH-7981
33+
0x1F233, # 🈳 SQUARED CJK UNIFIED IDEOGRAPH-7A7A
34+
0x1F234, # 🈴 SQUARED CJK UNIFIED IDEOGRAPH-5408
35+
0x1F235, # 🈵 SQUARED CJK UNIFIED IDEOGRAPH-6E80
36+
0x1F236, # 🈶 SQUARED CJK UNIFIED IDEOGRAPH-6709
37+
0x1F238, # 🈸 SQUARED CJK UNIFIED IDEOGRAPH-7533
38+
0x1F239, # 🈹 SQUARED CJK UNIFIED IDEOGRAPH-5272
39+
0x1F23A, # 🈺 SQUARED CJK UNIFIED IDEOGRAPH-55B6
40+
0x1F250, # 🉐 CIRCLED IDEOGRAPH ADVANTAGE
41+
0x1F251, # 🉑 CIRCLED IDEOGRAPH ACCEPT
42+
}
43+
# Characters we have decided we are doing as emoji-style in Android,
44+
# despite UTR #51's recommendation
45+
ANDROID_EMOJI = {
46+
0x2600, # ☀ BLACK SUN WITH RAYS
47+
0x2601, # ☁ CLOUD
48+
0x260E, # ☎ BLACK TELEPHONE
49+
0x261D, # ☝ WHITE UP POINTING INDEX
50+
0x263A, # ☺ WHITE SMILING FACE
51+
0x2660, # ♠ BLACK SPADE SUIT
52+
0x2663, # ♣ BLACK CLUB SUIT
53+
0x2665, # ♥ BLACK HEART SUIT
54+
0x2666, # ♦ BLACK DIAMOND SUIT
55+
0x270C, # ✌ VICTORY HAND
56+
0x2744, # ❄ SNOWFLAKE
57+
0x2764, # ❤ HEAVY BLACK HEART
58+
}
59+
# We don't want support for ASCII control chars.
60+
CONTROL_CHARS = set(tool_utils.parse_int_ranges("0000-001F"))
61+
EXCLUDED_CODEPOINTS = frozenset(sorted(EMOJI_IN_CJK | ANDROID_EMOJI | CONTROL_CHARS))
62+
63+
64+
def remove_codepoints_from_ttc(ttc_path, out_dir):
65+
"""Removes a set of characters from a TTC font file's cmap table."""
66+
logging.info("Loading %s", ttc_path)
67+
ttc = ttLib.TTCollection(ttc_path)
68+
logging.info("Subsetting %d fonts in the collection", len(ttc))
69+
for font in ttc:
70+
font_data.delete_from_cmap(font, EXCLUDED_CODEPOINTS)
71+
out_path = out_dir / ttc_path.name
72+
logging.info("Saving to %s", out_path)
73+
ttc.save(out_path)
74+
logging.info(
75+
"Size: %d --> %d, delta=%d",
76+
ttc_path.stat().st_size,
77+
out_path.stat().st_size,
78+
out_path.stat().st_size - ttc_path.stat().st_size,
79+
)
80+
81+
82+
## END: https://android.googlesource.com/platform/external/noto-fonts.git/+/refs/heads/android15-release/scripts/subset_noto_cjk.py
83+
84+
85+
def download_file(
86+
url: str, save_path_file_name: str | bytes | PathLike[str] | PathLike[bytes]
87+
) -> bool:
88+
with open(save_path_file_name, "wb") as f:
89+
with httpx.stream("GET", url, follow_redirects=True) as response:
90+
if response.status_code != 200:
91+
logging.error(f"Failed to download {url}")
92+
return False
93+
with tqdm(
94+
total=int(response.headers.get("content-length", 0)),
95+
unit="B",
96+
unit_divisor=1024,
97+
unit_scale=True,
98+
) as progress:
99+
num_bytes_downloaded = response.num_bytes_downloaded
100+
for chunk in response.iter_bytes():
101+
f.write(chunk)
102+
progress.update(
103+
response.num_bytes_downloaded - num_bytes_downloaded
104+
)
105+
num_bytes_downloaded = response.num_bytes_downloaded
106+
return True
107+
108+
109+
def download_and_patch_noto_cjk_font(url):
110+
base_file_name = url.split("/")[-1]
111+
## Download
112+
logging.info(f"Downloading {url}...")
113+
input_dir = Path("temp/input")
114+
input_dir.mkdir(parents=True, exist_ok=True)
115+
input_file = input_dir / base_file_name
116+
if not download_file(url, input_file):
117+
logging.error("Failed to download")
118+
return
119+
120+
## CHWS Patch
121+
logging.info("Applying CHWS patch...")
122+
output_path = Path("temp/chws_output")
123+
output_path.mkdir(exist_ok=True)
124+
output_file = output_path / base_file_name
125+
chws_tool.add_chws(input_file, output_file)
126+
127+
## Subset
128+
logging.info("Subsetting...")
129+
result_path = Path("system/fonts")
130+
result_path.mkdir(parents=True, exist_ok=True)
131+
remove_codepoints_from_ttc(output_file, result_path)
132+
logging.info("Done!")
133+
shutil.rmtree(Path("temp"))

chws_subset/__main__.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import argparse
2+
import concurrent.futures
3+
4+
from . import download_file, download_and_patch_noto_cjk_font
5+
6+
DEFAULT_DOWNLOADING_FONTS = {
7+
"NotoSerifCJK-VF.otf.ttc": "https://github.com/notofonts/noto-cjk/raw/refs/heads/main/Serif/Variable/OTC/NotoSerifCJK-VF.otf.ttc",
8+
"NotoSansCJK-VF.otf.ttc": "https://github.com/notofonts/noto-cjk/raw/refs/heads/main/Sans/Variable/OTC/NotoSansCJK-VF.otf.ttc",
9+
}
10+
11+
12+
def main():
13+
parser = argparse.ArgumentParser(
14+
description="Download and patch Noto fonts with CHWS"
15+
)
16+
parser.add_argument("--url", help="URL to download and patch", default=None)
17+
args = parser.parse_args()
18+
if args.url:
19+
download_and_patch_noto_cjk_font(args.url)
20+
else:
21+
## Download and patch all default fonts
22+
with concurrent.futures.ProcessPoolExecutor() as executor:
23+
executor.map(
24+
download_and_patch_noto_cjk_font, DEFAULT_DOWNLOADING_FONTS.values()
25+
)
26+
## Download module_installer.sh
27+
download_file(
28+
"https://github.com/topjohnwu/Magisk/raw/master/scripts/module_installer.sh",
29+
"META-INF/com/google/android/update-binary",
30+
)
31+
32+
33+
if __name__ == "__main__":
34+
main()

customize.sh

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,35 @@
1-
if [ "$API" -gt 34 ]; then
2-
ui_print "*********************************************************"
3-
ui_print "! Android 15+ already supports full weight variable fonts"
4-
ui_print "*********************************************************"
5-
elif [ "$API" -lt 26 ]; then
1+
if [ "$API" -lt 26 ]; then
62
ui_print "*********************************************************"
73
ui_print "! Please upgrade your system to Android 8+"
84
abort "*********************************************************"
95
fi
6+
BAKPATH=/data/adb/notocjk_bak/
107
[ -x `which magisk` ] && {
118
if magisk --denylist ls &>/dev/null; then
129
CMDPREFIX="magisk --denylist exec"
1310
elif magisk magiskhide ls &>/dev/null; then
1411
CMDPREFIX="magisk magiskhide exec"
1512
fi
1613
} || unset CMDPREFIX
14+
[ -f $BAKPATH/api_level ] && OLD_API=$(cat $BAKPATH/api_level 2>/dev/null) || OLD_API=$API
15+
ui_print "OLD_API: $OLD_API"
16+
if [ -z $CMDPREFIX ] && [ ! "$API" -eq "$OLD_API" ]; then
17+
rm -rf $BAKPATH
18+
ui_print "*********************************************************"
19+
ui_print "! API level changed"
20+
ui_print "! Please uninstall previous version and reboot, then install this version manually"
21+
abort "*********************************************************"
22+
fi
23+
MODULE_NAME=$(basename $MODPATH)
24+
ui_print "MODULE_NAME: $MODULE_NAME"
25+
if [ -z $CMDPREFIX ] && [ ! -d $BAKPATH ] && [ -d "/data/adb/modules/$MODULE_NAME/system/etc" ]; then
26+
ui_print "*********************************************************"
27+
ui_print "! Backup missing"
28+
ui_print "! Please uninstall previous version and reboot, then install this version manually"
29+
abort "*********************************************************"
30+
fi
31+
mkdir -p $BAKPATH
32+
echo "$API" > $BAKPATH/api_level
1733
FILES="fonts.xml fonts_base.xml font_fallback.xml"
1834
FILECUSTOM=fonts_customization.xml
1935
FILEPATHS="/system/etc/ /system_ext/etc/"
@@ -27,8 +43,13 @@ case "$FILEPATH" in
2743
/system/*) SYSTEMFILEPATH=$FILEPATH ;;
2844
*) SYSTEMFILEPATH=/system$FILEPATH ;;
2945
esac
30-
mkdir -p $MODPATH$FILEPATH
31-
$CMDPREFIX cp -af $FILEPATH$FILE $MODPATH$SYSTEMFILEPATH$FILE
46+
mkdir -p $MODPATH$SYSTEMFILEPATH
47+
if [ ! -f $BAKPATH$FILEPATH$FILE ]; then
48+
ui_print "- Backup $FILE to $BAKPATH"
49+
mkdir -p $BAKPATH$FILEPATH
50+
$CMDPREFIX cp -af $FILEPATH$FILE $BAKPATH$FILEPATH$FILE
51+
fi
52+
cp -af $BAKPATH$FILEPATH$FILE $MODPATH$SYSTEMFILEPATH$FILE
3253
# Disable MiSans for debugging
3354
# sed -i '/<!-- # MIUI Edit Start -->/,/<!-- # MIUI Edit END -->/d;/<!-- MIUI fonts begin \/-->/,/<!-- MIUI fonts end \/-->/d;' $MODPATH$SYSTEMFILEPATH$FILE
3455
# Disable OPlusSans for debugging
@@ -63,7 +84,6 @@ sed -i '
6384
/<family lang=\"ko\">/,/<\/family>/ {:a;N;/<\/family>/!ba;
6485
s/<family lang=\"ko\">.*Noto.*CJK.*<\/family>/<family lang="ko">\n<font weight="100" style="normal" index="1" postScriptName="NotoSansCJKjp-Thin">NotoSansCJK-VF.otf.ttc<axis tag="wght" stylevalue="100" \/><\/font>\n<font weight="300" style="normal" index="1" postScriptName="NotoSansCJKjp-Thin">NotoSansCJK-VF.otf.ttc<axis tag="wght" stylevalue="300" \/><\/font>\n<font weight="400" style="normal" index="1" postScriptName="NotoSansCJKjp-Thin">NotoSansCJK-VF.otf.ttc<axis tag="wght" stylevalue="400" \/><\/font>\n<font weight="500" style="normal" index="1" postScriptName="NotoSansCJKjp-Thin">NotoSansCJK-VF.otf.ttc<axis tag="wght" stylevalue="500" \/><\/font>\n<font weight="600" style="normal" index="1" postScriptName="NotoSansCJKjp-Thin">NotoSansCJK-VF.otf.ttc<axis tag="wght" stylevalue="600" \/><\/font>\n<font weight="700" style="normal" index="1" postScriptName="NotoSansCJKjp-Thin">NotoSansCJK-VF.otf.ttc<axis tag="wght" stylevalue="700" \/><\/font>\n<font weight="900" style="normal" index="1" postScriptName="NotoSansCJKjp-Thin">NotoSansCJK-VF.otf.ttc<axis tag="wght" stylevalue="900" \/><\/font>\n<font weight="200" style="normal" index="1" fallbackFor="serif" postScriptName="NotoSerifCJKjp-ExtraLight">NotoSerifCJK-VF.otf.ttc<axis tag="wght" stylevalue="200" \/><\/font>\n<font weight="300" style="normal" index="1" fallbackFor="serif" postScriptName="NotoSerifCJKjp-ExtraLight">NotoSerifCJK-VF.otf.ttc<axis tag="wght" stylevalue="300" \/><\/font>\n<font weight="400" style="normal" index="1" fallbackFor="serif" postScriptName="NotoSerifCJKjp-ExtraLight">NotoSerifCJK-VF.otf.ttc<axis tag="wght" stylevalue="400" \/><\/font>\n<font weight="500" style="normal" index="1" fallbackFor="serif" postScriptName="NotoSerifCJKjp-ExtraLight">NotoSerifCJK-VF.otf.ttc<axis tag="wght" stylevalue="500" \/><\/font>\n<font weight="600" style="normal" index="1" fallbackFor="serif" postScriptName="NotoSerifCJKjp-ExtraLight">NotoSerifCJK-VF.otf.ttc<axis tag="wght" stylevalue="600" \/><\/font>\n<font weight="700" style="normal" index="1" fallbackFor="serif" postScriptName="NotoSerifCJKjp-ExtraLight">NotoSerifCJK-VF.otf.ttc<axis tag="wght" stylevalue="700" \/><\/font>\n<font weight="900" style="normal" index="1" fallbackFor="serif" postScriptName="NotoSerifCJKjp-ExtraLight">NotoSerifCJK-VF.otf.ttc<axis tag="wght" stylevalue="900" \/><\/font>\n<\/family>\n<family lang="ko">\n<font weight="400" style="normal" index="1" postScriptName="NotoSansCJKjp-Regular">NotoSansCJK-Regular.ttc<\/font>\n<font weight="400" style="normal" index="1" fallbackFor="serif" postScriptName="NotoSerifCJKjp-Regular">NotoSerifCJK-Regular.ttc<\/font>\n<\/family>/};
6586
' $MODPATH$SYSTEMFILEPATH$FILE
66-
sed -i 's/<\/familyset>/<family>\n<font weight="400" style="normal">DroidSansFallbackFull.ttf<\/font>\n<\/family>\n<\/familyset>/g' $MODPATH$SYSTEMFILEPATH$FILE
6787
fi
6888
done
6989
done
@@ -73,10 +93,15 @@ FILECUSTOMPATH=/product/etc/
7393
SYSTEMFILECUSTOMPATH=/system$FILECUSTOMPATH
7494
if [ -f $FILECUSTOMPATH$FILECUSTOM ]; then
7595
ui_print "- Migrating $FILECUSTOM"
76-
mkdir -p $MODPATH$SYSTEMFILECUSTOMPATH
7796
if $CMDPREFIX grep -q "google-sans" $FILECUSTOMPATH$FILECUSTOM ; then
7897
# Google Pixel's RRO
79-
$CMDPREFIX cp -af $FILECUSTOMPATH$FILECUSTOM $MODPATH$SYSTEMFILECUSTOMPATH$FILECUSTOM
98+
mkdir -p $MODPATH$SYSTEMFILECUSTOMPATH
99+
if [ ! -f $BAKPATH$FILECUSTOMPATH$FILECUSTOM ]; then
100+
ui_print "- Backup $FILE to $BAKPATH"
101+
mkdir -p $BAKPATH$FILECUSTOMPATH
102+
$CMDPREFIX cp -af $FILECUSTOMPATH$FILECUSTOM $BAKPATH$FILECUSTOMPATH$FILECUSTOM
103+
fi
104+
cp -af $BAKPATH$FILECUSTOMPATH$FILECUSTOM $MODPATH$SYSTEMFILECUSTOMPATH$FILECUSTOM
80105
sed -i '
81106
/<family customizationType=\"new-named-family\" name=\"google-sans-medium\">/,/<\/family>/ {/<\/family>/! d;
82107
/<\/family>/ s/.*/ <alias name="google-sans-medium" to="google-sans" weight="500" \/>/};

extra/changelog.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
# Changelog v27
1+
# Changelog v28
22

3-
* Added an installation warning for Android 15+
4-
* Removed an old font that prevent MinikinFont from loading with an NPE when Magisk/KernelSU triggers unmounting.
3+
* Fonts patching on the fly. See [chws_subset](../chws_subset/__init__.py)
4+
* Removed old fonts that prevent MinikinFont from loading with an NPE when Magisk/KernelSU triggers unmounting.
55

6-
> The fonts were modified by `subset_noto_cjk.py` to remove cmap entries for characters that should default to the emoji style on Android.
7-
> The fonts have been modified to include a `chws` table.
8-
> See https://github.com/WordlessEcho/patch-noto-cjk-for-android for more details.
6+
> Fonts files are provided by [noto-cjk](https://github.com/googlefonts/noto-cjk) from Google.
7+
> The fonts have been modified using [chws_subset](../chws_subset/__init__.py). For more details, please visit https://github.com/WordlessEcho/patch-noto-cjk-for-android

module.prop

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
id=notocjk
22
name=NotoCJK
3-
version=27 (Sans-2.004-VF/Serif-2.003-VF)
4-
versionCode=27
3+
version=28 (Sans-2.004-VF/Serif-2.003-VF)
4+
versionCode=28
55
author=simonsmh
66
description=NotoCJK (NotoSansCJK & NotoSerifCJK) full weight fonts patch for every Android devices.
77
updateJson=https://cdn.jsdelivr.net/gh/simonsmh/notocjk/version.json

0 commit comments

Comments
 (0)