我有一个已经在

JavaSE上工作的自定义字符集.

我的CharsetProvider的类在java.nio.charset.spi.CharsetProvider文件中指定,该文件位于META-INF / services中,所有内容都正常加载并按预期工作.

但是现在我也在android上使用lib,但是在Android-App中没有加载charset.

如何集成我的charset,以便在Android-App中使用它?

Charset.forName("MyCS");

目前我正在做一个像这样的解决方法:

public static String decode(String encoding, byte[] buffer, int offset, int length) {

String result = "";

try {

result = new String(buffer, offset, length, encoding);

} catch (UnsupportedEncodingException ex) {

MyCharsetProvider provider = new MyCharsetProvider();

Charset cs = provider.charsetForName(encoding);

if (cs == null) {

Logger.getLogger(Converters.class.getName()).log(

Level.SEVERE,null,ex);

result = new String(buffer, offset, length);

} else {

result = cs.decode(ByteBuffer.wrap(buffer, offset, length)).toString();

}

}

return result;

}

哪个有效,但对我来说似乎无效,因为每次我尝试使用自己的字符集进行解码时,都会抛出异常并创建一个CharsetProvider-Object.

单一模式可以减少课程的创建.但问题是避免完全直接使用MyCharsetProvider.

编辑:

由于在apk中缺少META-INF / services / java.nio.charset.spi.CharsetProvider,我可能会将proguard删除.然后我在proguard.cfg中尝试了以下选项:

-adaptresourcefilenames **.CharsetProvider

-adaptresourcefilecontents **.CharsetProvider

但问题仍然存在.那么如何使用ant(netbeans)自动将META-INF / services中的这些文件导入到我的apk中?

更多推荐