(1)从 AGP 4.1.2 升级到 7.5.1 我遇到了什么问题

在这里插入图片描述

AGP 升级问题

(1)Could not get unknown property ‘project’ for settings,on project.buildscript

问题

Could not get unknown property ‘project’ for settings ‘AGP1’ of type org.gradle.initialization.DefaultSettings.

agp4 时 Android 工程可运行模块同级目录下的自定义 Gradle 脚本能够直接使用内置的 project 属性(对象),到 apg7 怎么就不行了,如何兼容?

代码

// agp4 正常使用,apg7 下报错
project.buildscript.repositories {add(maven {url "https://******"})
}

APG4

println("==> config.gradle project: " + project)
println("==> config.gradle project.buildscript: " + project.buildscript)==> config.gradle project: root project 'newyingxiaomb'
==> config.gradle project.buildscript: org.gradle.api.internal.initialization.DefaultScriptHandler@2afa7b34

APG7

println("==> config.gradle this: " + this)
println("==> config.gradle this.buildscript: " + this.buildscript)
println("==> config.gradle this.project: " + this.project)==> config.gradle this: script
==> config.gradle this.buildscript: org.gradle.api.internal.initialization.DefaultScriptHandler@435d11ae

this 是 script 对象,this.project 没有输出,但 this.buildscript 和 agp4 对象类型还是一致的,满足我们的要求,可以使用 buildscript。注意:你可能知道再升级到 AGP7+ 之后工程配置发生了稍微的变化,比如以前写在 build.gradle 的配置后来移到 setting.gradle 里面去了!

解决

setting.gradle 引入的脚本执行 project.buildscript 找不到 project 属性,可以替换为 this.buildscript

(2)Could not get unknown property ‘project’ for settings,on project.getProjectDir()

问题

Caused by: groovy.lang.MissingPropertyException: Could not get unknown property ‘projectDir’ for settings ‘AGP1’ of type org.gradle.initialization.DefaultSettings.

同上,AGP7 setting 里面没有 project 对象了。

代码

def gradleWrapperFilePath = project.getProjectDir().getAbsolutePath() + "/gradle/wrapper/gradle-wrapper.properties"

AGP4、AGP7

println("==> config.gradle this.rootProject: " + this.rootProject)
println("==> config.gradle this.rootProject.projectDir: " + this.rootProject.projectDir)println("==> config.gradle this.rootDir: " + this.rootDir)
println("==> config.gradle this.rootDir.path: " + this.rootDir.path)// setting.gradle 里面输出 rootProject 竟然是空?但是 rootProject.projectDir 输出又是有值的!
==> config.gradle this.rootProject: :
==> config.gradle this.rootProject.projectDir: E:\ALLMine\tmpDemo\AGP1==> config.gradle this.rootDir: E:\ALLMine\tmpDemo\AGP1
==> config.gradle this.rootDir.path: E:\ALLMine\tmpDemo\AGP1

解决

setting.gradle 引入的脚本执行 project.getProjectDir() 找不到 project 属性,可以替换为 rootProject.projectDir 或 rootDir.path

(3)不允许 http 协议的仓库

问题

Using insecure protocols with repositories, without explicit opt-in, is unsupported. Switch Maven repository to redirect to a secure protocol (like HTTPS) or allow insecure protocols.

代码

maven {url "http://****"
}

解决

  • 存在 https 仓库的直接从 http 改为 https
  • 不存在 https 的,可以使用 allowInsecureProtocol true 允许不安全的 http
maven {allowInsecureProtocol trueurl "http://***"
}//报错
maven { url 'http://developer.huawei.com/repo/' }
//存在 https 的,可以直接更改
maven { url 'https://developer.huawei.com/repo/' }

Tip:

  • dependencyResolutionManagement:全局仓库配置
  • pluginManagement:插件配置

(4)setting.gradle 里不存在 dependencies

  • Could not find method classpath() for arguments
  • all buildscript {} blocks must appear before any plugins {} blocks in the script

问题

Could not find method dependencies() for arguments [settings_***_closure4@6c051893] on object of type org.gradle.plugin.management.internal.DefaultPluginManagementSpec.

AGP7

