适配 AGP8.5,maven 私服发布报错(七)

Unity Android构建失败终极指南:Gradle与AGP版本兼容性深度解析 在Android应用开发中,构建系统是连接源代码与可执行应用的关键桥梁。Gradle作为主流的自动化构建工具,通过其灵活的插件机制管理项目依赖、编译和打包流程。Android Gradle Plugin(AGP)则是专为Android平台定制的Gradle插件,负责处理资源编译、APK生成等Android特有任务。其技术价值在于实现了跨平台、可复用的构建逻辑,大幅提升了开发效率。然而,Gradle与AGP版本之间存在严格的对应关系,版本不匹配会导致构建链断裂,这在Unity引擎的Android构建场景中尤为 阅读详情

在这里插入图片描述

我们知道,如果同一个版本发布两次

那么第二次会报错,大概意思是 maven 私服同一个版本只能发布一次,不能覆盖

或许可以设置强行覆盖,即使支持版本覆盖一般也不会这么干

问题

为什么我点击一次 publish 同一个版本上传了两次(发布了两次)

分析

有问题:会发布两次的配置

build.gradle.kts

plugins {
    alias(libs.plugins.jetbrains.kotlin.jvm)
	//插件开发
    id("java-gradle-plugin")
    //maven  发布
	id("maven-publish")
}

val checkArtifactId = project.properties["ARTIFACT_ID"] as String
val checkGroupId = project.properties["GROUP_ID"] as String
var checkVersion = project.properties["VERSION"] as String
//指定插件 ID 和入口
gradlePlugin {
    plugins {
        create("Check") {
            //1、同 agp7+ 应用插件的 ID,apply plugin: 'com.primer.plugin'
            //2、会再发布一个 id + gradle.plugin 的 pom
            id = checkGroupId
            group = checkGroupId
            version = checkVersion
            implementationClass = "com.primer.plugin.Check"
        }
    }
}


//插件发布
publishing {
    publications {
        create<MavenPublication>("maven") {
            from(components["kotlin"])
            groupId = checkGroupId
            version = checkVersion
            artifactId = checkArtifactId
        }
    }
	
    repositories {
        maven {
            isAllowInsecureProtocol = true
            credentials {
                username = "123456"
                password = "123456"
            }
            url = uri("http://maven 私服地址")
        }
    }
}

点击一次 publishToMavenLocal,以下是按顺序执行的 Task

这一看可能不知道这些任务是做什么的,输出产物是什么?

那我们就挨个任务点击运行,看看关键任务输出的产物是什么

publishToMavenLocal
     :check:generatePomFileForCheckPluginMarkerMavenPublication

	 //生成插件的 pom【com.primer.plugin.gradle.plugin-1.0.0.123.pom】
	 //需要注意的是生成带有 gradle.plugin 的 pom,在以前 AGP7+ 没见过,可能是 AGP8+ 新引入的
     :check:publishCheckPluginMarkerMavenPublicationToMavenLocal 

     :check:checkKotlinGradlePluginConfigurationErrors
     :check:extractPluginRequests
     :check:generatePluginAdapters
     :check:compileKotlin
     :check:compileJava
     :check:compileGroovy
     :check:compileGroovyPlugins
     :check:pluginDescriptors
     :check:processResources
     :check:classes
     :check:jar
     :check:generateMetadataFileForMavenJavaPublication
     :check:generatePomFileForMavenJavaPublication
     
     //生成 com.primer.plugin.check JAR,插件所有的代码打包成 jar
     :check:publishMavenJavaPublicationToMavenLocal【1】
     
	 :check:generateMetadataFileForPluginMavenPublication
     :check:generatePomFileForPluginMavenPublication

	 //生成 com.vimedia.plugin.check JAR,插件所有的代码打包成 jar
	 //😮问题暴露了,这里第二次生成 jar,导致了 maven 发布报错问题
     :check:publishPluginMavenPublicationToMavenLocal【2】


     :check:publishToMavenLocal

所以问题出现了:

为什么有两个任务都发布 jar?

这两个到底是什么?

