Android 使用maven publish插件发布产物(aar)全过程实践

【我的Android进阶之旅】写一个gradle脚本,快速发布Android AAR包或者Jar包上传到Maven私服 文章摘要: 本文介绍了如何通过Gradle脚本实现同时上传AAR和JAR包到Maven私服。作者分享了一个名为maven_upload_aar_and_jar.gradle的脚本,该脚本集成了上传Android库(AAR)和Java库(JAR)的功能。脚本通过读取maven_user.properties和maven_pom.properties配置文件获取仓库地址、版本类型等参数,支持DEV、BETA、RELEASE三种版本发布。特别针对RELEASE版本设置了严格的验证条件,要求必须通过Jenkins在 阅读详情

背景

平时开发中会把一些独立的功能模块抽取出来作为sdk,既方便业务接入,又能让其他业务线快速复用。那么我们就需要将sdk打包上传到maven仓库,让业务侧依赖即可。

一、编译后的产物

在上传产物到maven仓库之前,我们的知道产物到底是什么。

Android Gradle插件根据项目gradle中应用不同的插件类型在编译组装后会生成不同的产物:

image.png

1.1 APK 构件

Android项目的主工程app的gradle配置文件依赖:

apply plugin: 'com.android.application' 

因此,在通过编译命令./gradlew assembleDebug 或./gradlew assembleRelease后,就会在build/outputs/apk文件下生成产物:

image.png

如图,apk就是产物(构件)。

1.2 AAB(Android app bundle)构件

如果是海外市场,在Google Play上架的应用必须要打aab包,而不是之前的apk格式。具体区别就暂不讨论了~ 编译命令为:./gradlew bundleDebug 或./gradlew bundleRelease。产物为:

image.png

1.3 AAR 构件

一般的module在编译打包后,会生成aar:

image.png

二、publish插件

有了产物,我们就需要把产物上传到maven仓库(一般是私有仓库),方便公司项目直接依赖。而上传就要用到publish插件。APG 3.6.0之前用的maven插件,之后都用maven-publish插件。

2.1 maven-publish插件使用

我们可以新建一个gradle文件,如:maven_publish.gradle。专门用来上传aar。配置如下:

 //maven-publish 新方式
plugins {
    //todo 1 上传插件
    id 'maven-publish'
}

afterEvaluate{
    publishing {
        publications {

            // Creates a Maven publication called "myPublication".
            myPublication(MavenPublication) {
                groupId 'com.sdk.aarpub'
                artifactId 'aar-test'
                version '1.2.2'             // Your package version
//                artifact publishArtifact    //Example: *./target/myJavaClasses.jar*
                artifact "build/outputs/aar/aar-test-release.aar"//aar包的目录

                //带上依赖 ,否则会报错
                pom.withXml {
                    def dependenciesNode = asNode().appendNode('dependencies')

                    def scopes = [configurations.compile]
                    if (configurations.hasProperty("api")) {
                        scopes.add(configurations.api)
                    }
                    if (configurations.hasProperty("implementation")) {
                        scopes.add(configurations.implementation)
                    }
                    if (configurations.hasProperty("debugImplementation")) {
                        scopes.add(configurations.debugImplementation)
                    }
                    if (configurations.hasProperty("releaseImplementation")) {
                        scopes.add(configurations.releaseImplementation)
                    }

//                    if (project.ext.targetType != "jar") {
//                        scopes.add(configurations.provided)
//                    }

                    scopes.each { scope ->
                        scope.allDependencies.each {
                            if (it instanceof ModuleDependency) {
                                boolean isTransitive = ((ModuleDependency) it).transitive
                                if (!isTransitive) {
                                    println "<<<< not transitive dependency: [${it.group}, ${it.name}, ${it.version}]"
                                    return
                                }
                            }

                            if (it.group == "${project.rootProject.name}.libs" || it.version == 'unspecified') {
                                return
                            }

                            if (it.group && it.name && it.version) {
                                def dependencyNode = dependenciesNode.appendNode('dependency')
                                dependencyNode.appendNode('groupId', it.group)
                                dependencyNode.appendNode('artifactId', it.name)
                                dependencyNode.appendNode('version', it.version)
                                dependencyNode.appendNode('scope', scope.name)
                            }
                        }
                    }
                }
            }
        }

        // Repositories *to* which Gradle can publish artifacts
        repositories {
            maven {
            //上传到项目本地仓库
                url uri('../local_mavenrepo')
//            credentials {
//                username "default"
//                password "default"
//            }
            }
        }
    }
} 

