我的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,length); } else { result = cs.decode(ByteBuffer.wrap(buffer,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中?
解决方法 蚂蚁我现在使用以下解决方案:
我创建了一个带有followin目标的custom_rules.xml,用于将meta-inf / services中的文件复制到未对齐和未签名的apk中.
<target name="-post-package" depends="-custom-copy" /><target name="-copy-custom"> <zip destfile="${out.packaged.file}" update="true" basedir="${source.absolute.dir}" includes="${custom.copy}" /></target>
在ant.propertIEs中我添加了这一行
custom.copy=meta-inf/services/**
现在我只需要将相关文件从库复制到我自己项目的meta-inf / services文件夹中,将它们包含在apk中.这使我可以完全控制ServiceLoader要加载的类.
备注:
目前我只以这种方式加载外部Java-SE-jar中包含的实现.如果实现在androID项目中,则可能必须配置模糊处理.
ECliPSE-PLUGIN
使用eclipse-plugin,没有像ANT那样的解决方法.问题是ExportHelper(第405行),它只是在meta-inf文件夹中输入所有内容.
AndroID的工作室/摇篮
根据这个Bug,您可以在主项目中定义一个meta-inf目录,这将被打包到您的apk中.库的meta-inf文件夹被排除在外,因此您必须指定要在自己的项目中使用的实现(我认为这是它的用意).
总结以上是内存溢出为你收集整理的android – 在apk中保留’META-INF / services’文件全部内容,希望文章能够帮你解决android – 在apk中保留’META-INF / services’文件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)