我在Android产品设备上运行CTS(基本代码是android 2.3),但以下情况失败了:
java.io.UnsupportedEncodingException: GB18030 at java.nio.charset.Charset.forNameUEE(Charset.java:317)
at java.nio.charset.Charset.forNameUEE(Charset.java:317)
at java.lang.String.getBytes(String.java:973)
at org.apache.harmony.luni.tests.java.lang.StringBufferTest.test_toString(StringBufferTest.java:101)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
at java.nio.charset.Charset.forName(Charset.java:304)
at java.nio.charset.Charset.forNameUEE(Charset.java:315)
at java.nio.charset.Charset.forNameUEE(Charset.java:317)
at java.lang.String.getBytes(String.java:973)
at org.apache.harmony.luni.tests.java.lang.StringBufferTest.test_toString(StringBufferTest.java:101)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
at java.nio.charset.Charset.forName(Charset.java:304)
at java.nio.charset.Charset.forNameUEE(Charset.java:315)
当我在Android SDK 2.3.3模拟器上运行相同的测试时,它已通过。
然后我比较了android 2.3.3和我的代码之间的源代码,没什么不同。 但我认为必须有一些我没有注意到的不同之处。 然后我发现这个问题与ICU4C有关,但是ICU4C非常复杂,任何人都可以告诉我跟踪这个问题的任何线索吗? 或者我该如何跟踪问题?
非常感谢。
答案 0 :(得分:0)
这个问题仍然没有解决,我会提供更多信息,希望有人可以提供帮助。
通过一些调试,我发现GB18030不受支持,因为GB18030的编号器不可用。
在'/android_root/source/external/icu4c/stubdata/readme.txt'中,可用 可以看到Android上的转换器(没有GB18030转换器):
所以这主要是构建问题,有没有人知道如何在Android上构建ICU4C以及如何添加gb18030转换器?
我正在尝试构建ICU4C,但尚未成功。
答案 1 :(得分:0)
我已经解决了这个问题。 实际上,这是一个构建问题,不是由ICU4C引起的。 在make文件中,必须设置PRODUCT_LOCALE。然后在构建之后,CTS可以通过。
答案 2 :(得分:0)
我用icu 4.6版做了这个。从android.mk中的dir“common”.c和.cpp文件下载icu并绑定所有代码。创建一个静态库,并使用application.mk中的以下标志对其进行编译。
APP_CPPFLAGS:= -DU_COMMON_IMPLEMENTATION -DU_STATIC_IMPLEMENTATION -DU_PALMOS APP_CFLAGS:= -DU_COMMON_IMPLEMENTATION -DU_STATIC_IMPLEMENTATION -DU_PALMOS
我发现平台头文件“ppalmos.h”正在运行,因此上面的预处理器指令“U_PALMOS”。
Makusi