在assemble命令后,执行publish命令:

./gradlew publish 

2.2 maven插件使用

旧方式:

plugins {
    //todo 1 上传插件
    id 'maven'
}


uploadArchives{
    // 方式一
    repositories {
        mavenDeployer{
            repository(url: uri('../local_mavenrepo'))
            //todo 2 配置版本信息 方式二
            pom.groupId = 'com.sdk.aarpub'
            pom.artifactId = 'aar-test'
            pom.version = '1.1.0'
        }
        //mavenLocal 这个是本机上的maven本地缓存仓库
//        mavenLocal()
    }

} 

在assemble命令后,执行uploadArchives命令:

./gradlew uploadArchives 

2.3 业务侧使用

在项目的根gradle文件中,配置仓库:

maven { url '../local_mavenrepo/'} 

在对应的模块中引入依赖:

implementation 'com.sdk.aarpub:aar-test:1.2.2' 

三、问题总结

3.1 项目中依赖本地aar的时候打包报错Direct local .aar file dependencies are not supported when building an AAR…

原因:当打包aar时候直接依赖本地的aar是不被允许的。 解决方案:通过把依赖的aar放到单独的模块中,让直接依赖本地aar变成依赖模块。

  1. 新建一个文件夹aar-lib
  2. 新建一个libs文件夹,把oaid_sdk_1.0.30.aar放入到libs目录中

image.png 3. 新建build.gradle文件,写入如下内容

configurations.maybeCreate("default")
def publishArtifact = artifacts.add("default", file('libs/oaid_sdk_1.0.30.aar')) 
  1. 在项目的settings文件中引入该模块
include ':aar-lib' 

  1. 删除报错模块中的aar文件,替换原来依赖方式
//    implementation files('libs/oaid_sdk_1.0.30.aar') 旧的方式
    implementation project(path:":aar-lib") 

3.2 module打包aar时依赖aar导致的类引用不到的问题

3.1 只是解决了在项目打包过程中依赖本地aar的问题。 当module作为sdk同时又依赖aar时,此时接入sdk会报错,提示引用不到aar中的类。当然我们可以直接把aar给到业务测,直接引入即可,但这样增加了接入成本。因此,我们的解决方案跟原理跟3.1一样,但是会把aar上传到远程库,作为远程来依赖。

比如 A模块依赖了oaid_sdk_1.0.30.aar,同时A模块作为sdk是要提供给业务侧app使用的。

  1. 按照3.1的方式创建一个aar-lib,build.gradle内容有所不同:
plugins {
    id 'maven-publish'
}

//生成文档注释
task androidJavadocs(type: Javadoc) {
    failOnError = false
    source = android.sourceSets.main.java.srcDirs
    ext.androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
    classpath += files(ext.androidJar)
}
//将文档打包成jar
task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
    archiveClassifier.set('javadoc')
    from androidJavadocs.destinationDir
}
//将源码打包,这一点对kotlin来说很重要,否则业务侧无法看到源码
task androidSourcesJar(type: Jar) {
    archiveClassifier.set('sources')
    from android.sourceSets.main.java.srcDirs
}
configurations.maybeCreate("default")
def publishArtifact = artifacts.add("default", file('libs/oaid_sdk_1.0.30.aar'))

afterEvaluate{
    publishing {
        publications {

            myPublication(MavenPublication) {
                groupId 'com.sdk.aarpub'
                artifactId 'aar-lib'
                version '1.0.0'             // Your package version
                artifact(androidSourcesJar)//将源码打包进aar,如果不需要可以去掉
                artifact(androidJavadocsJar)//将注释打包进aar,如果不需要可以去掉
                // 将aar推送到远程仓库
                artifact publishArtifact    //Example: *./target/myJavaClasses.jar*
            }
        }

        // Repositories *to* which Gradle can publish artifacts
        repositories {
            maven {
                url uri('../local_maverepo')
//            credentials {
//                username "default"
//                password "default"
//            }
            }
        }
    }
} 

  1. 执行发布命令
