Android module发布管理插件

Android module发布管理插件

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

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

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

起因

Iot架构图.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依赖提示会好很多。

//依赖本地module
implementation project(path: ':IotSDKApiClient')
//依赖jcenter
implementation 'com.tencent.qcloud:iot-android-sdk-apiclient:1.0.6'

做个工具

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

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

经过

过程比较折腾,前后花了一周多时间。一开始想通过gradle插件来了实现,一番调研后,发现gradle插件能做所需要的业务逻辑,但是没法做界面展示。后面把目光瞄准IntelliJ IDEA 插件,一度万脸懵逼。

使用

如何编译打包及安装插件请查看项目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,例如:

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。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏木头编程 - moTzxx

小程序微信支付 实例配置详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

4161
来自专栏编程坑太多

『中级篇』RoutingMesh之Ingress负载均衡(48)

PS:负载均衡解决了单一入口负载到多个容器上问题, 但是由于容器调度之后可能落到多个机器上, 假如某些主机上面没有工作的容器,而对外服务时候又希望服务可以被访问...

752
来自专栏编程坑太多

『中级篇』RoutingMesh之Ingress负载均衡(48)

PS:负载均衡解决了单一入口负载到多个容器上问题, 但是由于容器调度之后可能落到多个机器上, 假如某些主机上面没有工作的容器,而对外服务时候又希望服务可以被访问...

953
来自专栏北京马哥教育

实战讲解:如何用Python搭建一个服务器

有人说表示只学Python没有用,必须学会一个框架(比如Django和web.py)才能找到工作。 其实掌握一个类似于框架的高级工具是有用的,但是基础的东西可以...

1.4K5
来自专栏北京马哥教育

让你的Git水平更上一层楼的10个小贴士

最近,我们发表了关于Git基础知识和在团队中使用Git的教程。我们之前讨论的那些命令,已经足够让帮助一个开发者在Git世界里生存了。本篇文章,我们将尝试探索如何...

3115
来自专栏我是攻城师

从App的角度看进程和线程

在现在人人都有一部手机或电脑的年代,我们几乎天天都在使用各种app,如微信,QQ,抖音,优酷等等软件,表面上我们是与各种app交互,但如果站在操作系统的角度来看...

552
来自专栏IT技术精选文摘

一文了解Zookeeper

相信大家对 ZooKeeper 应该不算陌生。但是你真的了解 ZooKeeper 是个什么东西吗?如果别人/面试官让你给他讲讲 ZooKeeper 是个什么东西...

1583
来自专栏杨建荣的学习笔记

Oracle Data Guard压缩归档效果对比(r12笔记第26天)

Oracle Data Guard对归档的传输提供了很多辅助的选项,这个可 以通过log_archive_dest_x看到。 一般说这类的优化,如果...

3547
来自专栏BestSDK

微软发布 Windows 10 SDK build 15042

微软向开启了快速更新的 PC 平台开发者们推送了 Windows 10 SDK build 14046 预览版本,带来了一些微小的新特性。 ? 微软表示该 SD...

2924
来自专栏韩伟的专栏

可用于集群的开源软件赏:Chef

目前我在腾讯主要负责一个服务器端软件的相关开源项目,所以接下来几天的开源内容是最近工作上积累的一些经验和想法,下图中的内容就是我目前主要的工作内容和一些小小的成...

4606

扫码关注云+社区

领取腾讯云代金券