/ Android

Jenkins android 自动化编译的一些坑

Jenkins就是Hudson的元老们,对Oracle注册Hudson商标(Sun被吃了嘛)并且打算将其私有商业化表示不满后,另起炉灶的产物(所以和hudson不仅看起来像,连插件基本都通用。。。)
更具体的细节请移步Wiki

[本文非科普/教程贴,仅供尝试使用Jenkins/Hudson但遇到问题的同学们,填平几个脚下的坑。]


基本教程:

直接安装运行install jenkins就可以了,然后访问localhost:8080就可以看到基本页面。

https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu
https://wiki.jenkins-ci.org/display/JENKINS/GMail

一般安装插件如下:

https://wiki.jenkins-ci.org/display/JENKINS/Ant+Plugin
https://wiki.jenkins-ci.org/display/JENKINS/Android+Lint+Plugin
https://wiki.jenkins-ci.org/display/JENKINS/Android+Emulator+Plugin
http://wiki.hudson-ci.org/display/HUDSON/Subversion+Release+Manager

配置参考如下即可:

http://java.dzone.com/articles/automating-continuous
https://wiki.jenkins-ci.org/display/JENKINS/Building+an+Android+app+and+test+project


注意事项:

一般如上操作,就差不多可以去“build”了。但很可能是荆棘遍野的,这里罗列一些遇到的坑:

  • 多工程依赖
    如工程A,有两个依赖的library工程B和C,这时候除了需要在工程A下面生成build.xml和project.properties,还需要在工程B和C下面同样生成(android update project);然后编译的时候在Ant的Build File里面使用工程A的build.xml即可

  • 路径问题
    如果出现明明project.properties里面有注明android.library.reference.1=xxx的依赖项,编译时依然找不到;请确认路径是../../xxx的格式而不是..\\..\\xxx的格式。***(反斜杠不兼容)***

  • native库(.so)问题
    如果出现库无法链接,或者没有打包到apk中的情况;请确认是否是target版本不对,目前android-20是存在一些问题的(例如安装后不能运行等。。。),暂不建议使用(2014/9/11)

  • 环境变量问题

    如出现环境变量找不到,可以直接加在Ant的Properties里面,如:

sdk.dir=/xxx/xxx/xxx/sdk
  • 签名问题

    把key找个位置放好,然后在Ant的Properties里面加入:

key.store=/xxx/xxx/xxx.key
key.alias=xxx
key.store.password=xxx
key.alias.password=xxx
  • 提示空间不足

    多次编译后如空间不足,最好将JENKINS_HOME(主要是改这个环境变量)迁移到其他盘(默认是/var/lib/jenkins); 如果遇到了503的话,一般是权限不对,把***新目录的owner改为jenkins:jenkins,权限改为755即可。***

  • 多文件打包

    不支持多个文件同时输出(除非有name上的关联,如**/*.apk这种),这里可以用shell命令来打包;如tar;这里可以使用全局变量方便命名,如$JOB_NAME或者$WORKSPACE等等,举个栗子:

cd $WORKSPACE/code/XXX/bin/
tar zcvf $JOB_NAME.tar.gz proguard/mapping.txt xxx.apk

最后Archive the artifaces填**/*.tar.gz就好了

  • 如何删除SVN的登录信息

    登录服务器(界面上没找到修改的地方),Edit your HUDSON_HOME/hudson.scm.SubversionSCM.xml file and delete your /credentials/entry matching with your realm (and having your given username).

  • 偶尔出现的HTTP ERROR: 503 Problem accessing /jenkins. Reason: Service Unavailable

    如果用了Jetty,参考这个方案

    如果没用(jenkins log里面可能有奇怪的zip size错误),那就重启一下OS吧。