Android module发布管理插件

2018-11-21 11:38:39 浏览数 (1)

Android module发布管理插件

最近对发布Android SDK到jcenter的流程有点想法,历经一点点艰辛,做了一款Android Studio插件,希望能够使发布流程更简单友好。

真正去做这款插件时,才发现艰难。主要是因为 IntelliJ IDEA 插件开发的资料极少,包括如何在插件中获取Android工程信息、如何执行gradle任务等等。

目前完成了一个版本,有待完善。项目地址:http://git.code.oa.com/rongerwu/TCAndroidProjectManager

起因

Iot架构图.pngIot架构图.png

做物联网SDK开发,如图所示,整个项目包含多个SDK,层层引用,每个SDK对外发布到jcenter。

一点小问题

原来的发布流程依赖于python脚本执行gradle命令,其实也是蛮简单的,也很灵活:

  1. 命令行找发布脚本,输入要发布的module名。
  2. 输入参数版本号。首先得去build.gradle里看一下当前的版本号。
  3. 选择是否上传到jcenter,或者只是install到本地。

但是,也存在一些小问题,特别是module比较多的情况下。

  1. python脚本跟Android Studio等IDE是天然割裂开的,虽然可以通过IDE自带的命令行工具去执行命令。
  2. 以上过程包含了手动输入的过程(module名,版本号),因为module较多而容易出错。
  3. 没有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'
做个工具

因为以上问题,萌生了做一个傻瓜式发布工具的想法,具备以下几点:

  1. 使用简单。
  2. 尽量少的手动输入。
  3. 尽量友善且全面的提示。

经过

过程比较折腾,前后花了一周多时间。一开始想通过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。

0 人点赞