1

将 Android Studio 和 gradle 更新到 3.1 后,我将所有compile语句更改为implementation. 但是当我构建时,android studio 无法解析在 3rd 方库中找到的导入。

场景:主项目导入子模块,子模块也导入一个 jar 文件。

当我尝试将 jar 文件中的类导入主项目时,android studio 无法解决它。

如何导入单个文件而无需在主项目中添加 jar 文件作为依赖项?

4

3 回答 3

2

您应该使用api它,它是新的或直接在您的主项目中compile具有依赖项。只需更改为即可解决问题,但您会考虑尽可能使用以缩短构建时间。implementationapiimplementation

您可以在此处api看到和之间的区别。implemenation

于 2018-04-03T12:01:54.503 回答
1

@nongthonbam-tonthoi 的答案是正确的,但他没有解释原因。

精简版

实现- 对其他模块(依赖于该模块)隐藏此依赖项。如果B取决于A,它不能使用在Ausing中声明的任何 dep implementation

api - 使其可用于依赖此模块的其他模块。即,如果您将GSON添加为模块中的 depA使用api而不是implementation,则所有其他依赖的模块都A可以使用GSON而无需再次声明它。

长版

implementation是一种只为给定模块声明依赖关系的方法。这意味着,依赖项只能在该特定模块中使用。compile另一方面,将依赖项“泄漏”到其他模块,以便您可以导入和使用 dep 在其他模块中引入的类。如果你想要这种行为,新的做法是使用api.

此更改特别针对多模块项目,因为它可以帮助 gradle 避免在构建期间重新编译未更改的模块。

但是,如果您从旧项目迁移,您可能会(ab)使用 compile 来使用在其他模块中声明的依赖项,而无需再次明确声明它们。

您可以继续使用compile,但请记住它已被弃用,很快就会被删除。

有关更深入的解释,请参见此处

于 2018-04-03T14:05:59.393 回答
0

编辑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

于 2018-04-06T17:51:06.557 回答