//项目根目录下 build.gradle
buildscript {dependencies {classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72"classpath "com.bytedance.android.byteX:shrink-r-plugin:0.3.0"classpath "com.android.plugin:art:2.1.6"classpath "com.google.plugin.kt:remove-metadata:1.0.5"classpath "com.android.plugin:reann:1.0.1"classpath "com.android.plugin:resGuard:1.0.6"}
}

解决

(5)org.gradle.BuildListener 中 buildStarted 被移除

问题

‘buildStarted’ from class ‘com.*****$2’ does not override method from its superclass or interfaces but is annotated with @Override.

代码

 project.gradle.addBuildListener(new BuildListener() {@Overridevoid buildStarted(Gradle gradle) {}@Overridevoid settingsEvaluated(Settings settings) {}@Overridevoid projectsLoaded(Gradle gradle) {}@Overridevoid projectsEvaluated(Gradle gradle) {}@Overridevoid buildFinished(BuildResult buildResult) {if (isDeleteObs) {removeObsJar(mProject)}}})

解决

  • 移除 buildStarted 方法即可

(6)registerTransform、Transform 过时【暂不处理】

问题

The Transform API is planned to be removed in Android Gradle plugin 8.0.
There is no single replacement. For more information about how to migrate, see https://developer.android.com/studio/releases/gradle-plugin-roadmap

计划在 8.0 移除,我现在更新到 7+,躺平先不处理

代码

def android = project.extensions.getByType(AppExtension)
android.registerTransform(transform)

(7)Kotlin Gradle 版本过低

问题

The Android Gradle plugin supports only Kotlin Gradle plugin version 1.5.20 and higher.
The following dependencies do not satisfy the required version:
root project ‘AGP1’ -> org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.32

解决

按提示升级即可

    dependencies {classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20"//classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72"
}

(8)Build was configured to prefer settings repositories over project repositories but repository ‘maven’ was added

问题

Build was configured to prefer settings repositories over project repositories but repository ‘maven’ was added by plugin ‘com.primer.plugin’

插件内在 apply 方法中通过 buildscript 动态添加仓库

代码

target.parent.buildscript {repositories {mavenCentral()jcenter()google()// 其他第三方仓库}
}

解决

github issues

在这里插入图片描述

//setting.gradle
dependencyResolutionManagement {//新建项目默认配置//repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)//repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)repositoriesMode.set(RepositoriesMode.PREFER_PROJECT)
}

还是有其他问题,暂未解决,见下一节吧,18:30 该下班了~

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

备战蓝桥杯---数据结构与STL应用(入门4)

本专题主要是关于利用优先队列解决贪心选择上的“反悔”问题 话不多说,直接看题: 下面为分析: 很显然,我们在整体上以s[i]为基准,先把士兵按s[i]排好。然后,我们先求s[i]大的开始,即规定选人数…

牛客——字符串(尺取法与滑动窗口)

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 小N现在有一个字符串S。他把这这个字符串的所有子串都挑了出来。一个S的子串T是合法的,当且仅当T中包含了所有的小写字母。小N希望知道所有的合法的S的子串中&#xff0c…

微信小程序(二十三)获取页面栈及当前页面实例

注释很详细,直接上代码 上一篇 新增内容: 1.页面栈的定义 2.获取当前页面实例 页面栈 当我们从A页面跳到B页面再跳到C页面时,页面栈则是由三个页面的实例组成的数组,A在下标为0的数组中,C在下标为2的数组中 当然&#…

基于二值化图像转GCode的螺旋扫描实现

基于二值化图像转GCode的螺旋扫描实现 什么是双向扫描螺旋扫描代码示例 基于二值化图像转GCode的螺旋扫描实现 什么是螺旋扫描 螺旋扫描(Spiral Scanning)是激光雕刻中一种特殊的扫描方式,其特点是激光头按照螺旋形状逐渐向外移动&#xf…

再讲 Session 和 Token,彻底弄明白

前言 在构建用户身份管理系统时,选择会话(Session)还是令牌(Token)是一个关键决策,取决于系统的需求和特定的使用场景。本文将深入探讨何时适合使用会话,何时适合使用令牌,以帮助开发…

国图公考:考公和考编一样吗?

公务员:是指在各级机关中,符合规定,行使职权,执行公务的人员 事业单位:事业单位是指由国家或社会组织举办,从事教育、科学、文化、卫生、体育等社会公益事业的单位。 公务员和事业编都是有编制的&#xf…

制造业工厂实施MES系统带来的价值是什么?

MES系统的应用能给制造业带来哪些价值?制造企业想要获得更大的利润,就要从生产开始着手。生产制造是工厂的核心,是公司最大的成本来源。企业只有通过信息化的管理模式,从而达到节约成本,提高质量,才能为客户提供更满意…

8.DNS域名解析服务器

目录 1. 概述 1.1. 产生原因 1.2. 作用: 1.3. 连接方式 1.4. 因特网的域名结构 1.4.1. 拓扑: 1.4.2. 分类 1.4.3. 域名服务器类型划分 2. DNS域名解析过程 2.1. 分类: 2.2. 解析图: 2.2.1. 图: 2.2.2. 过…

hot100:26环形链表II

题目链接: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 算法思想: 在环形链表hot100:25环形链表-CSDN博客这篇博客中,我们解决了如何判断一个链表有环,即快慢指针相遇的地方就证明链表…

【机器学习】监督学习算法之:线性回归

线性回归 1、引言2、线性回归2.1 定义2.2 基本原理2.3 公式2.4 实现2.5 代码示例 3、总结 1、引言 小屌丝:鱼哥,最近机器学习的文章写的不少啊。 小鱼:你还挺细心的哦。 小屌丝:那必须的,我要学习,我要成长…

通过与chatGPT交流实现零样本事件抽取

1、写作动机: 近来的大规模语言模型(例如Chat GPT)在零样本设置下取得了很好的表现,这启发作者探索基于提示的方法来解决零样本IE任务。 2、主要贡献: 提出了基于chatgpt的多阶段的信息抽取方法:在第一阶…

吉大计网笔记

Osi七层模型 物理层:比特流的透明传输 数据链路层:ip数据包装成帧并传输,处理相邻节点的数据传输。 网络层:选择路由和交换节点,处理任意节点的数据传输。 运输层:主机进程的数据传输服务,端到端…