魅力程序猿

  • 首页
  • Java
  • Android
  • APP
    • 扑克计分器
    • Video Wallpaper
  • 联系我
  • 关于我
  • 资助
道子
向阳而生
  1. 首页
  2. Android
  3. 正文

解决WARNING: API 'variant.getJavaCompile()' is obsolete and has been replaced with 'variant.getJavaCompileProvider()'

2019年1月16日 25609点热度 0人点赞 0条评论
最近AndroidStudio升级到3.3版本,Android的Gradle plugin升级到了3.3.0,构建版本的时候出现一些警告。
WARNING: API 'variant.getGenerateBuildConfig()' is obsolete and has been replaced with 'variant.getGenerateBuildConfigProvider()'.
It will be removed at the end of 2019.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance

WARNING: API 'variant.getJavaCompile()' is obsolete and has been replaced with 'variant.getJavaCompileProvider()'.
It will be removed at the end of 2019.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance

WARNING: API 'variant.getMergeResources()' is obsolete and has been replaced with 'variant.getMergeResourcesProvider()'.
It will be removed at the end of 2019.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance

WARNING: API 'variant.getPackageLibrary()' is obsolete and has been replaced with 'variant.getPackageLibraryProvider()'.
It will be removed at the end of 2019.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance.
因为app.gradle里的构建代码里使用javaCompiler、mergeResources等android gradle 的Task进行对资源和代码进行动态修改。虽说只是一个警告,但是总有一天会T除的。我就仔细看看了Android的gradle的构建代码,找到了解决方法。
先看一下代码:
注解写的很清楚了,javaCompiler已经@Deprecated了,建议使用javaComplieProvider
我们先看要修改的代码
android {
    applicationVariants.all { variant ->
        def isRelease = variant.buildType.name.equalsIgnoreCase('release')
        if (isRelease) {
            variant.mergeResources.doFirst {
                if(variant.flavorName.equalsIgnoreCase('_0')){
                    //deleteAndroidOIcon(defAndroidOIconDir)
                }
            }

            variant.javaCompiler.doLast {
                if(variant.flavorName.equalsIgnoreCase('_0')){
                    //addAndroidOIcon(srcAndroidOIconDir)
                }
            }
        }
    }
}
那代码怎么修改呢?
我们从上边的TaskProvider<JavaCompile> getJavaCompileProvider();接口可以看出,返回的是TaskProvider<JavaCompile>,那我再看一下TaskProvider
很简单,到这里是不是知道怎么修改代码了,废话不多说了,我直接告诉大家怎么修改
android {
    applicationVariants.all { variant ->
        def isRelease = variant.buildType.name.equalsIgnoreCase('release')
        if (isRelease) {
            variant.mergeResourcesProvider.configure{
                it.doFirst{
                    if(variant.flavorName.equalsIgnoreCase('_0')){
                        //deleteAndroidOIcon(defAndroidOIconDir)
                    }
                }
            }
            variant.javaCompileProvider.configure {
                it.doLast{
                    if(variant.flavorName.equalsIgnoreCase('_0')){
                        //addAndroidOIcon(srcAndroidOIconDir)
                    }
                }
            }
        }
    }
}
注意一下我标红的代码,就是这么简单,其他类似的警告都这样修改一些,就不再有警告了,而且能正常运行。
Android Studio更新到3.4会出现以下警告:
WARNING: API 'variant.getPackageLibrary()' is obsolete and has been replaced with 'variant.getPackageLibraryProvider()'.
It will be removed at the end of 2019.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance.
这个警告引起的原因是构建脚本里使用了variant.getPackageLibrary()这个api,如果你搜索自己的项目没有找到使用的地方,那就是其它插件使用了。
据我知道的是kotlin编译的时候就使用了variant.getPackageLibrary(),还会有其它插件或者开源module在使用。例如:React Native、Fabric等。
React Native、Fabric只需升级到最新的版本。
kotlin还在修改当中,实时关注着更新,这个问题我相信kotlin会解决的。
如果帮到你了,请你打赏一下。
标签: variant.getJavaCompile() variant.getMergeResources()
最后更新:2019年1月16日

daozi

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >
搜索
联系方式

QQ群:179730949
QQ群:114559024
欢迎您加入Android大家庭
本人QQ:136049925

赐我一丝安慰
给我一点鼓励

COPYRIGHT © 2023 魅力程序猿. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

豫ICP备15000477号