Android module发布管理插件
最近对发布Android SDK到jcenter的流程有点想法,历经一点点艰辛,做了一款Android Studio插件,希望能够使发布流程更简单友好。
真正去做这款插件时,才发现艰难。主要是因为 IntelliJ IDEA 插件开发的资料极少,包括如何在插件中获取Android工程信息、如何执行gradle任务等等。
目前完成了一个版本,有待完善。项目地址:http://git.code.oa.com/rongerwu/TCAndroidProjectManager
起因
做物联网SDK开发,如图所示,整个项目包含多个SDK,层层引用,每个SDK对外发布到jcenter。
一点小问题
原来的发布流程依赖于python脚本执行gradle命令,其实也是蛮简单的,也很灵活:
- 命令行找发布脚本,输入要发布的module名。
- 输入参数版本号。首先得去build.gradle里看一下当前的版本号。
- 选择是否上传到jcenter,或者只是install到本地。
但是,也存在一些小问题,特别是module比较多的情况下。
- python脚本跟Android Studio等IDE是天然割裂开的,虽然可以通过IDE自带的命令行工具去执行命令。
- 以上过程包含了手动输入的过程(module名,版本号),因为module较多而容易出错。
- 没有module详细信息的展示,比如无法直接看到当前的版本号,也没有module依赖其他module的关系展示。
比如 IotSDKAccount 依赖于 IotSDKApiClient 和 IotSDKCore,通常开发的时候是用依赖本地module的方式(如下代码所示)引入的,有时候为了测试jcenter上的版本改成依赖jcenter后忘记改回依赖本地,发布的 IotSDKAccount 就可能依赖了错误的module版本。如果有相关的module依赖提示会好很多。
代码语言:txt复制//依赖本地module
implementation project(path: ':IotSDKApiClient')
//依赖jcenter
implementation 'com.tencent.qcloud:iot-android-sdk-apiclient:1.0.6'
做个工具
因为以上问题,萌生了做一个傻瓜式发布工具的想法,具备以下几点:
- 使用简单。
- 尽量少的手动输入。
- 尽量友善且全面的提示。
经过
过程比较折腾,前后花了一周多时间。一开始想通过gradle插件来了实现,一番调研后,发现gradle插件能做所需要的业务逻辑,但是没法做界面展示。后面把目光瞄准IntelliJ IDEA 插件,一度万脸懵逼。
- 怎么基于gradle来构建插件工程。-- 接入gradle官方教程
- 如何写UI。-- 学习下java swing,学着使用IntelliJ自带的UI工具
- 如何对Android项目执行gradle命令。 --Tooling API
- 如何拿到android项目的详细信息(版本、依赖等等)。--这个费了一番劲
使用
如何编译打包及安装插件请查看项目README。
安装完成后,侧边栏有一个TCAPM按钮,用于弹出窗口展示项目所包含的modules。Android Studio->Preferences->Other Settings->TCAPM 是插件的配置窗口,目前可配置bintray的user和key,用于发布module到jcenter。
publish.gradle及配置module的build.gradle
目前无法直接使用插件发布module到jcenter,需要配合publish.gradle以及对每个module的build.gradle做一点点配置。
在每个module的build.gradle底部添加artifactId及artifactDesc,并且apply 项目中的puglish.gradle,例如:
代码语言:txt复制project.extensions.add('artifactId', 'iot-android-sdk-account')
project.extensions.add('artifactDesc', 'the tencent cloud iot suite account android sdk')
apply from: '../../QCloudIotCore/publish.gradle'
artifactId和artifactDesc是publish.gradle中所需要的,publish.gradle提供了gradle task供本插件调用。
配置窗口
配置发布到jcenter所需的user和key,后续可以在这里添加更多配置。
侧边栏
侧边栏展示项目所包含的modules以及版本号。版本号可编辑,publish按钮用于弹出发布确认窗口,refresh按钮用于刷新modules信息。
当编辑版本号后,新的版本号以红色字体展示。点击publish可发布所编辑的版本。
当确认发布后,module的build.gradle中的versionName会自动对应修改,versionCode也会按照一定规则自动修改(如versionName"1.2.6"对应的versionCode是 1002006)。
发布确认窗口
窗口展示当前module所依赖的modules及版本号,可选择是否install到本地及发布到jcenter。
发布结果
发布成功
发布失败
日志
不管成功或失败,都可以在右下角的 Event Log 查看运行日志。
其他
插件是我们工作的好伙伴,能够实现强大的功能。目前完成了第一个版本,实现基础的发布功能,也遗留一些不足:
- 目前暂不支持配置了flavor的module。(能实现)
- 中间过程日志不能及时输出,需等待执行发布结束后才能一并输出到Event Log。