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.cfg で次のオプションを試しました。
-adaptresourcefilenames **.CharsetProvider
-adaptresourcefilecontents **.CharsetProvider
しかし、問題はまだ解決していません。META-INF/services
ant(netbeans)を使用してこれらのファイルをapkから自動的に取得するにはどうすればよいですか?