android – 在apk中保留’META-INFservices’文件

android – 在apk中保留’META-INFservices’文件,第1张

概述我有一个已经在 JavaSE上工作的自定义字符集. 我的CharsetProvider的类在java.nio.charset.spi.CharsetProvider文件中指定,该文件位于META-INF / services中,所有内容都正常加载并按预期工作. 但是现在我也在android上使用lib,但是在Android-App中没有加载charset. 如何集成我的charset,以便在And @H_301_0@我有一个已经在 JavaSE上工作的自定义字符集.

我的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’文件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1140943.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存