API ‘variantOutput.getPackageLibrary()‘已过时的解决方法

news2025/1/11 9:53:33

一个发布到maven central的android库项目,为了方便管理,在build.gradle文件中加入了打包处理的一段脚本:

    //生成aar
    libraryVariants.all { variant ->
        def name = "library-${versionMajor}.${versionMinor}.${versionPatch}.aar"

        //打包输出文件名
        variant.outputs.all {
            outputFileName = name
        }

        //打包完成后的动作
        variant.assembleProvider.get().doLast {
            File out = new File("${project.rootDir}/maven")
            variant.outputs.all { file ->
                // 复制到指定文件夹
                copy {
                    from file.outputFile
                    into out
                }

            }
        }
    }

这段脚本是修改默认的输出文件名,并在打包完成后将打包文件复制到指定目录下。方便对打包文件的管理。
执行gradle任务assembleRelease生成aar,脚本的目的倒是实现了,但是build窗口会出现一个警告,显示如下内容:

API 'variantOutput.getPackageLibrary()' is obsolete and has been replaced with 'variant.getPackageLibraryProvider()'.
It will be removed in version 9.0 of the Android Gradle plugin.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance.
To determine what is calling variantOutput.getPackageLibrary(), use -Pandroid.debug.obsoleteApi=true on the command line to display more information.
Affected Modules: mylibrary

gradle.properties文件中加入一行android.debug.obsoleteApi=true,再次执行任务assembleRelease,警告内容变成如下所示:

API 'variantOutput.getPackageLibrary()' is obsolete and has been replaced with 'variant.getPackageLibraryProvider()'.
It will be removed in version 9.0 of the Android Gradle plugin.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance.
REASON: Called from: D:\Android\UtilsTest\mylibrary\build.gradle:90
WARNING: Debugging obsolete API calls can take time during configuration. It's recommended to not keep it on at all times.

其中REASON: Called from: D:\Android\UtilsTest\mylibrary\build.gradle:90这一行指明了出现警告的代码:from file.outputFile
file.outputFile是用来获取打包文件完整路径的脚本,也就是这行脚本调用了已经弃用,并且在gradle9.0中会移除的函数getPackageLibrary()

虽然目前对我的项目还没有什么影响,但我还是想把这个问题彻底解决掉。
file.outputFile不能用,就要另外想办法获得打包文件的路径。按照提示先把脚本改成下面这样,用println看看这个getPackageLibraryProvider()到底是个什么东东:

variant.assembleProvider.get().doLast {
    File out = new File("${project.rootDir}/maven")
    variant.outputs.all {
        def provider = variant.packageLibraryProvider.get()
        println("provider:$provider")
    }
}

provider输出结果是这样:

provider:task ':mylibrary:bundleReleaseAar'

呃,看不懂。
干脆在println("provider:$provider")这行下个断点,观察一下。
在这里插入图片描述
按上图所示选择Run/Debug的配置项,然后Debug。
在这里插入图片描述
观察provider变量,发现两个可疑属性。其实上面几个archiveFile、archiveFileName之类的也比较可疑,但这两个属性名更接近我们的目标。

variant.assembleProvider.get().doLast {
    File out = new File("${project.rootDir}/maven")
    variant.outputs.all {
        def provider = variant.packageLibraryProvider.get()
        println("provider:$provider")
        println("dir: ${provider.destinationDir}")
        println("directory: ${provider.destinationDirectory}")
    }
}

继续打印这两个属性看看:

provider:task ':mylibrary:bundleReleaseAar'
**dir:D:\Android\UtilsTest\mylibrary\build\outputs\aar**
directory: task ':mylibrary:bundleReleaseAar' property 'destinationDirectory'
map(java.io.File task ':mylibrary:bundleReleaseAar' property 'destinationDirectory' org.gradle.api.internal.file.DefaultFilePropertyFactory$ToFileTransformer@69b41613)
D:\Android\UtilsTest\mylibrary\build\outputs\aar
task ':mylibrary:bundleReleaseAar' property 'archiveFileName'
task ':mylibrary:bundleReleaseAar' property 'archiveBaseName'
map(org.gradle.api.file.Directory task ':mylibrary:bundleReleaseAar' property 'destinationDirectory' org.gradle.api.internal.file.DefaultFilePropertyFactory$PathToDirectoryTransformer@3075dc62)

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

