Android Gradle - Implementation、releaseImplementation和debugImplementation之间的区别

26

我在Android Studio中有一个安卓应用程序。我使用的是Gradle版本=4.6,Android插件版本=3.2.1。它有一个应用程序模块(main)和一个库模块。

我重命名了library模块中的一个类函数。在清理并编译了library模块后,紧接着编译了app模块,但是在app模块中出现了错误:error: 无法找到已重命名的类函数标识符

下面是我的build.gradle(app)文件:

android {
...
}
dependencies {
...
  releaseImplementation 'com.example.library:1.0.0'
  debugImplementation project(':library')
}
如果我将build.gradle更改为下面这个版本,那么一切都没问题。
android {
}
dependencies {
...
  implementation project(':library')
}

我想了解implementationreleaseImplementationdebugImplementation之间的区别,以及在我的情况下如何使用它。

我希望您能够为我解释implementationreleaseImplementationdebugImplementation这三个词的不同之处,并指导我如何在我的情况下使用它们。

1个回答

36

implementation 将向所有构建变体应用依赖关系。如果您想仅为特定的构建变体源集或测试源集声明依赖项,则必须将配置名称大写,并在其前面加上构建变量或测试源集的名称。

例如:如果您需要为调试、发布和免费构建变体分别使用不同的依赖项(分别为 my-library-debugmy-librarymy-library-free),则必须使用以下语法:debugImplementationreleaseImplementationfreeImplementation

debugImplementation 'com.test.package:my-library-debug:1.0' 

releaseImplementation 'com.test.package:my-library:1.0' 

freeImplementation 'com.test.package:my-library-free:1.0' 

注意:在上述情况中,如果您只使用

implementation 'com.test.package:my-library:1.0'

那么您所有的构建(如调试和免费类型)都只会拉取 my-library,这可能不是您想要的。

在此处阅读更多信息(您还可以结合产品风味和构建类型,以针对更特定的构建变体):https://developer.android.com/studio/build/dependencies#dependency_configurations


如果我添加的是一个模块或库项目而不是一个jar文件,该怎么办?我尝试使用以下方式,但无法正常工作。implementation project(':Library')可以正常工作。现在我用freeDebugImplementation project(path:':Library')和paidDebugImplementation project(path:':Library')替换了它。库模块还有其他规则吗? - Parmeshwar C
1
Android文档提到-https://developer.android.com/studio/build/dependencies#variant_aware Android插件3.0.0及更高版本包括一种新的依赖机制,可以在使用库时自动匹配变体。这意味着应用程序的调试变体会自动使用库的调试变体,以此类推。当使用flavor时,应用程序的freeDebug变体将使用库的freeDebug变体。并且为了使插件准确匹配变体,您需要为无法直接匹配的情况提供匹配的回退 - Vinayak Bevinakatti
@ParmeshwarC 我没有遇到过这种情况,所以引用了开发者文档。如果可以的话,请告诉我们是否有效。此外,如果您还没有看过它,这篇SO文章可能会对您有所帮助-https://dev59.com/qGAf5IYBdhLWcg3wQQu4 - Vinayak Bevinakatti

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