./gradlew :aar-lib:publish 

  1. 让A模块依赖第二步中推送到远程的aar库
implementation 'com.sdk.aarpub:aar-lib:1.0.0' 

  1. 重新打包A模块,当app依赖A模块时候,A模块中的aar就会被引用到了

当然在A模块发布的时候记得要带上依赖:

 //带上依赖 ,否则会报错
                pom.withXml {
                    def dependenciesNode = asNode().appendNode('dependencies')

                    def scopes = [configurations.compile]
                    if (configurations.hasProperty("api")) {
                        scopes.add(configurations.api)
                    }
                    if (configurations.hasProperty("implementation")) {
                        scopes.add(configurations.implementation)
                    }
                    if (configurations.hasProperty("debugImplementation")) {
                        scopes.add(configurations.debugImplementation)
                    }
                    if (configurations.hasProperty("releaseImplementation")) {
                        scopes.add(configurations.releaseImplementation)
                    }

//                    if (project.ext.targetType != "jar") {
//                        scopes.add(configurations.provided)
//                    }

                    scopes.each { scope ->
                        scope.allDependencies.each {
                            if (it instanceof ModuleDependency) {
                                boolean isTransitive = ((ModuleDependency) it).transitive
                                if (!isTransitive) {
                                    println "<<<< not transitive dependency: [${it.group}, ${it.name}, ${it.version}]"
                                    return
                                }
                            }

                            if (it.group == "${project.rootProject.name}.libs" || it.version == 'unspecified') {
                                return
                            }

                            if (it.group && it.name && it.version) {
                                def dependencyNode = dependenciesNode.appendNode('dependency')
                                dependencyNode.appendNode('groupId', it.group)
                                dependencyNode.appendNode('artifactId', it.name)
                                dependencyNode.appendNode('version', it.version)
                                dependencyNode.appendNode('scope', scope.name)
                            }
                        }
                    }
                } 

文末

要想成为架构师,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。

如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。
在这里插入图片描述
相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。

一、架构师筑基必备技能

1、深入理解Java泛型
2、注解深入浅出
3、并发编程
4、数据传输与序列化
5、Java虚拟机原理
6、高效IO
……

在这里插入图片描述

二、Android百大框架源码解析

1.Retrofit 2.0源码解析
2.Okhttp3源码解析
3.ButterKnife源码解析
4.MPAndroidChart 源码解析
5.Glide源码解析
6.Leakcanary 源码解析
7.Universal-lmage-Loader源码解析
8.EventBus 3.0源码解析
9.zxing源码分析
10.Picasso源码解析
11.LottieAndroid使用详解及源码解析
12.Fresco 源码分析——图片加载流程

在这里插入图片描述

三、Android性能优化实战解析

  • 腾讯Bugly:对字符串匹配算法的一点理解
  • 爱奇艺:安卓APP崩溃捕获方案——xCrash
  • 字节跳动:深入理解Gradle框架之一:Plugin, Extension, buildSrc
  • 百度APP技术:Android H5首屏优化实践
  • 支付宝客户端架构解析:Android 客户端启动速度优化之「垃圾回收」
  • 携程:从智行 Android 项目看组件化架构实践
  • 网易新闻构建优化:如何让你的构建速度“势如闪电”?
  • …

在这里插入图片描述

四、高级kotlin强化实战

1、Kotlin入门教程
2、Kotlin 实战避坑指南
3、项目实战《Kotlin Jetpack 实战》

  • 从一个膜拜大神的 Demo 开始

  • Kotlin 写 Gradle 脚本是一种什么体验?

  • Kotlin 编程的三重境界

  • Kotlin 高阶函数

  • Kotlin 泛型

  • Kotlin 扩展

  • Kotlin 委托

  • 协程“不为人知”的调试技巧

  • 图解协程:suspend

在这里插入图片描述

五、Android高级UI开源框架进阶解密

