从 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

相关文章

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

华为鸿蒙HarmonyOS 5.1官宣7月开启升级! 首批支持名单公布

《华为鸿蒙HarmonyOS5.1官宣7月开启升级!首批支持名单公布》在刚刚结束的华为Pura80系列及全场景新品发布会上,除了众多新品的发布,还有一个消息也点燃了所有鸿蒙用户的期待,那就是Ha... 在今日的华为 Pura 80 系列及全场景新品发布会上,华为宣布鸿蒙 HarmonyOS 5.1 将于 7

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL

SpringBoot实现Kafka动态反序列化的完整代码

《SpringBoot实现Kafka动态反序列化的完整代码》在分布式系统中,Kafka作为高吞吐量的消息队列,常常需要处理来自不同主题(Topic)的异构数据,不同的业务场景可能要求对同一消费者组内的... 目录引言一、问题背景1.1 动态反序列化的需求1.2 常见问题二、动态反序列化的核心方案2.1 ht

golang实现动态路由的项目实践

《golang实现动态路由的项目实践》本文主要介绍了golang实现动态路由项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习... 目录一、动态路由1.结构体(数据库的定义)2.预加载preload3.添加关联的方法一、动态路由1

ubuntu系统使用官方操作命令升级Dify指南

《ubuntu系统使用官方操作命令升级Dify指南》Dify支持自动化执行、日志记录和结果管理,适用于数据处理、模型训练和部署等场景,今天我们就来看看ubuntu系统中使用官方操作命令升级Dify的方... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。