从第 3 方库导入 class。 Android Studio 3.1,Gradle 3.1
Import class from 3rd Party Library. Android Studio 3.1, Gradle 3.1
将 Android Studio 和 gradle 更新为 3.1 后,我将所有 compile
语句更改为 implementation
。但是当我构建时,android studio 无法解析在第 3 方库中找到的导入。
场景:主项目导入子模块,子模块也导入 jar 文件。
当我尝试将 class 从 jar 文件导入主项目时,android studio 无法解析它。
如何导入单个文件而不必在主项目中添加 jar 文件作为依赖项?
您应该改用 api
,它是新的 compile
或在您的主项目中直接 具有依赖项。只需将 implementation
更改为 api
即可解决问题,但您考虑尽可能使用 implementation
以缩短构建时间。
你可以看到 api
和 implemenation
here 之间的区别。
@nongthonbam-tonthoi的回答是正确的,但他没有解释原因。
短版
实现 - 对其他模块(依赖于此模块)隐藏此依赖项。如果 B
依赖于 A
,它不能使用 A
中使用 implementation
.
声明的任何 dep
api - 使依赖此 module.i 的其他模块可用。e 如果您添加说 GSON 作为模块 A
中的 dep 使用 api
而不是 implementation
,所有其他依赖 A
的模块都可以使用 GSON无需再次声明。
长版
implementation
是一种仅声明给定模块的依赖关系的方法。这意味着,依赖项只能在该特定模块中使用。 compile
另一方面 "leaks" 对其他模块的依赖,因此您可以导入和使用 dep 在其他模块中引入的 类。如果您想要这种行为,新的方法是使用 api
。
此更改特别针对 multi-module 项目,因为它可以帮助 gradle 避免 re-compiling 在构建期间未更改的模块。
但是,如果您是从一个旧项目迁移过来的,您很可能正在(ab)使用编译来使用在其他模块中声明的依赖项,而没有再次显式声明它们。
您可以继续使用 compile
,但请记住,它已被弃用,很快就会被删除。
请参阅 here 以获得更深入的解释。
编辑 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
将 Android Studio 和 gradle 更新为 3.1 后,我将所有 compile
语句更改为 implementation
。但是当我构建时,android studio 无法解析在第 3 方库中找到的导入。
场景:主项目导入子模块,子模块也导入 jar 文件。
当我尝试将 class 从 jar 文件导入主项目时,android studio 无法解析它。
如何导入单个文件而不必在主项目中添加 jar 文件作为依赖项?
您应该改用 api
,它是新的 compile
或在您的主项目中直接 具有依赖项。只需将 implementation
更改为 api
即可解决问题,但您考虑尽可能使用 implementation
以缩短构建时间。
你可以看到 api
和 implemenation
here 之间的区别。
@nongthonbam-tonthoi的回答是正确的,但他没有解释原因。
短版
实现 - 对其他模块(依赖于此模块)隐藏此依赖项。如果 B
依赖于 A
,它不能使用 A
中使用 implementation
.
api - 使依赖此 module.i 的其他模块可用。e 如果您添加说 GSON 作为模块 A
中的 dep 使用 api
而不是 implementation
,所有其他依赖 A
的模块都可以使用 GSON无需再次声明。
长版
implementation
是一种仅声明给定模块的依赖关系的方法。这意味着,依赖项只能在该特定模块中使用。 compile
另一方面 "leaks" 对其他模块的依赖,因此您可以导入和使用 dep 在其他模块中引入的 类。如果您想要这种行为,新的方法是使用 api
。
此更改特别针对 multi-module 项目,因为它可以帮助 gradle 避免 re-compiling 在构建期间未更改的模块。
但是,如果您是从一个旧项目迁移过来的,您很可能正在(ab)使用编译来使用在其他模块中声明的依赖项,而没有再次显式声明它们。
您可以继续使用 compile
,但请记住,它已被弃用,很快就会被删除。
请参阅 here 以获得更深入的解释。
编辑 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