可以看到destinationDir就是我们想要的打包文件的路径。
本来以为大功告成,但是倒数第二行Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.又告诉我们使用了弃用功能,与gradle8.0不兼容。
继续在gradle.properties文件中加入org.gradle.warning.mode=all,再次执行assembleRelease
这次在dir:D:\Android\UtilsTest\mylibrary\build\outputs\aar这行前面多了详细说明,表示destinationDir已弃用,应使用destinationDirectory代替:

The AbstractArchiveTask.destinationDir property has been deprecated. This is scheduled to be removed in Gradle 8.0. Please use the destinationDirectory property instead. See https://docs.gradle.org/7.5/dsl/org.gradle.api.tasks.bundling.AbstractArchiveTask.html#org.gradle.api.tasks.bundling.AbstractArchiveTask:destinationDir for more details.
	at build_6ehiz20mxn46b9vkyazyyepc1$_run_closure1$_closure7$_closure10$_closure11.doCall(D:\Android\UtilsTest\mylibrary\build.gradle:49)

并给出了文档链接:https://docs.gradle.org/7.5/dsl/org.gradle.api.tasks.bundling.AbstractArchiveTask.html#org.gradle.api.tasks.bundling.AbstractArchiveTask:destinationDir
查看文档并找到destinationDirectory的详细说明的过程就不说了,最后,把脚本改成如下:

 //打包完成后的动作
 variant.assembleProvider.get().doLast {
     File out = new File("${project.rootDir}/maven")
     variant.outputs.all {
         def provider = variant.packageLibraryProvider.get()
         def file = provider.destinationDirectory.getAsFile().get()
         copy {
             from file
             into out
         }
     }
 }

很多时候代码有问题,编程工具虽然给了相应的提示,但是解决问题却不是一两行代码就能搞定的。百度也不是万能的。
记录下这个过程,为以后有类似问题提供思路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/602295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VUE 3.0 + NGINX + Hls.js + OBS -- 直播推拉流、流视频播放

🛴🛴前言: 该 Demo 基于 OBS推流 Nginx Vue 3.0 Nplayer.js hls.js ,目的只是实现流媒体播放,以及简易推拉流直播。 文章目录 前端组件 NPlayer.js安装 nplayer.js 流视频播放页面元素初始化播放器清晰度控件样式…

D*算法详解 (D星算法 / Dynamic A*算法/ Dstar算法)(死循环解决)

所需先验知识(没有也无大碍,只是了解的话会对D*的理解有帮助):A*算法/ Dijkstra算法 何为D*算法 Dijkstra算法是无启发的寻找图中两节点的最短连接路径的算法,A*算法则是在Dijkstra算法的基础上加入了启发函数h(x)&am…

js正则中的match()

在前端开发中,正则表达式是一大利器。所以我们这次就来讨论下match()方法。 match本身是JavaScript语言中字符串对象的一个方法,该方法的签名是 match([string] | [RegExp]) 它的参数既可以是一个字符串,也可以是一个正则表达式。该方法绝…

windows 达梦数据库服务连接时提示:登录服务器失败,错误号6001,错误消息:网络通信异常 之数据库服务不存在的处理方式

在windows客户端上连接部署在windows操作系统上的达梦数据库, 使用DM管理工具连接数据库 正确输入用户名与密码之后点击确定按钮之后出现: 登录服务器失败,错误号6001,错误消息:网络通信异常 现象 如下图所示&#…

银行从业资格证 个人理财 各种年金计算公式总结

变量说明: C C C :每期投入的现金流 r r r:利率(收益率/贴现率) n n n :计息期数; F V FV FV:终值 P V PV PV:现值 推导计算过程用到等比数列求和公式 S n a 1 ∗ 1 −…

【算法训练(day7)】区间和并,离散化数组模板

