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

2024-02-05 20:04
文章标签 动态 仓库 升级 4.1 7.5 agp

本文主要是介绍从 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 也应该保留一些基本仓库 ~

这篇关于从 AGP 4.1.2 升级到 7.5.1——动态添加仓库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/682001

相关文章

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

Ubuntu如何升级Python版本

《Ubuntu如何升级Python版本》Ubuntu22.04Docker中,安装Python3.11后,使用update-alternatives设置为默认版本,最后用python3-V验证... 目China编程录问题描述前提环境解决方法总结问题描述Ubuntu22.04系统自带python3.10,想升级

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

Linux升级或者切换python版本实现方式

《Linux升级或者切换python版本实现方式》本文介绍在Ubuntu/Debian系统升级Python至3.11或更高版本的方法,通过查看版本列表并选择新版本进行全局修改,需注意自动与手动模式的选... 目录升级系统python版本 (适用于全局修改)对于Ubuntu/Debian系统安装后,验证Pyt

MySQL 升级到8.4版本的完整流程及操作方法

《MySQL升级到8.4版本的完整流程及操作方法》本文详细说明了MySQL升级至8.4的完整流程,涵盖升级前准备(备份、兼容性检查)、支持路径(原地、逻辑导出、复制)、关键变更(空间索引、保留关键字... 目录一、升级前准备 (3.1 Before You Begin)二、升级路径 (3.2 Upgrade

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

升级至三频BE12000! 华硕ROG魔盒Pro路由器首发拆解评测

《升级至三频BE12000!华硕ROG魔盒Pro路由器首发拆解评测》华硕前两天推出新一代电竞无线路由器——ROG魔盒Pro(StrixGR7Pro),该产品在无线规格、硬件配置及功能设计上实现全... 作为路由器行业的T1梯队厂商,华硕近期发布了新旗舰华硕ROG魔盒Pro,除了保留DIY属性以外,高达120

Python包管理工具pip的升级指南

《Python包管理工具pip的升级指南》本文全面探讨Python包管理工具pip的升级策略,从基础升级方法到高级技巧,涵盖不同操作系统环境下的最佳实践,我们将深入分析pip的工作原理,介绍多种升级方... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核