简短的总结是:如何构建 APK 和单独的库(我指的是某种形式的类集(理想情况下也是资源),例如 JAR、AAR 或 DEX 文件),但不将这些库包含在应用程序;相反,应用程序在运行时加载它们?
Detail
所以我的主要问题是如何构建这样的应用程序(例如 Gradle 配置)。如何指定哪些类进入哪些 JAR 或 DEX 文件?我是否要为我想要最终得到的每个 DEX 文件创建一个 Android Studio 模块?
一个密切相关的问题是 Java 代码应该如何加载外部库并在运行时访问它们的类。对于后者,我希望所显示的方法通过类加载器从 dex 文件访问应用程序的类 https://stackoverflow.com/questions/20068040/accessing-to-classes-of-app-from-dex-file-by-classloader/20068461会工作。
我已经尝试过以下说明https://developer.android.com/studio/projects/android-library.html https://developer.android.com/studio/projects/android-library.html,但这会构建一个 APKdoes包括依赖库。
我也尝试过 Multidex (https://developer.android.com/studio/build/multidex.html https://developer.android.com/studio/build/multidex.html),但这似乎并没有让开发人员能够控制哪些类进入哪个 DEX 文件,而且,将它们全部打包到一个 APK 中。 AFAICT 无法在运行时控制这些 DEX 文件的加载。
背景
有一种可能性是“X-Y问题 http://mywiki.wooledge.org/XyProblem” 说到这里,我最好先解释一下背景。
我正在为客户构建一个应用程序。它不会通过应用程序商店分发,因此无法访问正常的更新机制。相反,客户端希望应用程序能够通过下载自身的新组件来替换旧组件来更新自身,而不需要手动旁加载新的 APK。这里的主要动机是更新必须对非技术用户来说很容易。如果应用程序可以控制更新过程,则可以使其顺利并引导用户。
此外,该应用程序将在互联网接入稀缺且昂贵的地区使用,因此客户希望能够以较小的块(例如 2MB)发布应用程序更新,而不是强迫用户重新下载整个应用程序以接收更新。小更新。
我应该提到的要求的一个方面(以防万一)是运行时加载的库应该位于 microSD 卡上。这也有助于在没有互联网访问的情况下分发更新。
该应用程序的当前状态是大约已编写 50%:也就是说,已经发布了几个早期版本,但该应用程序现在需要修改(重组)以满足上述要求以及其他要求。