有人决定默认情况下加拿大应该有24小时制,因此我需要修改ICU数据。在Android 5.1上,我可以在<slug>
中进行“制作”并将生成的icu4c/source/data
放到icudt53l.dat
中的设备上
在Android 8.1上,我尝试了相同的操作,但是设备无法启动。
/system/usr/icu.
我没有对任何数据文件进行任何实际更改。产生的 09-27 15:12:14.667 E/Zygote ( 8313): System zygote died with exception
09-27 15:12:14.667 E/Zygote ( 8313): java.lang.ExceptionInInitializerError
09-27 15:12:14.667 E/Zygote ( 8313): at android.icu.lang.UCharacter.getUnicodeVersion(UCharacter.java:3877)
09-27 15:12:14.667 E/Zygote ( 8313): at android.icu.text.StringPrep.<init>(StringPrep.java:277)
09-27 15:12:14.667 E/Zygote ( 8313): at android.icu.text.StringPrep.getInstance(StringPrep.java:314)
09-27 15:12:14.667 E/Zygote ( 8313): at android.icu.impl.IDNA2003.<clinit>(IDNA2003.java:37)
09-27 15:12:14.667 E/Zygote ( 8313): at java.lang.Class.classForName(Native Method)
09-27 15:12:14.667 E/Zygote ( 8313): at java.lang.Class.forName(Class.java:453)
09-27 15:12:14.667 E/Zygote ( 8313): at com.android.internal.os.ZygoteInit.preloadClasses(ZygoteInit.java:300)
09-27 15:12:14.667 E/Zygote ( 8313): at com.android.internal.os.ZygoteInit.preload(ZygoteInit.java:128)
09-27 15:12:14.667 E/Zygote ( 8313): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
09-27 15:12:14.667 E/Zygote ( 8313): Caused by: java.util.MissingResourceException: could not locate data
09-27 15:12:14.667 E/Zygote ( 8313): at android.icu.impl.ICUData.getStream(ICUData.java:145)
09-27 15:12:14.667 E/Zygote ( 8313): at android.icu.impl.ICUBinary.getData(ICUBinary.java:499)
09-27 15:12:14.667 E/Zygote ( 8313): at android.icu.impl.ICUBinary.getRequiredData(ICUBinary.java:453)
09-27 15:12:14.667 E/Zygote ( 8313): at android.icu.impl.UCharacterProperty.<init>(UCharacterProperty.java:1221)
09-27 15:12:14.667 E/Zygote ( 8313): at android.icu.impl.UCharacterProperty.<clinit>(UCharacterProperty.java:1437)
09-27 15:12:14.667 E/Zygote ( 8313): ... 9 more
比同一文件的提交版本(看起来不太正确)小约3k。
有什么想法吗?
答案 0 :(得分:0)
我在Android 8.1源代码中遇到了同样的问题。在我的情况下,由于icudt58l.dat中没有ubidi.icu文件,因此将引发MissingResourceException。
在Makefile中,ubidi.icu包含在UNI_CORE_DATA中,仅在ifneq($(INCLUDE_UNI_CORE_DATA),)中构建。
也就是说,您必须在make命令中包含INCLUDE_UNI_CORE_DATA。
make INCLUDE_UNI_CORE_DATA=1
这是我使用的所有命令:
cd external/icu/icu4c
mkdir build
cd build
../source/runConfigureICU Linux --with-data-packaging=archive
# work around if there is no xlocale.h file in your environment
sudo ln -s /usr/include/locale.h /usr/include/xlocale.h
make INCLUDE_UNI_CORE_DATA=1
adb root; adb remount; adb push ./data/out/icudt58l.dat system/usr/icu/icudt58l.dat
adb shell stop; adb shell start