Gradle 3.0“编译”到“实现”迁移不适用于fileTree

时间:2018-01-31 05:27:17

标签: android android-gradle

我正在尝试删除所有lint警告但我仍然遇到compileimplementation之一的迁移。

如果我改变了这个:

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

到此:

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

然后应用程序将无法构建,我收到以下错误:

  

错误:无法解析以下类的超类型。请确保您在类路径中具有所需的依赖项:...未解析的超类型:veg.mediaplayer.sdk.MediaPlayer.MediaPlayerCallback

这是一个错误还是我应该为fileTree做些不同的事情?我找不到任何关于文档的解释:https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html

我已将所有gradle文件中的所有其他行从compile更改为implementation,并且它们都正常工作。

编辑:我还应该注意,这个特定的模块在lib文件夹中有一个jar。对于没有罐子的模块,它可以工作。

编辑2:我注意到,如果有一个罐子,实际上并不总是会发生。我有另一个模块与jar(我创建),它工作正常。 mediaplayersdk.jar必定有问题。

鉴于它只是抱怨从jar文件中实现的回调,我想这就是它被卡住的地方。

我也尝试使用Android Studio 3.1.0-beta1和gradle 4.4,但它没有帮助。

3 个答案:

答案 0 :(得分:18)

好的我现在觉得自己像个白痴。我所要做的就是更仔细地阅读文档,我会看到api相当于compile并且得到了支持。

使用api有效!

即。 api fileTree(include: ['*.jar'], dir: 'libs')

答案 1 :(得分:0)

来自Gradle迁移文档

  

当您的模块配置实现依赖项时,它让Gradle知道模块不希望在编译时将依赖项泄漏给其他模块。

另外

  

以前,库模块将以非标准方式处理本地JAR的依赖关系,并将它们打包在AAR中。即使在多项目构建中,AAR的消费者也会通过打包版本看到这些JAR文件。

  

库模块不再处理本地JAR。这是为了加快由库模块代码更改引起的增量构建。

因此,如果您要保留任何本地广告,则可能需要使用compile。但请注意,即将发布的Android插件重要版本中将删除compile及旧版本。

答案 2 :(得分:-3)

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

为我工作