Android基于AS自动化编译并发送邮件
记录[AndroidStudio][6] 自动化编译,并发送邮件出来
脚本流程
- 配置编译环境
- 拉取服务器最新的代码(此处可以是git,或者是svn)
- 配置服务器代码为as编译环境的目录结构
- 配置编译版本号版本tag等
- 执行as编译脚本
- 邮件发送结果(邮件内容读取最近一天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命令处理每天晚上编译一个日版本给到测试人员
邮件截图如下
补上web前端展示编译结果页面