我有一個已經在使用JavaSE的自定義字符集。保持'META-INF/services'文件在apk中
我的CharsetProvider的類是在文件java.nio.charset.spi.CharsetProvider
中指定的,該文件位於META-INF/services
中,並且所有內容都正常加載並按預期工作。
但是現在我在android上也使用了lib,但charset並沒有在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對象。
創建當然可以通過單例模式來減少。但問題是避免直接使用MyCharsetProvider。
編輯:
由於META-INF/services/java.nio.charset.spi.CharsetProvider
缺少的APK我雖然也許proguard的刪除。然後我在proguard.cfg中嘗試了以下選項:
-adaptresourcefilenames **.CharsetProvider
-adaptresourcefilecontents **.CharsetProvider
但是問題仍然存在。所以我怎麼能從META-INF/services
這些文件到我的apk自動使用螞蟻(netbeans)?
任何解決方法可以在不切換到Ant的情況下複製它? – Singagirl
@DmitriyR您使用哪種構建系統?我認爲這不會是eclipse-plugin的一個很好的解決方法。 – AlexS
我使用Eclipse,所以最後我設法導出了未簽名的.apk文件,然後編寫了一個腳本,添加了apk的簽名和ziplaligning路徑。不方便但有效。主要問題是我無法直接從Eclipse將其部署到模擬器。 – Singagirl