1.SmartRefreshLayout的使用
2.Android之PullToRefresh控件源码解析
3.Android-PullToRefresh下拉刷新库基本用法
4.LoadSir-高效易用的加载反馈页管理框架
5.Android通用LoadingView加载框架详解
6.MPAndroidChart实现LineChart(折线图)
7.hellocharts-android使用指南
8.SmartTable使用指南
9.开源项目android-uitableview介绍
10.ExcelPanel 使用指南
11.Android开源项目SlidingMenu深切解析
12.MaterialDrawer使用指南
在这里插入图片描述

六、NDK模块开发

1、NDK 模块开发
2、JNI 模块
3、Native 开发工具
4、Linux 编程
5、底层图片处理
6、音视频开发
7、机器学习

在这里插入图片描述

七、Flutter技术进阶

1、Flutter跨平台开发概述
2、Windows中Flutter开发环境搭建
3、编写你的第一个Flutter APP
4、Flutter开发环境搭建和调试
5、Dart语法篇之基础语法(一)
6、Dart语法篇之集合的使用与源码解析(二)
7、Dart语法篇之集合操作符函数与源码分析(三)
…
在这里插入图片描述

八、微信小程序开发

1、小程序概述及入门
2、小程序UI开发
3、API操作
4、购物商场项目实战……

在这里插入图片描述

全套视频资料:

一、面试合集
在这里插入图片描述
二、源码解析合集

在这里插入图片描述
三、开源框架合集

在这里插入图片描述
欢迎大家一键三连支持,若需要文中资料,直接点击文末优快云官方认证微信卡片免费领取【保证100%免费】↓↓↓

【我的Android进阶之旅】使用maven-publish插件代替maven插件上传AAR至本地Maven仓库,并上传对应的项目依赖关系depencies信息到POM元数据文件 文章摘要: 本文介绍了使用maven-publish插件解决Gradle上传aar到Maven私服时依赖丢失的问题。作者发现使用传统maven插件上传的aar会丢失POM文件中的依赖信息,导致编译失败。通过对比不完整和完整的POM文件,展示了缺少依赖声明的问题。文中还提供了获取SVN/Git版本号、Jenkins构建信息等实用Gradle脚本,为Android库发布提供了完整的解决方案。最终通过maven-publish插件生成的POM文件能正确包含所有依赖关系,确保下游项目能自动下载所有依赖库。 阅读详情

相关推荐

MavenPublishDemo:使用gradle maven-publish插件向maven私服上传android library

MavenPublishDemo 使用gradle maven-publish插件向maven私服上传android library 使用方法 根据项目情况对mavenpublishdemo中gradle.properties中的项进行配置

maven-publish插件的使用

文章目录maven-publish插件maven-publish的使用引入插件使用插件publicaionsrepositioriespublishToMavenLocal完整的example maven-publish插件 maven-publish是一个Gradle插件,可以我们的编译的输出物(artifacts)发布到Apache Maven仓库当中,例如aar,jar等library发布...

不悔的青春 2万+

aar-publish-plugin:用于使用Maven Publish插件发布Android(AAR)库的Gradle插件

aar-publish-plugin:用于使用Maven Publish插件发布Android(AAR)库的Gradle插件

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

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

caizehui的博客 4265

Jetson Nano摄像头选型与配置全攻略:CSI与USB接口实战指南

在嵌入式视觉与边缘计算项目中,摄像头作为核心传感器,其选型与配置直接影响系统性能。CSI(Camera Serial Interface)和USB(Universal Serial Bus)是两种主流接口,前者通过MIPI CSI-2协议直接与SoC通信,具备低延迟、高带宽特性,适合实时性要求高的应用;后者基于通用串行总线标准,即插即用,通用性强。在NVIDIA Jetson Nano平台上,合理选择摄像头接口并优化驱动配置,能充分发挥其GPU加速优势,提升图像处理流水线效率。本文聚焦Jetson Nano

weixin_29190651的博客 323

CentOS 7环境下GLPI与OCS Inventory资产管理系统集成部署指南

本文详细介绍了在CentOS 7环境下,如何将GLPI与OCS Inventory两大开源工具进行集成部署,构建自动化资产管理系统。指南涵盖环境准备、核心服务安装、Web界面初始化、OCS插件配置及资产同步实战,帮助运维人员实现IT资产的自动发现、统一管理与可视化,大幅提升资产管理效率。

