0

我在安卓产品设备上运行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 非常复杂,谁能告诉我任何线索来跟踪这个问题?或者我应该如何继续跟踪问题?

非常感谢。

4

3 回答 3

0

这个问题还没有解决,我会提供更多信息希望有人能提供帮助。

  1. 通过一些调试,我发现 GB18030 不受支持,因为 GB18030 转换器不可用。

  2. 在'/android_root/source/external/icu4c/stubdata/readme.txt'中可以看到Android上可用的转换器(没有GB18030转换器):

    • cnv/*.cnv 是 Android 需要的附加编码。这些是
    • gsm-03.38-2000.cnv
    • iso-8859_16-2001.cnv
    • docomo-shift_jis-2007.cnv
    • kddi-jisx-208-2007.cnv
    • kddi-shift_jis-2007.cnv
    • softbank-jisx-208-2007.cnv
    • softbank-shift_jis-2007.cnv

所以这主要是一个构建问题,有没有人知道如何在Android上构建ICU4C以及如何添加gb18030转换器?

我正在尝试构建 ICU4C,但尚未成功。

于 2011-03-09T09:59:45.787 回答
0

我已经解决了这个问题。事实上,这是一个构建问题,不是由 ICU4C 引起的。在 make 文件中,必须设置 PRODUCT_LOCALE。然后建成后,CTS就可以通过了。

于 2011-03-19T06:36:51.567 回答
0

我已经用 icu 版本 4.6 做到了这一点。下载 icu 并从 android.mk 中的 dir "common" .c 和 .cpp 文件中绑定所有代码。创建一个静态库并在 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”。

马库斯

于 2011-05-16T10:38:09.227 回答