【问题标题】:Preferable way to use dependencies in build.gradle: compile or compile file?在 build.gradle 中使用依赖项的首选方式:编译还是编译文件?
【发布时间】:2016-04-21 01:41:50
【问题描述】:

我在我的项目中使用了许多外部库,因为它通过减少工作量来节省大量精力。我更喜欢 gradle 构建机制。 由于 Gradle 提供了以下添加依赖项的方法:

  1. 将其用作外部库(当库不可用时我更喜欢)

    compile 'com.squareup.picasso:picasso:2.5.2'
    
  2. 通过添加可用的jar

    compile files('libs/picasso-2.5.2.jar')
    

在项目中使用库的最佳做法是什么?以上方式使用依赖的优缺点是什么?

【问题讨论】:

  • 你是手动下载你的jar文件吗?他们不是生活在像 nexus 或 artifactory 这样的存储库中吗?
  • @RaGe 我大部分时间都在离线工作,因此将 jars 保存在硬盘上有助于我继续工作。
  • 好吧,gradle(甚至 maven)依赖缓存的工作方式,如果你在在线时运行一次 gradle build,所有的依赖都会被下载并存储在你的本地缓存中。如果您不更改依赖项,则后续构建可能会脱机,从缓存中获取所需的文件。您甚至可以使用 --offline 标志强制离线行为。在这个时代,我发现很难找到任何充分的理由使用 jar 文件夹作为依赖项,尤其是对于标准库,甚至对于您自己开发的库也是如此。
  • 我最后一次使用 jar 文件夹是当我在一个 corp 代理后面时,它阻止我通过 https 访问 mavenCentral()。即便如此,在我弄清楚如何将代理证书添加到 java 信任库之前,这也是暂时的。

标签: android gradle android-gradle-plugin build.gradle build-dependencies


【解决方案1】:

考虑:

  • 使用任何这些解决方案都不会对应用性能产生任何影响
  • 复制粘贴 Gradle 行比复制粘贴文件更快
  • 当新版本的库发布时更新 Gradle 行更容易。只需更改几个数字。您甚至可以将其设置为自动更新
  • 当涉及到 Android 库时,您会在有可用更新时收到通知
  • 有时您可能无法访问互联网,而在这些情况下,您的硬盘驱动器上有一个现成的 .jar 文件会比较好

我自己,我尽可能使用 Gradle。它只是让我的开发过程更快更容易。


更新为了让我的回答更完整:

  • Rémi Pradal 在his answer 中也有非常有趣的见解:

使用编译文件 [...] 将大大增加存储库的大小,因为您可能会提交 .jar 文件。

【讨论】:

  • 离线使用 jar 或通过存储库使用时,apk 大小是否有任何差异。文物?我期待在大小和利弊方面会有更多差异!
  • 大小没有区别,两种方法都将整个库编译到您的 apk 中。如果你想删除未使用的类,我建议使用 ProGuard。顺便说一句,删除未使用的代码对 apk 大小的影响很小,删除资源的影响更大。
【解决方案2】:

应用程序性能不取决于您使用哪种方法进行依赖项管理。依赖管理是为了让开发人员的生活更轻松。

考虑到这一点,某个特定库的新版本发布时几乎没有附加功能,而您希望迁移到新版本。如果您使用第二种方法,则必须删除现有的 jar 文件并下载新版本的 jar 文件并将其包含在您的代码库中。但是,如果您使用第一种方法,则只需更改版本即可。

总之,如果库或 jar 在 Maven(或任何全局存储库)中可用,请使用第一种方法。如果 jar 只能直接下载,我们没有其他选择,请使用第二种方法。

另外,对于第二个选项,您可以在一行中将所有 jar 文件添加到项目中,如下所示:

compile fileTree(dir: 'libs', include: ['*.jar'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 2013-02-08
    • 2014-03-22
    相关资源
    最近更新 更多