我有一个已经在 JavaSE 上工作的自定义字符集。
我的 CharsetProvider 的类在一个文件中指定,java.nio.charset.spi.CharsetProvider
并且META-INF/services
所有内容都正常加载并按预期工作。
但是现在我也在 android 上使用 lib,但是字符集没有加载到 Android-App 中。
如何集成我的字符集,以便它可以像预期的那样在 Android 应用程序中使用?
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。
编辑 :
由于META-INF/services/java.nio.charset.spi.CharsetProvider
在 apk 中丢失了,我虽然可能 proguard 删除了它。然后我在 proguard.cfg 中尝试了以下选项:
-adaptresourcefilenames **.CharsetProvider
-adaptresourcefilecontents **.CharsetProvider
但问题仍然存在。那么如何META-INF/services
使用ant(netbeans)自动将这些文件从我的apk中获取?