android基于Android Studio的持续集成CI

来源:互联网 发布:汕头美工培训机构 编辑:程序博客网 时间:2024/05/16 11:08

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 tmpsvn co https://svn.url_url tmp::初始化路径set lll=%~dp0kasfaandroid_lbxx\set moudle=srcrm -rf %moudle%rm -rf libsrm -rf buildmkdir %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 /qxcopy %lll%tmp\assets %lll%%moudle%\main\assets\ /e /qxcopy %lll%tmp\res %lll%%moudle%\main\res\ /e /qxcopy %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.xmlxcopy %lll%tmp\libs %lll%libs\ /e /q::删除libs目录下面所有的文件夹,不包括jarpython %DirCorelibs%py_remove_all_dir.py %lll%libs

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

编译脚本

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

::初始化编译脚本rm -rf build.gradlecopy %DirCorelibs%build.gradle.model build.gradleset 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.gradlepython %DirCorelibs%replaceStrTools.py %versionName% versionNameValue build.gradlepython %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.txtcall gradle cleancall gradle build -q  2>> buildlog.txt

邮件发送编译结果

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

setlocal enabledelayedexpansionset mydd=%date:~0,4%set /a mydd=!mydd!+1svn 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 nofilegoto 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前端展示编译结果页面

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

0 0
原创粉丝点击