能不能去掉其中一个?

  • publishMavenJavaPublicationToMavenLocal
  • publishPluginMavenPublicationToMavenLocal

后来对比 AGP7+ 的 maven 发布 build.gradle 配置,主要存在以下两个区别:

  • 在 AGP8+ 开发中 build.gradle.kts引入了新的插件 id("java-gradle-plugin")(以前在 AGP7+ 的插件开发中是没有引入这种插件的)
  • 插件创建的方式不同

AGP7+ 创建插件

1、创建 resource 目录,新建 META-INF.gradle-plugins
2、目录下新建 com.primer.plugin.properties 插件 Id 文件(com.primer.plugin 这部分就是插件引用是的插件 Id)
3、文件内配置插件入口类 implementation-class

在这里插入图片描述

AGP8+ 创建插件

val checkGroupId = project.properties["GROUP_ID"] as String
var checkVersion = project.properties["VERSION"] as String
gradlePlugin {
    plugins {
        create("Check") {
            //1、同 agp7+ 应用插件的 ID,apply plugin: 'com.primer.plugin'
            //2、会再发布一个 id + gradle.plugin 的 pom
            //3、artifactId = project.archivesBaseName (如果未设置,则默认为 project.name)
            
            id = checkGroupId //插件 Id,com.primer.plugin
            group = checkGroupId
            version = checkVersion
            //artifactId = project.archivesBaseName (如果未设置,则默认为 project.name)
            //artifactId = checkArtifactId
            
            implementationClass = "com.primer.plugin.Check" //插件入口类
        }
    }
}

正是两种不同的插件创建方式导致了这次问题的发生

警告不断的调试,当我注释掉 build.gradle.kts 中的 publishing -> publications 部分

上述的两个生成 jar 的任务只剩下其中一个了,问题应该解决了

在这里插入图片描述

解决

所以最终的插件发布配置是这样的

build.gradle.kts

plugins {
    alias(libs.plugins.jetbrains.kotlin.jvm)
	//插件开发
    id("java-gradle-plugin")
    //maven  发布
	id("maven-publish")
}

val checkGroupId = project.properties["GROUP_ID"] as String
var checkVersion = project.properties["VERSION"] as String
//指定插件 ID 和入口
gradlePlugin {
    plugins {
        create("Check") {
            //1、同 agp7+ 应用插件的 ID,apply plugin: 'com.primer.plugin'
            //2、会再发布一个 id + gradle.plugin 的 pom
            id = checkGroupId
            group = checkGroupId
            version = checkVersion
            implementationClass = "com.primer.plugin.Check"
        }
    }
}

//插件发布
publishing {
    repositories {
        maven {
            isAllowInsecureProtocol = true
            credentials {
                username = "123456"
                password = "123456"
            }
            url = uri("http://maven 私服地址")
        }
    }
}

问题根本原因是:

使用插件 id(“java-gradle-plugin”) 创建插件 gradlePlugin-plugins-create 会自动创建 publications,无需重复配置

Android开发构建工具链版本对齐:AGP、Gradle、JDK与Android Studio兼容性全解析 在软件工程实践中,构建工具链的版本管理是保障项目稳定性和团队协作效率的基石。其核心原理在于确保构建工具、编译环境与集成开发环境之间的指令集和API接口相互兼容,避免因版本错配导致的构建失败或行为异常。对于Android开发而言,这一技术价值尤为突出,它能显著提升构建速度、确保构建结果的可复现性,并降低团队协作成本。具体到应用场景,无论是新项目初始化、依赖库升级,还是CI/CD流水线的搭建,版本对齐都是首要步骤。本文聚焦于Android Gradle插件(AGP)、Gradle、JDK及Android Stu 阅读详情

相关推荐

DRV8870电机驱动芯片原理与嵌入式多平台驱动开发

