首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在android上使用serviceloader

在android上使用serviceloader
EN

Stack Overflow用户
提问于 2011-04-23 06:17:22
回答 5查看 5.5K关注 0票数 12

我对java和android开发非常陌生,为了学习,我正在尝试从一个像munin那样收集统计数据和信息的应用程序开始。这些插件已经在应用程序中了,但我不想单独调用它们,但可以遍历它们。我正在尝试使用serviceloader,但无法将META-INF/services放入我的apk中。

编辑:我正在询问java.util.ServiceLoader,我认为它应该是这样的,但是我不知道如何将我的服务文件夹放入apk上的META-INF中

EN

回答 5

Stack Overflow用户

发布于 2013-11-12 06:19:28

有一个关于这个问题的开放的bug报告。请参阅https://code.google.com/p/android/issues/detail?id=59658

票数 5
EN

Stack Overflow用户

发布于 2012-02-02 23:09:31

ApkBuilder故意将APK INF文件夹排除在外;ApkBuilder.java中唯一的注释是“我们需要排除一些其他文件夹(如/META-INF)”,但没有其他解释。

即使在用ant添加了META-INF之后,如果你想使用Proguard,你仍然会遇到麻烦,它拒绝替换META-INF/services/*文件的内容或重命名它们(那是另一回事,作者想让Proguard保持不可知性)。

然而,使用maven的人可能想要检查https://github.com/pa314159/maven-android-plugin (名为“modified”的分支),它试图解决这两个问题。它是我一个月前为自己的Android项目修改的原始"android-maven-plugin“的分支。

它还为Proguard-4.7提供了一个补丁

希望这能有所帮助,欢迎任何反馈。

票数 4
EN

Stack Overflow用户

发布于 2013-12-17 11:32:34

我已经想出了一个可能适用于某些情况的解决方案。我使用的不是ServiceLoader,而是NetBeans附带的org.openide.util.Lookup类/库-它是ServiceLoader的超集。它本身并不需要NetBeans,而且似乎可以与Eclipse一起工作。有必要将您在应用程序中使用的任何ServiceLoader功能替换为Lookup等效项,并添加org-openide-util-lookup库。然后,您可以这样做:

代码语言:javascript
复制
Lookup lookup = new ProxyLookup(Lookup.getDefault(),
                Lookups.metaInfServices(myClass.getClassLoader(), "services/"));

并将您的服务文件从META-INF/ ServiceLoader /移动到services/。

请注意,由于有了ProxyLookup,它将继续在标准Java环境中工作,并且保持不变(即,在这些情况下,它将继续在META-INF/services中查找)。

以下是指向该库文档的链接:http://bits.netbeans.org/dev/javadoc/org-openide-util-lookup/org/openide/util/lookup/Lookups.html

更新

在使用它几天后,它似乎运行良好-我在不同环境(标准Java和Android)之间移动,它在每个位置都能正常工作。主要的缺点是必须手动将文件复制到/services目录。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5760607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档