5

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/servicesant(netbeans)を使用してこれらのファイルをapkから自動的に取得するにはどうすればよいですか?

4

1 に答える 1