H桥电机驱动芯片是直流电机控制的核心硬件模块,其通过双MOSFET拓扑实现方向与速度的精确调控。工作原理基于电荷泵自举驱动、集成电流检测及多重硬件保护机制,技术价值体现在高集成度、宽压适配(4.5V–45V)与强鲁棒性。典型应用场景涵盖智能机器人执行器、工业自动化设备及电池供电移动终端。本文围绕DRV8870这一主流驱动芯片,深入解析其PH/EN与Dual PWM双控制模式、nFAULT故障响应机制,并结合Arduino/ESP32/STM32三大平台,提供可复用的跨MCU驱动库设计范式与FreeRTOS实

weixin_32251525的博客 658

Android开发必知的maven-publish插件知识

作为Android开发,在我们开发到一定阶段总会接触SDK开发、组件化开发,这样就会有组件发布Aar的需求。Gradle提供了maven-publish插件供我们完成组件发布需求,但是大多数人可能只是简单的使用,见葫芦画瓢,并没有完整的了解插件的作用。这里本着复习完善的想法,带大家一起好好学习下。...

caizehui的博客 4267

【无人机路径规划】基于强化学习实现多无人机路径规划

【无人机路径规划】基于强化学习实现多无人机路径规划

k8291121的博客 1658

【亲测免费】 Android Maven Publish 插件使用教程

Android Maven Publish 插件使用教程 项目介绍 android-maven-publish 是一个修改版的 Maven Publish 插件,旨在兼容 Android 库项目(AAR)。该插件允许开发者将 Android 库项目发布到 Maven 仓库中。需要注意的是,自从 Android Gradle 插件(AGP)3.6.0 及以上版本开始,官方已经支持 Maven Pub...

gitblog_00308的博客 1019

模型瘦身术:YOLOv5无损剪枝实战教程

本文介绍了一种YOLOv5模型的无损剪枝方法,通过"稀疏训练+结构化剪枝+微调"的流程,在不损失精度的前提下显著减小模型尺寸并提升推理速度。具体步骤包括:1)稀疏训练给参数排优先级;2)裁剪不重要通道;3)微调恢复精度;4)验证效果。实战部分详细展示了从环境搭建到剪枝实现的完整流程,并分析了剪枝后在边缘设备部署、实时检测等场景的优势。该方法可使YOLOv5s模型从14MB缩减至2-3MB,推理速度提升30%-50%,适用于资源受限设备的轻量化部署需求。

LXY_LOVE36的博客 105

【RT-DETR有效改进】为什么YOLO版本的RT-DETR训练模型不收敛精度差的问题

本文的内容同样为本专栏的前期预热文章,文章主要解释一下为什么有的人跑ultralytics仓库的RT-DETR精度很差,模型不收敛,mAP异常的情况。为了验证这一情况我也是跑了多个实验,从多个数据集出发,100-500的数据集我跑了大概5个数据集,1000的我跑了二个,2000的我跑了一个,4000的跑了一个,同时其中一些版本我也用了不同的batch_size来出发验证精度异常的情况。

Snu77的博客 9764

适配 AGP8.5 版本,各种问题(三)

地点:深圳、西丽湖环湖碧道时间:2025年2月23日。

Primer5 1256

AI驱动芯片设计的端到端验证:AI应用架构师的全流程指南

想象你要建造一座1000层的超级摩天大楼,每个房间都有独特的功能,管道、电路、电梯系统交织如迷宫。传统的检查方式是派1000个工程师逐层逐房手动检查,耗时十年且仍可能遗漏火灾隐患。这就是今天芯片设计面临的困境:7nm芯片含百亿晶体管,相当于百亿个"房间",传统验证方法(人工编写测试用例、随机仿真)已难以应对。本文的目的,是为AI应用架构师提供一份"AI驱动芯片验证导航图",范围涵盖从验证需求分析到芯片签核的全流程,包括AI模型如何融入传统验证工具链、数据如何驱动验证效率提升、以及端到端闭环系统的构建方法。

2501_92132293的博客 1242

AGP 8.0 适配 - transform适配

