Android基于AS自动化编译并发送邮件

记录[AndroidStudio][6] 自动化编译,并发送邮件出来

脚本流程

  1. 配置编译环境
  2. 拉取服务器最新的代码(此处可以是git,或者是svn)
  3. 配置服务器代码为as编译环境的目录结构
  4. 配置编译版本号版本tag等
  5. 执行as编译脚本
  6. 邮件发送结果(邮件内容读取最近一天svnlog日志,as编译版本为附件)

环境配置

  • as环境安装 AndroidStudio1.4或以上
  • python python2.7
  • bat windows 批处理
  • svn svn版本最新即可
  • j dk jdk1.6
  • adt as自带

项目初衷

由于习惯用eclipse开发,但是每次都需要手动打包版本给测试人员测试,很麻烦所以尝试下as的自动化编译功能
编写过程中又能学习下python,gradle,bat等多种脚步混合编写,尽量做到不依赖某一个模块

由于习惯用eclipse开发,所以只是在eclipse里面开发后提交到svn,然后每天编译一个日版本发邮件出来

首先还是要使用as IDE新建一个android的project,并且添加需要编译的项目进来,包括多依赖的项目

在使用as构建编辑目录结构的时候有几点比较坑
1.就是libs下jar,和so的目录结构和在eclipse里面不一样(百度有)
2.gradle编译脚本里面so和jar的添加方法也不一样(百度有)
3.发邮件模块是使用的python发送的邮件,邮箱注册的outlook的
outlook需要手机认证不然容易发送失败被当垃圾邮件

配置目录代码

下载并配置as编译目录结构:

::svn下载最新代码
rm -rf tmp
svn co https://svn.url_url tmp

::初始化路径
set lll=%~dp0kasfaandroid_lbxx\
set moudle=src
rm -rf %moudle%
rm -rf libs
rm -rf build
mkdir %moudle%
mkdir %moudle%\main\
mkdir %moudle%\main\java\
mkdir %moudle%\main\res\
mkdir %moudle%\main\assets\
mkdir %moudle%\main\jniLibs\
mkdir libs\

::copy代码到编译目录
xcopy %lll%tmp\src %lll%%moudle%\main\java\ /e /q
xcopy %lll%tmp\assets %lll%%moudle%\main\assets\ /e /q
xcopy %lll%tmp\res %lll%%moudle%\main\res\ /e /q
xcopy %lll%tmp\libs %lll%%moudle%\main\jniLibs\ /e /q
::删除libs目录下面所有的jar文件,不删除so的文件夹
rm -rf %lll%%moudle%\main\jniLibs\*.*
copy %lll%tmp\AndroidManifest.xml %lll%%moudle%\main\AndroidManifest.xml

xcopy %lll%tmp\libs %lll%libs\ /e /q
::删除libs目录下面所有的文件夹,不包括jar
python %DirCorelibs%py_remove_all_dir.py %lll%libs

由于项目里面是多个lib依赖,编译目录都一样,此处就不贴代码

编译脚本

编译脚本是初始化脚本添加编译时间tag标注到app

::初始化编译脚本
rm -rf build.gradle
copy %DirCorelibs%build.gradle.model build.gradle

set currentHour=%time:~0,2%
if "%time:~0,1%"==" " set currentHour=0%time:~1,1%
@echo %date:~0,4%%date:~5,2%%date:~8,2%_%currentHour%%time:~3,2%%time:~6,2%

::替换版本号和版本
python %DirCorelibs%replaceStrTools.py %versionCode% versionCodeValue build.gradle
python %DirCorelibs%replaceStrTools.py %versionName% versionNameValue build.gradle
python %DirCorelibs%replaceStrTools.py %date:~0,4%%date:~5,2%%date:~8,2%_%currentHour%%time:~3,2%%time:~6,2% ChannelValue build.gradle

::clean,然后编译代码
rm -rf buildlog.txt
call gradle clean
call gradle build -q  2>> buildlog.txt

邮件发送编译结果

编译结果判断编译的releaseapk是否存在,存在表示编译成功,否则读取as编译产生的错误日志发送邮件出来:

setlocal enabledelayedexpansion
set mydd=%date:~0,4%
set /a mydd=!mydd!+1
svn log https://svn.url_url  -r {%date:~0,4%-%date:~5,2%-%date:~8,2%}:{%mydd%-%date:~5,2%-%date:~8,2%} -v  >> log.txt

::打包好的apk发邮件出去
if not exist build\outputs\apk\vtest.apk goto nofile
goto sendmail
:nofile
::编译失败发送邮件告诉主负责人
python %DirCorelibs%sendmail.py build\outputs\apk\vtest.apk vtest.apk xxxxxxxx@qq.com SFA_Build_Faild_%versionName%_%versionCode%_%date:~0,4%%date:~5,2%%date:~8,2%_%currentHour%%time:~3,2%%time:~6,2%  buildlog.txt 

goto endsendmail
:sendmail
::编译成功发送邮件告诉主负责人
python %DirCorelibs%sendmail.py build\outputs\apk\vtest.apk vtest.apk xxxxxxx@qq.com SFA_L_%versionName%_%versionCode%_%date:~0,4%%date:~5,2%%date:~8,2%_%currentHour%%time:~3,2%%time:~6,2%  log.txt 

:endsendmail

@echo end_send_email_%time:~0,8%

邮件结果

最终可以写一个at命令处理每天晚上编译一个日版本给到测试人员

邮件截图如下

android 构建纯色bitmap android ci构建_android 构建纯色bitmap

android 构建纯色bitmap android ci构建_git_02

补上web前端展示编译结果页面

android 构建纯色bitmap android ci构建_android_03