weixin_29274337的博客 327

使用maven publish插件发布产物(aar)全过程实践

原因:当打包aar时候直接依赖本地的aar是不被允许的。解决方案:通过把依赖的aar放到单独的模块中,让直接依赖本地aar变成依赖模块。新建一个文件夹aar-lib新建一个libs文件夹,把放入到libs目录中3. 新建build.gradle文件,写入如下内容在项目的settings文件中引入该模块删除报错模块中的aar文件,替换原来依赖方式// implementation files('libs/oaid_sdk_1.0.30.aar') 旧的方式。

chuyouyinghe的专栏 1919

基于大疆TSDK与Pix4D的热红外数据工程化处理:从RJPG到温度正射影像的完整工作流

本文详细介绍了基于大疆TSDK与Pix4D的热红外数据工程化处理完整工作流。通过Python脚本自动化解析RJPG格式的热红外图像,提取并转换其中的原始辐射数据为包含真实温度信息的TIFF文件,再结合Pix4Dmapper进行批量拼接,最终生成可直接用于GIS分析的温度正射影像图。该流程解决了手动处理效率低下、参数校准复杂等难题,实现了从原始数据到定量分析成果的高效、准确、可重复生产。

weixin_29161785的博客 377

Android 发布 aar 到 maven 仓库(maven 和 maven-publish 插件的区别)

Android 如何发布 aar 到 maven 仓库以及 maven 和 maven-publish 插件的区别。

川峰的博客 4550

Halcon与C#联合编程(一):使用S7协议实现机器视觉上位机与西门子PLC联动

本项目技术栈:C#基础,多线程,Halcon DirectShow,Halcon形状检测,Halcon QR码识别,西门子S7通讯协议,西门子PLC为核心的下位机及执行元件

虎鲸不是鱼 1万+

分子对接中的相互作用特征分析(目视筛查)

介绍分子对接的相互作用特征,以及如何通过这些特征进行目视筛查

recher_He1107的博客 5759

Android:发布aar到maven仓库,使用maven-publish插件

maven插件适用于gradle1.0-6.2版本,6.2版本后该插件就被废弃了,推荐使用maven-publish插件。maven-publis插件是在gradle 1.3 版本后开始支持的,使配置更加简洁。

h_bpdwn的博客 2813

保姆级避坑指南:在Ubuntu 22.04上用ROS2 Humble搞定TurtleBot3的SLAM与导航(附5个常见报错解决方案)

本文提供了一份详细的Ubuntu 22.04上使用ROS2 Humble和TurtleBot3进行SLAM建图与导航的避坑指南,涵盖Gazebo启动失败、场景加载问题、环境变量设置、GLIBCXX版本冲突及Nav2参数配置等5个常见报错的解决方案,帮助开发者高效完成机器人导航项目。

weixin_29062823的博客 286

Android:发布aar包到maven仓库; maven插件 和 maven-publish 插件的区别

前言 在日常开发中,不可避免的需要把自己的 library 发布到 maven 仓库中,这样使用起来也更加方便。 发布 aar 包到 maven 仓库,主要是使用 Gradle 提供的插件: maven 插件(旧版),在 Gradle 6.2 之后,就完全被弃用了(增加了 @Deprecated 注解) maven-publish 插件 maven插件,是 Gradle 1.0 的时候提供的用于发布aar/jar包到 Maven 仓库的插件。在 Gradle 1.3 中,引入了一种新的发布插件,即:

h_bpdwn的博客 1963

稚晖君Dummy机械臂CAN总线控制详解:从代码到实战(附常见问题排查)

本文深入解析了稚晖君Dummy机械臂的CAN总线控制技术,从协议设计到代码实现,详细介绍了CAN总线在机械臂控制中的核心价值、通信协议栈设计、运动控制指令实现及常见问题排查方法。通过实战案例和代码示例,帮助开发者快速掌握机械臂CAN总线控制的关键技术。

uuu88的博客 295

# 解决 win11 连接共享打印机,报错 0x00000709 问题

# 解决 win11 连接共享打印机,报错 0x00000709 问题

段子手168的博客 9万+

Android:发布aar包到maven仓库以及 maven插件 和 maven-publish 插件的区别