Google的AGP 8.0 已经出来一段时间了,基于8.0有许多新的特性,比如baseline profile,dexlayout等,这些特性可以大幅度的提升app的启动速度。该案例实现如下功能:收集线上代码类的使用情况,从而通过数据分析,针对线上未使用的类,进行移除,而从缩减包体积。第二种是针对需要先全局遍历所有的字节码,找到对应类,方法,相关的数据,然后二次遍历,进行插装。说明:从上图可以看出,针对具体的io流的遍历,官方已经帮我们覆盖掉了,我们只需要关注与要做的字节码插装的实现就可以了。

zhuzhumouse的专栏 2817

【STM32实物】基于STM32设计的智能仓储管理系统

近年来,随着我国仓储发展的和药品需求的不断增多,许多医院都采用药物仓储管理系统。我国的药物仓储产业已经有了长足的发展,仓库的规模不断变大,对仓储的要求也不断增高,药物的存储,识别以及对仓储环境条件的要求成为仓储的重要决策,他们可以根据不同的特点在不同场景中使用。本文详细介绍了一个基于单片机技术的智能仓储管理系统的设计与实现,这个系统可谓是集射频识别(RFID)技术和环境监测传感器于一身,旨在提高仓储操作的自动化和精确度。

嵌入式阿齐Archie 1万+

vue3+ts+elementui-plus二次封装树形表格实现不同层级展开收起的功能

我只定义了三层数据,就只演示展开了三层,还可以多层,自己设置即可。

蜗牛~~ 2603

AGP 升级,适配 8.5 版本(一)

本次升级是从之前的 AGP7+ 升级到 AGP8+

Primer5 2839

FOC 转子初始位置检测(图文详解)

什么是转子的初始位置? 其实转子的初始位置是不确定的,但是在电机启动的时候,我们需要得到电角度,这样才可以进行矢量控制;所以,这里将转子与A轴重合作为初始位置,此时电角度也恰好为零,具体如下图所示; ) 至于原理下面会详细分析,这样在转子到初始位置后,也可以得到准确的电角度,就可以实现磁场和转子的同步转动。 如何让转子运行到初始位置? 其实这是一个很简单的问题,在这里我将它放大了,简单地分析了一...

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 2万+

Arouter适配AGP 7.3.0版本

如何调试arouter 源码 arouter的代码 主要分为 3个部分,一个是基础的arouter-api包, 然后是注解处理器arouter-compile包 最后是arouter-register 这个包, 简单概述一下 这3个模块的具体作用吧arouter-api:99%的人使用arouter代码 都是直接用这个包下面的api,大部分用下注解就可以了arouter-compiler:这里是注...

Android技术之家 2031

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

agp4 时 Android 工程可运行模块同级目录下的自定义 Gradle 脚本能够直接使用内置的 project 属性(对象),到 apg7 怎么就不行了,如何兼容?this 是 script 对象,this.project 没有输出,但 this.buildscript 和 agp4 对象类型还是一致的,满足我们的要求,可以使用 buildscript。setting.gradle 引入的脚本执行找不到 project 属性,可以替换为。

Primer5 1321

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

AGP升级后原项目aar依赖报错

2.在module_local_aar下根据自己的aar新建一个空文件夹test,将需要引用的aar文件copy到此文件夹。3、在test文件夹下新建build.gradle文件,build.gradle文件内容为。1、在项目的根目录下新建空文件夹module_local_aar(名称自己定)⚠️⚠️:每一个aar都是一个单独的注册"一级目录:二级目录"⚠️⚠️:每一个aar都是一个单独的implemetation。⚠️⚠️:每一个aar都是一个单独的空文件夹。还有种方案可通过maven方式远程依赖。

u010945168的博客 546

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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

前一篇文章中使用的是默认配置,打包直接报错,后来改成 PREFER_SETTINGS 虽然规避了直接终止打包,但仓库不生效,未达到效果(不是说 prefer 首选配置吗,正常理解不应该也会生效才对嘛)~动态添加仓库,根据本次打包所带的不同渠道SDK添加对应的仓库地址,可以在 AGP7 中似乎没有生效,再打包过程中出现了报错。gradle Plugin 内如何动态添加仓库,在 AGP4+ 中插件内部通过。),通过 project 配置的仓库不生效。根据自身插件实际情况,我选择了。

