Android 多模块(lib)批量打包 aar 上传 maven 仓库实践

简介: 大型项目模块众多时,可配合 gradle.properties 和 settings.gradle 设置开发中依赖 aar 库替换本地模块 从而加快编译速度。publishmaven.sh 还可添加到 ci 任务实现自动打包。

项目结构

project
    |__ app
        |__ build.gradle
    |__ lib_aa                    
        |__ build.gradle
    |__ lib_bb                    
        |__ build.gradle                 
    |__ build.gradle
    |__ gradle.properties
    |__ publishmaven.gradle
    |__ publishmaven.sh

封装 maven-publish 的 publishmaven.gradle 脚本:

apply plugin: 'maven-publish'

// 后缀日期
def data = new Date().format("yyyyMMdd", TimeZone.getTimeZone("GMT+08:00"))

afterEvaluate { project ->
    try {
        if (publishProjectName != null
                && !publishProjectName.isEmpty()
                && publishProjectName != project.name) {
            return
        }
        def groupId = project.ext["GROUP_ID"]
        def artifactId = project.ext["ARTIFACT_ID"]

        def version = "${app.versionName}-$data-SNAPSHOT"

        println "配置 ${project.name} 工程 maven 打包插件: { groupId : $groupId, artifactId : $artifactId, version : $version } "

        publishing {
            publications {
                release(MavenPublication) {
                    // 可根据自己需求打 debug 包还是 release 包
                    // from project.components.debug
                    from project.components.release
                    it.groupId = groupId
                    it.artifactId = artifactId
                    it.version = version
                }
            }

            repositories {
                maven {
                    allowInsecureProtocol true
                    // 自己的 maven 私服仓库地址
                    url = "http://nexus.devmobile.com/repository/android-snapshots/"
                    credentials {
                        // 自己的 maven 私服账号
                        username = "android"
                        // 自己的 maven 私服密码
                        password = "123456"
                    }
                }
            }
        }
    } catch (Exception e) {
        // 忽略未配置打包信息的 project
    }
}

批量打包上传 publishmaven.sh 脚本:

#!/bin/bash

# 全量打包
#./gradlew publish

./gradlew publish -PpublishProjectName=lib_aa

./gradlew publish -PpublishProjectName=lib_bb

使用

1. 在主工程的 build.gradle 中配置:

allprojects {
    repositories {
        // maven-publish 下载所需仓库配置
        maven { url 'https://repo1.maven.org/maven2/' }
    }
}

2. 在主工程 gradle.properties 中配置:

# 单独为模块或库打包上传,不要加引号,不填时表示所有配置的模块或库都会打包上传,例:  lib_aa
publishProjectName=

3. 在子工程 build.gradle 中配置:

apply from: '../publishmaven.gradle'

// 配置此模块上传 maven 的 groupId
this.ext.GROUP_ID = 'com.xxxx.lib'
// 配置此模块上传 maven 的 artifactId
this.ext.ARTIFACT_ID = 'aa'

4. 批量打包上传:

./publishmaven.sh
相关文章
|
7月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
737 4
|
4月前
|
前端开发 Java 编译器
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
144 36
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
|
8月前
|
缓存 搜索推荐 Android开发
安卓开发中的自定义控件实践
【10月更文挑战第4天】在安卓开发的海洋中,自定义控件是那片璀璨的星辰。它不仅让应用界面设计变得丰富多彩,还提升了用户体验。本文将带你探索自定义控件的核心概念、实现过程以及优化技巧,让你的应用在众多竞争者中脱颖而出。
|
9月前
|
安全 Android开发 Kotlin
Android经典实战之SurfaceView原理和实践
本文介绍了 `SurfaceView` 这一强大的 UI 组件,尤其适合高性能绘制任务,如视频播放和游戏。文章详细讲解了 `SurfaceView` 的原理、与 `Surface` 类的关系及其实现示例,并强调了使用时需注意的线程安全、生命周期管理和性能优化等问题。
334 8
|
5月前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
117 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
6月前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
506 11
|
6月前
|
搜索推荐 Android开发 开发者
安卓应用开发中的自定义控件实践
在安卓应用开发的广阔天地中,自定义控件如同璀璨的星辰,点亮了用户界面设计的夜空。它们不仅丰富了交互体验,更赋予了应用独特的个性。本文将带你领略自定义控件的魅力,从基础概念到实际应用,一步步揭示其背后的原理与技术细节。我们将通过一个简单的例子——打造一个具有独特动画效果的按钮,来展现自定义控件的强大功能和灵活性。无论你是初学者还是资深开发者,这篇文章都将为你打开一扇通往更高阶UI设计的大门。
|
8月前
|
前端开发 搜索推荐 Android开发
安卓开发中的自定义控件实践
【10月更文挑战第4天】在安卓开发的世界里,自定义控件如同画家的画笔,能够绘制出独一无二的界面。通过掌握自定义控件的绘制技巧,开发者可以突破系统提供的界面元素限制,创造出既符合品牌形象又提供卓越用户体验的应用。本文将引导你了解自定义控件的核心概念,并通过一个简单的例子展示如何实现一个基本的自定义控件,让你的安卓应用在视觉和交互上与众不同。
|
8月前
|
测试技术 数据库 Android开发
深入解析Android架构组件——Jetpack的使用与实践
本文旨在探讨谷歌推出的Android架构组件——Jetpack,在现代Android开发中的应用。Jetpack作为一系列库和工具的集合,旨在帮助开发者更轻松地编写出健壮、可维护且性能优异的应用。通过详细解析各个组件如Lifecycle、ViewModel、LiveData等,我们将了解其原理和使用场景,并结合实例展示如何在实际项目中应用这些组件,提升开发效率和应用质量。
192 6
|
7月前
|
前端开发 Android开发 UED
安卓应用开发中的自定义控件实践
【10月更文挑战第35天】在移动应用开发中,自定义控件是提升用户体验、增强界面表现力的重要手段。本文将通过一个安卓自定义控件的创建过程,展示如何从零开始构建一个具有交互功能的自定义视图。我们将探索关键概念和步骤,包括继承View类、处理测量与布局、绘制以及事件处理。最终,我们将实现一个简单的圆形进度条,并分析其性能优化。

推荐镜像

更多