如何在Gradle/Android Studio中使用代码修改更新从外部库项目导入的模块

7
我正在开发一个安卓应用,在最近从Eclipse迁移到了Android Studio和Gradle。
在我的项目中,我创建了5个UI库,并将它们作为模块添加到了我的项目中。我创建的这些库已经公开发布在了我的github账户上。
在Eclipse中,当你为一个标记为库的项目添加外部依赖时,当你更新外部项目的代码后,你需要清除构建,你的项目就会得到这些更新。但是在Gradle中,我注意到它会创建物理副本,完全独立于它们的源代码。我的问题是如何仅更改外部库并更新我的项目。
以下是我的gradle配置文件的一段片段:
dependencies {
    // Libraries
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.google.android.gms:play-services:5.0.89'
    .
    .
    . 
    compile 'com.squareup.picasso:picasso:2.4.0'

    // Projects
    compile project(':com.shehabic.helpicon')
    .
    .
}

1
我有同样的问题!你能找到答案吗? - Dr. Ehsan Ali
1
是的,最终我做了一些更好的事情。非常抱歉我时间不够充裕,但最好的方法是将此库导出为本地Maven仓库,并在要求中使用mavenLocal();然后引用您的库。 - Shehabic
3个回答

1

如何使用外部库

我读到过不推荐使用外部库,但在调试时很实用:

  1. 文件 > 项目结构... > 加号添加模块

  2. "创建新模块"对话框:

    • 选择 "导入 .JAR/.AAR 包"
    • 找到并选择您的包,但在继续之前复制路径
    • 命名您的包
  3. 回到 "项目结构" 对话框:

    • 出现消息 "Gradle 项目同步进行中...",但需要点击 OK 才能实际开始构建。相反,您可以继续进行依赖项。
    • 选择 "app" 模块,转到 DEPENDENCIES 选项卡,并加号添加 MODULE DEPENDENCY
    • 选择您的模块
    • 点击 OK 开始构建。

这确实会在 Android 项目中创建一个您的包的副本,但它还会生成所有必要的信息和文件,您可以随时摆脱副本或让它保持原样。

您的模块已添加到 settings.gradle 文件中:

':app', ':module_name'

已为您的模块创建了一个 build.gradle 文件:

configurations.maybeCreate("default")
artifacts.add("default", file('package.jar'))

并且该依赖已经添加到了你的':app'的build.gradle文件中:

compile project(':module_name')
  1. 现在,访问您添加的模块的build.gradle文件并粘贴您复制的路径:

configurations.maybeCreate("default") artifacts.add("default", file('X:\Java\Applications\YourApplication\dist\package.jar'))

无论何时编辑您的包,只需“清理和构建”它。 每当您希望您的应用程序反映来自Android项目外部的包中的“更新”时,只需同步即可。 完成调试后,您可以删除模块、依赖项和旧副本,并将您的包的最新构建版本作为副本添加。


0

不要使用Studio的“打开模块设置”来添加模块。

只需在子应用程序的构建gradle中添加库的AAR文件的完整路径:

implementation files('/workspace/AndroidAppsBase/base_app/build/outputs/aar/base_app-debug.aar')

当您更改库项目并重新构建项目时,将创建一个新的.AAR文件。要在子项目中反映更改,只需重新构建即可。


这个问题已经有4年了,如果它是项目的一部分,那么不需要做任何事情,Gradle会为您处理。如果它是一个外部模块,那么mavenLocal()是一个好的选择,指向一个固定的目录并不是一个好主意。 - Shehabic
你好,请问您能否分享一下为什么这不是一个好主意?我的应用程序已经有10年历史了,我是在Eclipse中开发的。在过去的一周里,我开始将所有的应用程序迁移到最新的API和Android Studio,并且目前我的方法正在起作用。但我想知道是否有任何我忽略的问题。我的库项目是我开发的一个独立项目,我的许多单独的项目都使用了这个库。 - nirav dinmali
因为像这样的本地目录存在于您当前的计算机上,如果您更改到另一台计算机或使用任何版本控制系统,则您的路径将变为无效。 - Shehabic

0

你不能将外部库添加为模块。这会在你的项目文件夹下复制它。

你需要做的是:

1)删除当前项目中的库文件夹。 2)打开“setting.gradle”文件并添加以下内容:

include ':your_external_library_module_name', ':perhaps_second_external_library'

project (':your_external_library_module_name').projectDir = new File('../path/to/your/external/library')
project (':perhaps_second_external_library').projectDir = new File('../path/to/your/second/external/library')

2) 在你的 'build.gradle' 文件中添加依赖项:

dependencies {
    compile project(':your_external_library_module_name')
    compile project(':perhaps_second_external_library')
}

3) 同步项目,完成。


它给我一个错误 Error:Configuration with name 'default' not found. - Pranjal Choladhara
它出现了错误:无法解决依赖项“:app@debug/compileClasspath”的问题:无法解决项目:“app-debug”。 - utarid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接