Primer5 660

Android Gradle的神奇之处 ---- AGP

AGP的介绍

qq_33235287的博客 2668

解决Gradle Sync报错 Plugin [id: ‘com.android.application‘, version: ‘8.5.1‘] was not found

其实dependencies、repositories这些配置是不是在 build.gradle 和 settings.gradle配置的效果是一样的呢?Android Studio 新建项目时默认.gradle 文件的版本差异。提供本地系统变量 GRADLE_HOME 和GRADLE_USER_HOME 配置方法。

。 1万+

Unity 2021+ Android构建失败:Gradle与AGP版本兼容性全解析与解决方案

在Android应用开发中,Gradle作为核心构建工具,负责自动化编译、打包和依赖管理。其工作原理是通过定义任务执行流水线,将源代码、资源及依赖库转换为可部署的APK或AAB文件。Android Gradle Plugin(AGP)则是专为Android项目定制的Gradle插件,它扩展了Gradle的能力,提供了资源处理、DEX转换、代码混淆等Android特有的构建任务。AGP与Gradle版本之间存在严格的兼容性矩阵,版本不匹配会导致构建失败,影响开发效率和项目交付。这一技术问题在游戏开发领域尤为突

weixin_33736048的博客 336

Android Studio Narwhal:AGP 8.7+ 与 Gradle 8.9 构建范式重构指南

Android Studio Narwhal(2025)标志着 Android 构建体系从脚本驱动到模型驱动的根本性演进。其核心在于 AGP 8.7+ 作为语义中枢、Gradle 8.9+ 作为执行底座的主从协同架构,彻底摒弃 Groovy 脚本与废弃 API,强制采用 Kotlin DSL 声明式配置。这一转向不仅消除了‘deprecated gradle features’等兼容性警告,更通过内存中 Project Model 实现编译前静态分析、实时依赖推演与增量构建优化,显著提升大型项目构建与 ID

daxi1047的博客 491

在jitpack上发布依赖库

不需要登录,在jitpack首页输入 git repository url,点击Look up,查找并自动发布发行版本库。将代码提交到版本服务器后,在版本服务器上创建发行版本:指定版本号和标题。在项目build.gradle.kts中添加 agp和maven插件。如果发布失败,会显示为红色的Log文件,在其中查找问题即可。在根目录的gradle.properties文件中定义属性。在模块build.gradle.kts中配置发布信息。

565

Gradle之适配

在项目中加入http协议的Maven 源的话,报错,信息如下。方案一(不推荐,仅作为临时方案)

追梦的鱼儿 286

Android Studio报错:Could not move temporary workspace () to immutable location

Android Studio报错"Could not move temporary workspace"的解决方案是执行Build菜单的Clean Project操作。文章还汇总了Android开发相关配置要点:1)Android Gradle插件与Gradle版本对应关系;2)迁移.gradle文件夹的方法;3)通过build.gradle实现版本号自动管理,包括按日期自增VersionCode和区分构建类型设置VersionName。这些内容涉及版本兼容性、环境配置和自动化构建等核心

Zhang Phil 2157

解决Android构建错误:Could not resolve all files for configuration ‘:app:androidJdkImage‘

在Android开发中,Gradle作为核心构建工具,其依赖解析机制是项目编译打包的基础。它通过声明依赖配置并从远程仓库下载所需构件来确保构建环境的一致性。Android Gradle Plugin(AGP)为了统一编译环境,引入了捆绑特定版本JDK的机制,通过`androidJdkImage`这一特殊配置来管理JDK镜像的下载与使用。这一设计能有效避免因本地JDK版本差异导致的构建问题,对于保障团队协作和持续集成的稳定性具有重要价值。然而,当网络环境不佳或仓库配置不当时,该配置的解析容易失败,从而中断整个

weixin_33714884的博客 468
上一篇: AGP8+ fullMode 完全模式混淆闪退
下一篇: 插件内获取 Android gradle plugin 版本号
Primer@.com
博客等级 码龄9年 524粉丝 292原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值