从 AGP 4.1.2 升级到 7.5.1——动态添加仓库

在这里插入图片描述

AGP 升级问题

Build was configured to prefer settings repositories over project repositories but repository ‘maven4’ was added by plugin ‘***’

添加仓库警告信息说:

依赖查找以你在 setting.gradle 文件配置的仓库为准(因为你配置了 PREFER_SETTINGS),通过 project 配置的仓库不生效。

dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
}

问题

gradle Plugin 内如何动态添加仓库,在 AGP4+ 中插件内部通过project.buildscript.repositories动态添加仓库,根据本次打包所带的不同渠道SDK添加对应的仓库地址,可以在 AGP7 中似乎没有生效,再打包过程中出现了报错。

在这里插入图片描述

AGP4+

project.buildscript {repositories {//抖音maven { url 'https://artifact.bytedance.com/repository/ttgamesdk/' }//华为插件maven { url 'https://developer.huawei.com/repo/' }}
}

分析

仓库模式只有三种:

public enum RepositoriesMode {//使用项目级别的PREFER_PROJECT,//使用 setting 配置的PREFER_SETTINGS,//如果使用项目级别的,直接抛出异常终止打包(默认配置)FAIL_ON_PROJECT_REPOS;
}

前一篇文章中使用的是默认配置,打包直接报错,后来改成 PREFER_SETTINGS 虽然规避了直接终止打包,但仓库不生效,未达到效果(不是说 prefer 首选配置吗,正常理解不应该也会生效才对嘛)~

所以现在问题解决只能是这两个方向了吗

  • 方式一:要么统一在 setting.gradle 中添加仓库
  • 方式二:要么统一使用 project 添加仓库

解决

根据自身插件实际情况,我选择了方式一:统一使用 project 添加仓库
因为是在自定义插件内添加仓库,为了更加灵活动态添加,把仓库信息写成配置文件,通过读取外部配置可不修改插件动态添加,如下:

MavenConfig mMavenConfig@Override
void apply(Project project) {loadMavenConfig()addMavenFromConfig(project)
}//加载仓库配置
private void loadMavenConfig() {String content = PluginFileUtils.realFile(this.mProject.getProjectDir(), CommonConstant.FILE_NAME_REPOSITORIES_CONFIG_FILE)if (CommUtils.isEmptyOrNoExists(content)) {mRuntimeException.onRuntimeException(ErrorMsg.MSG_MAVEN_REPOSITORIES_NOT_FOUND)}mMavenConfig = new Gson().fromJson(content, MavenConfig.class)if (mMavenConfig == null || !mMavenConfig.configIsOk()) {mRuntimeException.onRuntimeException(ErrorMsg.MSG_MAVEN_REPOSITORIES_ERROR)}
}//添加仓库
void addMavenFromConfig(Project project) {if (project == null) {return}project.parent.allprojects {repositories {//基础公共仓库mavenCentral()jcenter()google()//根据外部配置文件动态添加的仓库for (MavenList config in mMavenConfig.getMavenList()) {PluginLog.d('动态添加配置:' + config.toString())if (config.enableHttp && config.credentials != null) {maven {allowInsecureProtocol trueurl config.urlcredentials {username config.credentials.usernamepassword config.credentials.password}}} else if (config.enableHttp) {maven {allowInsecureProtocol trueurl config.url}} else {maven {url config.url}}}}}
}

MavenConfig 就是一个 json 转 bean 的类,json 格式如下:

  • enableHttp:是否允许 http,对应的是 allowInsecureProtocol true
  • url:仓库地址
  • credentials:仓库账密,可以为 null
    • username:账户名
    • password:密码
{"mavenList": [{"enableHttp": false,"url": "https://repo1.maven.org/maven2/","credentials": null},{"enableHttp": false,"url": "https://artifact.bytedance.com/repository/byteX/","credentials": null},{"enableHttp": false,"url": "https://developer.huawei.com/repo/","credentials": null},{"enableHttp": false,"url": "https://artifact.bytedance.com/repository/ttgamesdk/","credentials": null},{"enableHttp": true,"url": "http://bbbbb/","credentials": null},{"enableHttp": false,"url": "https://jitpack.io","credentials": null},{"enableHttp": false,"url": "https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_china","credentials": null},{"enableHttp": true,"url": "http://aaaaaa","credentials": {"username": "primer","password": "123456"}}]
}

注:setting.gradle pluginManagement 中的 repositories 也应该保留一些基本仓库 ~

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

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

相关文章

基于SpringBoot+Vue的实验室管理系统

末尾获取源码作者介绍:大家好,我是墨韵,本人4年开发经验,专注定制项目开发 更多项目:CSDN主页YAML墨韵 学如逆水行舟,不进则退。学习如赶路,不能慢一步。 目录 一、项目简介 二、开发技术与环…

2024年小白学编程需要什么基础

学习编程需要什么基础?答案是意识基础和实践基础。 一、学习编程的意识基础 所谓学习编程的意识基础,实际上就是指建立在逻辑思维上的理解能力。只有具备逻辑思考能力,才能比较无障碍地理解编程语言的代码语句所描述的过程步骤,…

如何在Mac上允许主流浏览器使用弹出式窗口?这里有详细步骤

这篇文章教你如何关闭流行的Mac浏览器上的弹出窗口阻止程序,包括Safari、Chrome和Firefox。它还探讨了你可能希望这样做的原因及其影响。 如何在Mac上允许Safari使用弹出窗口 如果你经常在Mac上使用Safari,你会注意到默认情况下弹出窗口阻止程序是打开的。有时,这并不方便…

鲲志说:向我跌宕起伏,喜忧参半的2022致敬!

今天是2022的倒数第二天,就着CSDN的活动正好为自己做一个年度总结,也确实需要做一个年度总结来正式和过去的一年道个别 回想这一年,确实经历了很多,寒冬裁员、千里相赴见双方父母、成功夺冠🐑。。。成年人的世界确实很…

C#验证字符串是否大写、小写,正则表达式vs用Char.IsUpper和Char.IsLower方法遍历字符数组

目录 一、使用的方法 1.正则表达式 2.用Char.IsUpper或Char.IsLower方法 二、源代码 1.源码 2.生成效果 一、使用的方法 1.正则表达式 正则表达式“^[A-Z]$”,其中[A-Z]表示匹配一个到多个大写字母。 正则表达式“^[a-z]$”,其中[a-z]表示匹配一个…

快速渲染效果图:设计师的高效工作流揭秘

渲染技能是每个建模设计师需求的一个重要技能,尽管在许多设计公司里,建模和渲染往往是分开由各自的专家来完成。不过,一个全能型的建模师还是应该精通渲染技术。对于那些接外包项目来制作渲染效果图的设计师来说,掌握如何提速渲染…

代驾应用系统(ssm)

登录首页 管理员界面 代驾司机界面 普通用户界面 前台页面 1、系统说明 (1) 框架:spring、springmvc、mybatis、mysql、jsp (2) 系统分为前台系统、后端管理系统 2、欢迎留言联系交流学习讨论:qq 97820625…

画出TCP三次握手和四次挥手的示意图,并且总结TCP和UDP的区别

TCP三次握手和四次挥手 TCP和UDP的区别 共同点:同属于传输层的协议 TCP 1> 提供面向连接的,可靠的数据传输服务 2> 传输过程中,数据无误、数据无丢失、数据无失序、数据无重复 3> 数据传输效率低,耗费资源多 4>…

C遗漏知识(个人向)

之前C语言遗漏的一些。 数据在内存中的存储 原码、反码、补码 整数的2进制表⽰⽅法有三种,即 原码、反码和补码 正整数的原、反、补码都相同。 负整数的三种表⽰⽅法各不相同。 原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。 反码&…

搜索引擎DuckDuckGo代理指南

DuckDuckGo作為一款搜索引擎,同時擁有自己的流覽器,高度保護用戶隱私,使其有別於其他收集和利用用戶數據進行定向廣告的搜索引擎。然而,單獨使用DuckDuckGo並不能保證線上完全匿名。如果你想進一步保護隱私,那就需要使…

KtConnect 本地连接连接K8S工具

KT Connect简介 Kt Connect (Kubernetes Developer Tool)是一个阿里开源、轻量级的面向 Kubernetes 用户的开发测试环境治理辅助工具。其核心是通过建立本地到集群以及集群到本地的双向通道。 1.阿里开源,轻量级, 2. 安装快捷简单&#xf…

RCS系统之:界面设计

RCS Floor Manager设计的主要目的: 实时监控机器人状态实时查看货架状态查看机器人任务状态查看捡货站的任务状态地图的状态信息其他元素,如打包机,机械臂的状态动态的编辑地图元素信息等等 有兴趣的可以留言一起交流下