软件环境
OS:CentOS 6.0 64-bit
Android SDK:adt-bundle-linux-x86_64
Jenkins:1.529
Ant:1.8.2
配置管理
1.Jenkins中配置JDK,直接配置1.7+以上JDK。过程略。
2.把Android工程改造成具有Ant特性
(如果项目本身已经ant化了,略过此步。)
先从源码库,比如SVN检出源码,然后进行工作空间执行
# cd /myworkspace# $ANDROID_HOME/sdk/tools/android update project -p my-android-app
再把生成的文件上传到SVN。
也可以从头开始生成一个全新的空白ant特性的android工程,
# $ANDROID_HOME/sdk/tools/android create project -n myandroidapp -t a
ndroid-19 -p my-android-app -k pragmatic.pkg -a Pragmatic
-n Project name.
-t android target id,必选
-p 工程文件夹目录位置,必选
-k 安卓包名称即AndroidManifest.xml中<manifest package=的名称,必选
-a 安卓Activity名称,AndroidManifest.xml中<activity android:name=的名称
不清楚参数用法使用# $ANDROID_HOME/sdk/tools/android create project命令行会告诉你用法。
然后打开ADT,import -> Andorid下面的Existing Android Code Into Workspace。再然后Team -> Share Project到SVN服务器。
3.源码库配置
在Jenkins项目配置页面,找到源码管理栏,作如下设置。
4.Jenkins中配置Ant
方式一,把ant作为一个Jenkins内置的工具使用。
新增一个ant安装
保存后,进行项目构建配置页面,如下
方式二,引用一个外部已有的ant安装。
jenkins系统设置ant栏中,
然后jenkins系统设置全局属性栏中,
保存后,进行项目构建配置页面,Invoke Ant中,Ant Version下拉列表选择ant-1.8.2-external。
执行各项任务
利用andorid sdk中ant提供的build.xml脚本(位于%ANDROID_HOME%/sdk/tools/ant目录)可轻松完成各种日常任务
1.打包APK
直须在Jenkins项目配置页面,找到Invoke Ant栏,作如下设置
2.打包APK后同时对apk进行签名和zipalign优化
如果查看%ANDROID_HOME%/sdk/tools/ant/build.xml文件,会看到ant执行release操作的同时会根据local.properies和ant.properties中配置的属性,决定是否执行签名和zipalign。为些要在Invoke ant中如下设置
这样ant在打包时会自动根据密钥库、密码信息对生成的apk进行签名,而无需再手工输入密钥的密码。
3.打包APK,签名和zipalign优化后把APK装到与Jenkins主机相连的手机上。
在Jenkins构建Invoke Ant脚本后,增加一个Shell调用步骤,内容如下:
#!/bin/bash
adb uninstall com.aaa.pragmatic(.apk)
adb install /target/dir/apks/com.aaa.pragmatic.apk
前提是:(1)安装android usb driver (2)手机与电脑相连 (3)电脑进程中没有tadb.exe、豌豆夹等运行。(4)如果不需要在设备上进行debug,可以更新AndroidManifest.xml文件,去掉android:debuggable。
Troubleshootings
1.
Execute failed: java.io.IOException: Cannot run program "/android/sdk/build-tools/android-4.4/aapt": error=2, 没有那个文件或目录 -code-gen:
[mergemanifest] Merging AndroidManifest files into one.
[mergemanifest] Manifest merger disabled. Using project manifest only.
[echo] Handling aidl files...
[aidl] No AIDL files to compile.
[echo] ----------
[echo] Handling RenderScript files...
[echo] ----------
[echo] Handling Resources...
[aapt] Generating resource IDs...
BUILD FAILED
/android/sdk/tools/ant/build.xml:653: The following error occurred while executing this line:
/android/sdk/tools/ant/build.xml:698: Execute failed: java.io.IOException: Cannot run program "/android/sdk/build-tools/android-4.4/aapt": error=2, 没有那个文件或目录
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
at java.lang.Runtime.exec(Runtime.java:615)
at org.apache.tools.ant.taskdefs.Execute$Java13CommandLauncher.exec(Execute.java:862)
at org.apache.tools.ant.taskdefs.Execute.launch(Execute.java:481)
at org.apache.tools.ant.taskdefs.Execute.execute(Execute.java:495)
at org.apache.tools.ant.taskdefs.ExecTask.runExecute(ExecTask.java:631)
at org.apache.tools.ant.taskdefs.ExecTask.runExec(ExecTask.java:672)
at org.apache.tools.ant.taskdefs.ExecTask.execute(ExecTask.java:498)
at com.android.ant.AaptExecTask.execute(AaptExecTask.java:699)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
at com.android.ant.IfElseTask.execute(IfElseTask.java:120)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:398)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:390)
at org.apache.tools.ant.Target.performTasks(Target.java:411)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
at org.apache.tools.ant.Main.runBuild(Main.java:809)
at org.apache.tools.ant.Main.startAnt(Main.java:217)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
Caused by: java.io.IOException: error=2, 没有那个文件或目录
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:135)
at java.lang.ProcessImpl.start(ProcessImpl.java:130)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1021)
... 46 more
原因:在64位Linux下打包成APK时缺少x86下C++语言库。
解决:
# yum install -y compat-libstdc++-296.i686
# yum install -y compat-libstdc++-33.i686
2. [aapt] /android/sdk/build-tools/android-4.4/aapt: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory -code-gen:
[mergemanifest] Merging AndroidManifest files into one.
[mergemanifest] Manifest merger disabled. Using project manifest only.
[echo] Handling aidl files...
[aidl] No AIDL files to compile.
[echo] ----------
[echo] Handling RenderScript files...
[echo] ----------
[echo] Handling Resources...
[aapt] Generating resource IDs...
[aapt] /android/sdk/build-tools/android-4.4/aapt: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
解决:
# yum install -y zlib
3. [aapt] /android/sdk/build-tools/android-4.4/aapt: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory -code-gen:
[mergemanifest] Merging AndroidManifest files into one.
[mergemanifest] Manifest merger disabled. Using project manifest only.
[echo] Handling aidl files...
[aidl] No AIDL files to compile.
[echo] ----------
[echo] Handling RenderScript files...
[echo] ----------
[echo] Handling Resources...
[aapt] Generating resource IDs...
[aapt] /android/sdk/build-tools/android-4.4/aapt: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
原因:在64位Linux下打包成APK时缺少x86下C++语言库。
解决:
# yum install -y libstdc++.so.6
参考文献
https://wiki.jenkins-ci.org/display/JENKINS/Building+an+Android+app+and+test+project
http://jenkins-ci.org/content/getting-started-building-android-apps-hudson
http://www.apkbus.com/android-246184-1-1.html?_dsign=93ec82c0
http://www.apkbus.com/android-246184-1-1.html?_dsign=93ec82c0http://www.apkbus.com/android-246184-1-1.html?_dsign=93ec82c0
http://www.apkbus.com/android-246184-1-1.html?_dsign=93ec82c0
做Android开发的伙伴们都知道,无论是测试还是项目上线,我们都要对Android项目进行打包生成apk文件,才能安装到手机上使用。通常使用的方法就是手动打包或是Ant自动打包。手动打包很简单,比如在Eclipse中:选中项目-->点击右键-->Android Tools-->Export Signed Application Package-->在界面上填写好对应内容(主要是签名)就可以了。如果是Ant 打包的话,就要求配置好Ant环境,然后在cmd窗口命令中执行相应的命令即可。
但是个人觉得,最方便的还是用jinkens打包,jinkens官网: http://jenkins-ci.org/ ,官网有详细的介绍及使用方法说明等。
jinkens安装:
因为jenkins是java程序,网页的,war格式,只要放在tomcat下就能跑起来。所以就两步:
1,下载tomcat安装包,安装,配置好环境变量
2,下载jenkins工具包,下载好后放到tomcat中 webapps目录下
3,运行tomcat即可。
jinkens设置用作用可以参考: http://my.oschina.net/u/1377774/blog/177433
在配置好jinkens后(jinkens已经安装好svn插件,已经配置好snv地址等)后要进行如下操作:
1,在DOS命令行中,分别进入到我们要打包的app项目及相关lib项目目录下:执行
android update project -p.命令,
运行完后会生成相应的三个文件:build.xml progurd-project.txt local.properties(这个本身有),project.properties文件的配置确保跟服务器SDK版本和路径一致;(这个非常重要)
2,DOS窗口进入主项目目录,执行ant clean release(debug)命令,查看本地编译是否正常,其中release指发布版本,debug指测试版本。
3,在jinkens中新建好项目,配置好相关信息:
4,在项目主界面点击立即构建即可!相关界面:
[img]file:///C:/Users/Administrator/Documents/My%20Knowledge/temp/26ffdf02-5366-4119-b8fe-b96c4fe12197_4_files/15450687-6d6e-48da-b194-808b2100e1a1[1].png[/img]
Android, jinkens
分享到: QQ好友和群 QQ空间 腾讯微博 腾讯朋友 收藏1 转播 分享 淘文章 支持 反对相关文章