(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 true
    url "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() {
  		    @Override
            void buildStarted(Gradle gradle) {

            }
  
            @Override
            void settingsEvaluated(Settings settings) {

            }

            @Override
            void projectsLoaded(Gradle gradle) {

            }

            @Override
            void projectsEvaluated(Gradle gradle) {

            }

            @Override
            void 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 该下班了~

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数组与字符串深度巩固

经过再三思考觉得今天就写一篇关于数组与字符串相关的文章吧!其中字符串主要通过练习来巩固知识亦或是获得新知识。好接下来将进行我们的学习时刻了。 首先我们来思考一个问题,你真的了解数组的数组名吗?数组名真的就单单一个名字而已吗&…

前置知识:方法递归

认识递归的形式 递归是一种算法,在程序设计语言中广泛应用。从形式上来说:方法调用自身的形式称为方法递归(recursion)。 递归的形式 直接递归:方法自己调用自己间接递归:方法调用其他方法,其…

深度解读NVMe计算存储协议-1

随着云计算、企业级应用以及物联网领域的飞速发展,当前的数据处理需求正以前所未有的规模增长,以满足存储行业不断变化的需求。这种增长导致网络带宽压力增大,并对主机计算资源(如内存和CPU)造成极大负担,进…

ASP.NET Core+Layui使用EF Core操作MySQL实战

一、创建ASP.NET Core Web应用程序 注意,本章节主要以ASP.NET Core 3.1版本作为博客的示例实例模板!(当然你也可以使用当前最新的.NET版本进行实操)。 二、添加EF Core NuGet包 若要在项目中使用EF Core操作MySQL数据库&#xff…

【昕宝爸爸小模块】日志系列之什么是分布式日志系统

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你👍点赞、🗂️收藏、加❤️关注哦。 本文章CSDN首发,欢迎转载,要注明出处哦! 先感谢优秀的你能认真的看完本文&…

坚持刷题 | 完全二叉树的节点个数

Hello,大家好,我是阿月!坚持刷题,老年痴呆追不上我,今天刷:完全二叉树的节点个数 题目 222.完全二叉树的节点个数 代码实现 class TreeNode {int val;TreeNode left, right;public TreeNode(int val) …

编程实例分享,配件进销存进出库管理系统软件

编程实例分享,配件进销存进出库管理系统软件 一、前言 以下教程以 佳易王配件进出库管理系统软件V16.0为例说明 如上图,左侧为导航栏,分为 系统设置,用户信息设置,出入库开单,统计报表,财务管…

C++初阶 类和对象(补充)

目录 一、友元 1.1什么是友元? 1.2如何使用友元? 1.3使用友元 1.4使用友元注意事项 二、初始化列表 2.1什么是初始化列表? 2.2为什么要有初始化列表? 2.3使用初始化列表 2.4注意事项 一、友元 1.1什么是友元? 友元是一…

基于MobileNet(v1-v3)全系列不同参数量级模型开发构建果树图像病虫害识别分析系统,实验量化对比不同模型性能

最近正好项目中在做一些识别相关的内容,我也陆陆续续写了一些实验性质的博文用于对自己使用过的模型进行真实数据的评测对比分析,感兴趣的话可以自行移步阅读即可: 《移动端轻量级模型开发谁更胜一筹,efficientnet、mobilenetv2、…

高等数学:积分

本文主要参考: 【建议收藏】同济七版《高等数学》精讲视频 | 期末考试 | 考研零基础 | 高数小白_哔哩哔哩_bilibili 4.1.1.1 定积分引例_哔哩哔哩_bilibili 仅供本人学习使用。 积分是一个在多个领域都广泛使用的概念,特别是在数学和物理学中。 以下是积…

PyTorch识别验证码

## 一、生成测试集数据pip install captcha common.py import random import time captcha_array list("0123456789abcdefghijklmnopqrstuvwxyz") captcha_size 4from captcha.image import ImageCaptchaif __name__ __main__:for i in range(10):image ImageC…

leetcode209长度最小的子数组|滑动窗口算法详细讲解学习

滑动窗口是一种基于双指针的一种思想,两个指针指向的元素之间形成一个窗口。 分类:窗口有两类,一种是固定大小类的窗口,一类是大小动态变化的窗口。 简而言之,滑动窗口算法在一个特定大小的字符串或数组上进行操作&…

如何使用Cloudreve搭建私有云盘并发布公网访问无需购买域名服务器

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了,各互联网大厂也纷纷加入战局&#…

飞轮储能系统的建模与MATLAB仿真(永磁同步电机作为飞轮驱动电机)

目录 1 主要内容 电网侧控制系统 电机侧模型 模型二 2 结果分析 3 下载链接 1 主要内容 该仿真为飞轮储能系统的建模,包括电网侧和电机侧两部分模型,仿真采用永磁同步电机作为飞轮驱动电机,通过矢量控制的方式对其发电和电动的工况进行控…

基于单片机温度控制系统的研究

摘 要:笔者基于单片机的温度控制系统,从单片机选择、传感器选择、系统框架设计等方面概述了单片机的温度控制系统内涵,分析了其运行原理,列举了单片机温度控制系统设计的实操方法,从硬件系统、软件系统、温度检测方法…

Python武器库开发-武器库篇之zip文件暴力破解(五十一)

Python武器库开发-武器库篇之zip文件暴力破解(五十一) Zip文件是一种常用的存档文件格式,用于将多个文件和文件夹压缩成一个单独的文件。它是一种广泛接受和支持的文件格式,几乎所有操作系统和计算机都能够处理Zip文件。Zip文件使用一种压缩算法来减小文…

sqli-labs靶场第一关详解

目录 sqlilabs靶场第一关 0. sql注入解释 0.1什么是sql注入 0.2sql注入的原理 0.3sql注入方法 0.3.1 数字型注入 0.3.2 字符型注入 1.注入第一步判断请求方式、类型 1.1打开我自己本地的靶场http://sql.com/Less-1/ (上一期靶场搭建:http://t.…

nodejs+vue+ElementUi电商购物个性化商城推荐系统gqfe

电本电商个性化推荐系统是为了提高用户查阅信息的效率和管理人员管理信息的工作效率,可以快速存储大量数据,还有信息检索功能,这大大的满足了用户和管理员这二者的需求。操作简单易懂,合理分析各个模块的功能,尽可能优…

git将项目的某次签入遴选(Cherry-Pick)另一个项目

需求&#xff1a;将项目Product&#xff0c;分支feature/platform&#xff0c;签入959294ce6b75ee48c5cb22c46d7398654628a896&#xff0c;遴选到项目BRP&#xff0c;分支dev 第一步&#xff1a;使用原签入生成patch文件&#xff08;git format-patch -1 <commit_hash>&a…

MySQL原理(一)架构组成之物理文件组成

目录 一、日志文件 1、错误日志 Error Log 1.1、作用&#xff1a; 1.2、开启关闭&#xff1a; 1.3、使用 2、二进制日志 Binary Log & Binary Log Index 2.1、作用&#xff1a; 2.2、开启关闭&#xff1a; 2.3、Binlog还有一些附加选项参数 &#xff08;1&#x…