目录 一.区间和并 二 .离散化数组 一.区间和并 问题:给定 n个区间 [li,ri],要求合并所有有交集的区间。注意如果在端点处相交,也算有交集。输出合并完成后的区间个数。例如:[1,3][1,3] 和 [2,6][2,6] 可以合并为一个区间 [1,6][1…

htmlCSS-----CSS介绍与样式书写

目录 前言: 1. CSS是什么 2. CSS书写样式 (1)行内样式 (2)内部样式 3.外部样式 4.三者之间的比较 前言: 前面我们学习了HTML的相关标签和框架写法,那我们在了解这些标签用法了之后就要学会怎么去通过相关方法来使得界面美化处理&#xf…

06 Redis分布式锁

常见面试问题 Redis除了拿来做缓存,你还见过基于Redis的什么用法?Redis 做分布式锁的时候有需要注意的问题?如果是 Redis 是单点部署的,会带来什么问题?那你准备怎么解决单点问题呢?集群模式下&#xff0c…

LeetCode刷题集(七)(2315.统计星号)

😦学习目标:拿下LeetCode2315.统计星号题目 😤 学完本章节知识即可掌握本题! 学习内容:LeetCode2315.统计星号 😤题目:给你一个字符串 s ,每 两个 连续竖线 ‘|’ 为 一对 。换言之&…

知识图谱涉及技术点分析

文章目录 数据从哪里来为什么通常将知识图谱划分到NLP领域?常用NLP技术点分析只是NLP任务吗?graph embedding知识融合业务还是算法?知识图谱组成 数据从哪里来 是手动提取关系吗?数据很多,关系确难涉及大量NLP技术关系…

Ansible基础五——条件语句、循环语句、handlers、任务失败处理

文章目录 一、 循环语句1.1 单量循环1.2 多量循环1.3 老版本用法1.4 loopregister 二、条件判断2.1 根据变量状态判断2.2 根据变量是否存在判断2.3 根据事实判断2.4 多条件判断2.4.1 and用法2.4.2 or用法 2.5 循环判断2.6 根据上个任务结果判断 三、handlers处理程序四、任务失…

5月《中国数据库行业分析报告》正式发布,首发时序、实时数据库两大【全球产业图谱】

为了帮助大家及时了解中国数据库行业发展现状、梳理当前数据库市场环境和产品生态等情况,从2022年4月起,墨天轮社区行业分析研究团队出品将持续每月为大家推出最新《中国数据库行业分析报告》,持续传播数据技术知识、努力促进技术创新与行业生…

ubuntu20安装xrdp以及解决黑屏问题

1、安装xrdp sudo apt-get install xrdp 2、将xrdp用户加入到如下用户组 sudo adduser xrdp ssl-cert 3、重启xrdp sudo service xrdp restart 4、打开windows远程面,连接,如果出现黑屏 sudo -s sudo vim /etc/xrdp/startwm.sh 加入如下内容&#xff…

攻防世界-web-Web_php_unserialize

1. 题目描述:查看以下代码,获取flag 2. 思路分析 从代码中不难看出,这里共有三个地方需要绕过 2.1 __wakeup函数:若在对象的魔法函数中存在的__wakeup方法,那么之后再调用 unserilize() 方法进行反序列化之前则会先…

数据分析概述

数据分析概述 数据的性质数据的概念数据与信息的区别和联系 数据的类型按照度量尺度分按时间状况分 什么是数据分析数据分析的重要性数据分析的内容数据分析作用 数据分析的基本流程典型的数据分析的流程 数据分析方法对比分析法分组分析法定量数据分布分析——具体事例 结构分…

上海亚商投顾:沪指高开高走 地产股迎来久违反弹

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪 三大指数今日高开高走,沪指午后涨近1%,深成指、创业板指涨超1.2%,上证50盘中大…

惠更斯定理和格林定理

惠更斯原理和格林定理 惠更斯原理显示了表面上的波场如何决定表面 S S S外的波场。惠更斯在17世纪启发性地表达了这一概念。但这个想法的数学表达是由于19世纪的乔治格林。这一概念可以在数学上表达为标量波和矢量波。矢量波情形的推导与标量波情形是同态的。但是标量波情况下…

少儿编程python-一级

少儿编程python 文章目录 前言CSP-J与CSP-S少儿编程证书含金量排名(国家承认的少儿编程证书)非专业级软件能力认证(CSP-J/S)青少年编程能力等级测试(CPA)蓝桥杯青少年信息技术等级考试全国青少年软件编程等…

造船厂事故/风险(背景+官方统计数据)

造船厂事故/风险(背景官方统计数据) 船厂工地常见事故船厂事故:发人深省的伤害统计船厂工地常见的风险有哪些? 造船业是周期性的、资本密集型的行业。更严格的环境法规于2020年初生效,引发了对抑制船舶废气硫排放技术的需求。与此同时&#…

数据标记工具

检测分割标定 labelstudio https://labelstud.io/sudo apt install libpq-dev python3-devconda activate paddle_envpip install label-studiolabel-studio startlabel-studio --data-dir /data/data_label_studio<View><Image name"image" value"$im…