将 Android Studio 和 gradle 更新到 3.1 后,我将所有compile
语句更改为implementation
. 但是当我构建时,android studio 无法解析在 3rd 方库中找到的导入。
场景:主项目导入子模块,子模块也导入一个 jar 文件。
当我尝试将 jar 文件中的类导入主项目时,android studio 无法解决它。
如何导入单个文件而无需在主项目中添加 jar 文件作为依赖项?
将 Android Studio 和 gradle 更新到 3.1 后,我将所有compile
语句更改为implementation
. 但是当我构建时,android studio 无法解析在 3rd 方库中找到的导入。
场景:主项目导入子模块,子模块也导入一个 jar 文件。
当我尝试将 jar 文件中的类导入主项目时,android studio 无法解决它。
如何导入单个文件而无需在主项目中添加 jar 文件作为依赖项?
您应该使用api
它,它是新的或直接在您的主项目中compile
具有依赖项。只需更改为即可解决问题,但您会考虑尽可能使用以缩短构建时间。implementation
api
implementation
您可以在此处api
看到和之间的区别。implemenation
@nongthonbam-tonthoi 的答案是正确的,但他没有解释原因。
精简版
实现- 对其他模块(依赖于该模块)隐藏此依赖项。如果B
取决于A
,它不能使用在A
using中声明的任何 dep implementation
。
api - 使其可用于依赖此模块的其他模块。即,如果您将GSON添加为模块中的 depA
使用api
而不是implementation
,则所有其他依赖的模块都A
可以使用GSON而无需再次声明它。
长版
implementation
是一种只为给定模块声明依赖关系的方法。这意味着,依赖项只能在该特定模块中使用。compile
另一方面,将依赖项“泄漏”到其他模块,以便您可以导入和使用 dep 在其他模块中引入的类。如果你想要这种行为,新的做法是使用api
.
此更改特别针对多模块项目,因为它可以帮助 gradle 避免在构建期间重新编译未更改的模块。
但是,如果您从旧项目迁移,您可能会(ab)使用 compile 来使用在其他模块中声明的依赖项,而无需再次明确声明它们。
您可以继续使用compile
,但请记住它已被弃用,很快就会被删除。
有关更深入的解释,请参见此处。
编辑build.gradle (Module:app)
并将 SDK 版本更改为27.1.1
例如:
defaultConfig {
applicationId "com.projectname"
minSdkVersion 15
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
implementation 'com.android.support:appcompat-v7:27.1.1'
并重建项目并重新启动android studio