前言 在日常开发中,不可避免的需要把自己的 library 发布到 maven 仓库中,这样使用起来也更加方便。 发布 aar 包到 maven 仓库,主要是使用 Gradle 提供的插件: maven 插件(旧版),在 Gradle 6.2 之后,就完全被弃用了(增加了 @Deprecated 注解) maven-publish 插件 maven插件,是 Gradle 1.0 的时候提供的用于发布aar/jar包到 Maven 仓库的插件。在 Gradle 1.3 中,引入了一种新的发布插件,

m0_64365896的博客 2280

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

使用Maven-Publish发布多渠道aar包

在module中配置多个渠道 android { compileSdkVersion 29 buildToolsVersion "29.0.2" defaultConfig { minSdkVersion 21 targetSdkVersion 29 versionCode 1 versionName "1.0" //配置多个渠道 productFlavors { .

卧龙跃马的博客 2595

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SAP B1中文培訓教材_SDK

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

【Android】AAR文件的生成与使用

现在App开发组件化技术已是常态,有很多的功能模块都被抽出来成为一个个组件供给开发者使用。为了开发者使用,这些组件都会被打包,就和java中的库一样。在java中,一个模块可以被打包为Jar包,而在Android中,不仅仅有java文件,还有一些其他的资源文件,所以就出现了AAR文件(一种打包格式),本文通过一个demo来介绍如何打包一个Library文件,生成AAR。aar一种压缩格式(打包的Library),相当于Android里面的Jar包,不过里面可以包含Android相关的一些资源,比如说:lay

qq_42788340的博客 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

发布aar包到maven仓库

Android:发布aar包到maven仓库以及 maven插件 和 maven-publish 插件的区别 在日常开发中,不可避免的需要把自己的 library 发布到 maven 仓库中,这样使用起来也更加方便。 发布 aar 包到 maven 仓库,主要是使用 Gradle 提供的插件: maven 插件(旧版),在 Gradle 6.2 之后,就完全被弃用了(增加了@Deprecated注解) maven-publish 插件 maven插件,是 Gradle 1.0 的..

梦想不只是梦与想的博客 3566

Android基于Gradle 7.0+(8.2、8.6)使用maven-publish插件发布aar到maven仓库

maven插件适用于gradle1.0-6.2版本,6.2版本后该插件就被废弃了,推荐使用maven-publish插件。如果你的Android Studio 在配置后没有publishing的task,可以尝试clean下重新build。如果还是不行,不要怀疑配置有问题,mac电脑有时候会出现这种问题,换window电脑马上就有这个task了。下面是我项目中 使用的配置,当然pom的配置你可以继续跟进需要进行删减。选项,我们双击它,就开始执行发布插件的操作了。如果你比较喜欢恋旧,下面的配置也是可以的。

Dream It Possible 3144

Gradle插件之maven-publish:发布android library到maven仓库

maven插件已经过时,官方推荐使用这个插件来实现将我们的代码发布到 Apache Maven仓库的功能。

chuyouyinghe的专栏 2537

Android Maven Publish 插件使用教程

Android Maven Publish 插件使用教程 1. 项目的目录结构及介绍 android-maven-publish/ ├── scripts/ ├── gradle/ │ └── plugin/ ├── sample/ ├── .gitignore ├── .travis.yml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── gra...

gitblog_01034的博客 946

闭环仿真 AlpaSim:让端到端自动驾驶策略从真实场景跑通到评估报告

AlpaSim 是一个开源的自动驾驶闭环仿真平台,把端到端 AV 策略放进真实采集场景中运行,覆盖传感器画面、交通行为、车辆动力学到评估指标的全链路。它面向需要在单机或集群上验证驾驶策略的研究者和工程师。 ## 🗺️ 能力全景 AlpaSim 把仿真拆成一组通过 gRPC 通信的 microservice:Wizard 负责部署与接线,Runtime 作为中枢驱动仿真循环。`docs/DES

gitblog_00057的博客 883

【亲测免费】 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
上一篇: Android 中 Handler的使用和源码详细分析
下一篇: Android WebView支持下载blob协议文件
网络安全-XG
博客等级 码龄5年 1万+粉丝 2752原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值