java - Android Studio 动态加载库

标签 java android gradle shared-libraries dex

我有一个使用 DexClassLoader 动态加载库的 Android 应用程序。到目前为止,应用程序和库是在不同的项目中开发的。我想将项目合并为一个项目(一个项目中有两个模块?)但我不确定如何使用 Android Studio/Gradle 实现它。请注意,我不想在应用程序和库之间添​​加静态依赖项。我想要达到的结果是:

  1. 应用程序和库都在同一个项目中。
  2. 应用程序和库的构建可能分为两个独立的步骤(但一个步骤可能很好 :D )。
  3. 编译后的库最终必须成为应用程序的 Assets ,并 bundle 在生成的 APK 中;即,不是静态编译到应用程序中,而是作为 APK 中的独立文件。

有什么想法吗?

最佳答案

如果您想将您的模块引入您的项目,您可以在您的项目中编辑文件 settings.gradle 以包含该模块并提供其路径。

include ':app' //your project module name
include ':library' //your imported module name
project(':library').projectDir = new File("/<path_to_module_library>/other_project/library")

然后该模块将出现在您的项目中。

如果您转到项目 gradle 文件(例如:build.gradle),您现在可以将模块作为项目依赖项包含在内。

dependencies {
...
   compile project(':library')
...
}

编辑

如果您只想自动将您的 jar 从您的库复制到您项目的 Assets 文件夹,您可以简单地定义一个 gradle task在你的库 build.gradle 中:

task copyTask(type: Sync) {
    from '/<path_to_your_jar>/classes.jar'
    into '/<path_to_your_project>/app/assets/'
}

这会将您的 jar 复制到您的 Assets 文件夹。

要在编译代码时使用它,可以将此任务添加到运行/调试配置中。

enter image description here

关于java - Android Studio 动态加载库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35583269/

相关文章:

java - 如何从字符串中找出出现次数最多的数字?

android - SendGrid for android“依赖被忽略发布,因为它可能与Android提供的内部版本冲突

grails - 我在GGTS中得到的解决方法是什么?

java - 通用方法 - 不能应用于给定类型

java - 安装 ubuntu 12.04 后 eclipse 中的跳跃动画详细信息(来自 askubuntu.com 的 x-post)

安卓工作室 : Error in 'getDefaultdProguarFile()'

iphone - iPhone 和 Android 上的内存对齐

java - 试图为Android Gradle创建Java库的工作正在中断

android - gradle Exec block 不应因非零输出而失败

java - Apache Tiles 与 Spring MVC 给出错误 - 无法实例化 WebApplicationInitializer 类