11

我想编写一个可以用模块(android 库)扩展的 android 应用程序。模块应在运行时加载。因此,它们将从 url 下载并存储在目录中。模块是 aar 文件。

有没有办法在运行时动态加载 aar 文件?

我知道可以使用 URLClassLoader 加载包含的 classes.jar。但是我无法加载布局、字符串、...资源。HM

有谁知道如何解决这个问题?

编辑:

我发现了一些相关的主题:

由于第一个链接的答案,它似乎不起作用。我希望我的这种想法是错误的。

4

2 回答 2

1

有一个 gradle 插件可以帮助将 aar 解耦为资源和 dexes。检查这一点当您使用注入依赖项构建项目时,此插件提取 aar 并将资源与您的项目资源合并,然后合并清单,然后收集所有 jars(在每个 aar 和仅 jar 依赖项内)并创建一个 dex 文件,您可以上传到任何服务器并在运行时下载该 dex 并加载。

于 2018-05-30T18:10:12.480 回答
0

我有一种类似的问题。我想在运行时添加插件而不强制用户重新安装应用程序。

我在“ The Busy Coder's Guide to Android Development ”一书中找到了一个很好的章节,叫做“Plugin Patterns” 。我仍在阅读它,所以不能说它是否完全满足您的需求,但它包含大量可能对您的情况有用的信息。

这是该章节的示例,可在书籍网页上找到,因此您可以大致了解它所涵盖的内容

就本章而言,“插件模型”是指由其他应用程序(“插件”)扩展的应用程序(插件“主机”),这些应用程序主要用于该工作。

当然,应用程序可以通过多种方式协同工作,而无需将其中的一个作为另一个插件。例如,当您调用 startActivity() 来查看网页时,用户的 Web 浏览器不是您的应用程序的插件。

相比之下,Locale 应用程序可以通过插件进行扩展,这些插件可以由上午 244 分(Locale 的作者)或第三方编写。这些插件对用户没有真正的价值,除了它们如何改进 Locale 本身可以做的事情。因此,这种结构有资格作为插件模型。

特别是,本章将重点关注需要插件模型的两种一般场景,尽管其他场景肯定存在:

您希望允许第三方扩展您的应用程序的功能,就像使用 Locale 时需要的凌晨 2 点 44 分一样,或者您希望通过将一些权限委派给插件来减少核心应用程序中的权限数量,以便用户可以“选择加入”那些权限

我希望这会有所帮助。

于 2017-02-10T19:28:07.337 回答