Hudson是一款持续集成引擎,架构在Subversion等版本控制工具上,依靠构建工具对项目进行集成构建,并且可以根据用户需求提供相应的反馈,比如发邮件,总的来说是比较实用的。
这几天在老师的要求下使用了Hudson,在纯JAVA项目的情况下使用MAVEN配置起来还算简单,无奈项目的客户端是Android平台的,在纠结了N天后还是配置不成功,最后改用Ant, 整个过程还是比较简单,除了build.xml的编写~~
注:下面的讲述是在Hudson配置好的情况下实现的,换句话说你可以试试你的JAVA项目能否正确被Hudson持续集成
步骤:
1)首先按常理新建一个Android;
2)接着在该项目上右击,新建一个build.xml(名字可以随便取,这个在Hudson可以选择构件所使用的项目文件),然后将下面这段代码放入文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 |
<?xml version="1.0" encoding="UTF-8"?> <!-- 步骤: 第一.生成R.java 第二.JAVAC编译JAVA文件 第三.批处理生成classes.dex 第四.aapt打包资源 第五.apkbuilder包资源和类文件为APK文件 第六.jarsinger 对APK进行签名 --> <!-- 此处的项目名需修改为你的项目名 --> <project name="SEOA_Client" basedir="." default="debug"> <!-- 此处应用系统的环境变量 --> <property environment="env" /> <!-- SDK Locations --> <!-- 获取SDK的安装目录,注意在我的系统中环境变量的名称为ANDROID_SDK_HOME,你可以修改成你的环境变量名称 --> <!-- 也可以直接指定路径,下面采用的就是这种方式 --> <property name="sdk2.2-folder" value="F:\sdk\android-sdk-windows" /> <!--如若你使用的android版本不一样,可以在此处修改--> <property name="sdk-folder" value="${sdk2.2-folder}/platforms/android-8" /> <property name="android.aidl" value="${sdk-folder}/framework.aidl" /> <property name="sdk-tools" value="${sdk-folder}/tools" /> <property name="android-tools" value="${sdk2.2-folder}/tools" /> <property name="verbose" value="false" /> <!-- 配置使用到的库,只要保证路径正确,不需修改--> <path id="android.antlibs"> <pathelement location="${env.ANDROID_SDK_HOME}/tools/lib/anttasks.jar"/> <pathelement location="${env.ANDROID_SDK_HOME}/tools/lib/sdklib.jar"/> <pathelement location="${env.ANDROID_SDK_HOME}/tools/lib/androidprefs.jar"/> </path> <!-- step 1.generate R.java by aapt 2.compile java to class by javac 3.generate classes.dex by dx.bat --> <!-- 4.package resources by aapt 5. package resource and classes.dex by apkbuilder.bat 6.sign apk by jarsinger --> <!-- 配置在整个过程中使用到的Tools,不需修改 --> <property name="aapt" value="${sdk-tools}/aapt.exe" /> <property name="dx" value="${sdk-tools}/dx.bat" /> <property name="apk-builder" value="${android-tools}/apkbuilder.bat" /> <property name="aidl" value="${sdk-tools}/aidl.exe" /> <property name="adb" value="${android-tools}/adb.exe" /> <property name="android-jar" value="${sdk-folder}/android.jar" /> <property name="jarsigner" value="${env.JAVA_HOME}/bin/jarsigner.exe" /> <!-- Android项目使用到所有库,这个地方需修改--> <path id="android.libraries.jars"> <pathelement location="${android-jar}"/> <pathelement location="${basedir}/lib/commons-pool-1.5.4.jar"/> </path> <!-- Application Package Name,包名需修改 --> <property name="application-package" value="com.android.ant" /> <!-- 以下都不需要修改 --> <property name="useragent" value="byAndroidWeb" /> <property name="version" value="1.02" /> <!-- The intermediates directory --> <!-- Eclipse uses "bin" for its own output, so we do the same. --> <property name="outdir-bin" value="bin" /> <property name="outdir-gen" value="gen" /> <!-- source directories --> <property name="resource-dir" value="res" /> <property name="asset-dir" value="assets" /> <property name="srcdir" value="src" /> <property name="srcdir-ospath" value="${basedir}/${srcdir}" /> <property name="external-libs" value="lib" /> <property name="external-libs-ospath" value="${basedir}/${external-libs}" /> <!-- dest directories --> <property name="des-resource-dir" value="${outdir-bin}/res" /> <property name="des-asset-dir" value="${outdir-bin}/assets" /> <property name="des-srcdir" value="${outdir-bin}/src" /> <property name="des-srcdir-ospath" value="${basedir}/${outdir-bin}/${srcdir}" /> <property name="des-external-libs" value="${outdir-bin}/libs" /> <property name="des-external-libs-ospath" value="${basedir}/${outdir-bin}/${external-libs}" /> <!-- Output directories --> <property name="outdir-classes" value="${outdir-bin}/src" /> <property name="outdir-obfuscate-classes" value="${outdir-bin}" /> <property name="outdir-obfuscate-classes-ospath" value="${basedir}/${outdir-obfuscate-classes}" /> <!-- Intermediate files --> <property name="dex-file" value="classes.dex" /> <property name="intermediate-dex" value="${outdir-bin}/${dex-file}" /> <property name="intermediate-dex-ospath" value="${basedir}/${intermediate-dex}" /> <!-- The final package file to generate --> <property name="resources-package" value="${outdir-bin}/${ant.project.name}" /> <property name="resources-package-ospath" value="${basedir}/${resources-package}" /> <property name="out-debug-package" value="${outdir-bin}/${ant.project.name}-debug.apk" /> <property name="out-debug-package-ospath" value="${basedir}/${out-debug-package}" /> <property name="out-unsigned-package" value="${outdir-bin}/${ant.project.name}-unsigned.apk" /> <property name="out-unsigned-package-ospath" value="${basedir}/${out-unsigned-package}" /> <property name="out-signed-package" value="${useragent}\${ant.project.name}.apk" /> <property name="out-signed-package-ospath" value="${basedir}\${out-signed-package}" /> <!-- init --> <target name="init"> <echo>Creating all output directories </echo> <delete dir="${outdir-bin}" /> <mkdir dir="${outdir-bin}" /> <mkdir dir="${outdir-classes}" /> </target> <!-- copy original strings and modify useragent --> <target name="copy" depends="init"> <echo>copy files to output folder</echo> </target> <!-- Generate the R.java file for this project's resources. --> <target name="resource-src" depends="copy"> <echo>Generating R.java / Manifest.java from the resources</echo> <echo>${aapt}</echo> <exec executable="${aapt}" failonerror="true"> <arg value="package" /> <arg value="-m" /> <arg value="-J" /> <arg value="${outdir-gen}" /> <arg value="-M" /> <arg value="AndroidManifest.xml" /> <arg value="-S" /> <arg value="${resource-dir}" /> <arg value="-I" /> <arg value="${android-jar}" /> </exec> </target> <!-- Generate java classes from .aidl files. --> <target name="aidl" depends="copy"> <echo>Compiling aidl files into Java classes</echo> <apply executable="${aidl}" failonerror="true"> <arg value="-p${android.aidl}" /> <arg value="-I${srcdir}" /> <fileset dir="${srcdir}"> <include name="**/*.aidl"/> </fileset> </apply> </target> <!-- Compile this project's .java files into .class files. --> <target name="compile" depends="copy, resource-src, aidl"> <javac encoding="ascii" target="1.6" debug="true" extdirs="" srcdir="." destdir="${outdir-classes}" bootclasspathref="android.libraries.jars"> <classpath> <fileset dir="${external-libs}" includes="*.jar" /> </classpath> </javac> </target> <!-- Convert this project's .class files into .dex files. --> <target name="dex" depends="compile"> <echo>Converting compiled files and external libraries into ${outdir}/${dex-file}</echo> <apply executable="${dx}" failonerror="true" parallel="false"> <arg value="--dex" /> <arg value="--output=${intermediate-dex-ospath}" /> <arg path="${outdir-obfuscate-classes-ospath}" /> <fileset dir="${external-libs}" includes="*.jar" /> </apply> </target> <!-- Put the project's resources into the output package file. --> <target name="package-res-and-assets"> <echo>Packaging resources and assets</echo> <exec executable="${aapt}" failonerror="true"> <arg value="package" /> <arg value="-f" /> <arg value="-M" /> <arg value="AndroidManifest.xml" /> <arg value="-S" /> <arg value="${resource-dir}" /> <arg value="-A" /> <arg value="${asset-dir}" /> <arg value="-I" /> <arg value="${android-jar}" /> <arg value="-F" /> <arg value="${resources-package}" /> </exec> </target> <!-- Same as package-res-and-assets, but without "-A ${asset-dir}" --> <target name="package-res-no-assets"> <echo>Packaging resources</echo> <exec executable="${aapt}" failonerror="true"> <arg value="package" /> <arg value="-f" /> <arg value="-M" /> <arg value="AndroidManifest.xml" /> <arg value="-S" /> <arg value="${resource-dir}" /> <!-- No assets directory --> <arg value="-I" /> <arg value="${android-jar}" /> <arg value="-F" /> <arg value="${resources-package}" /> </exec> </target> <!-- Invoke the proper target depending on whether or not an assets directory is present. --> <!-- TODO: find a nicer way to include the "-A ${asset-dir}" argument only when the assets dir exists. --> <target name="package-res"> <available file="${asset-dir}" type="dir" property="res-target" value="and-assets" /> <property name="res-target" value="no-assets" /> <antcall target="package-res-${res-target}" /> </target> <!-- Package the application and sign it with a debug key. This is the default target when building. It is used for debug. --> <target name="debug" depends="dex, package-res"> <echo>Packaging ${out-debug-package}, and signing it with a debug key</echo> <exec executable="${apk-builder}" failonerror="false"> <arg value="${out-debug-package-ospath}" /> <arg value="-z" /> <arg value="${resources-package-ospath}" /> <arg value="-f" /> <arg value="${intermediate-dex-ospath}" /> <arg value="-rf" /> <arg value="${srcdir-ospath}" /> <arg value="-rj" /> <arg value="${external-libs-ospath}" /> </exec> </target> <!-- Package the application without signing it. This allows for the application to be signed later with an official publishing key. --> <target name="package" depends="dex, package-res"> <echo>Packaging ${out-unsigned-package} for release</echo> <exec executable="${apk-builder}" failonerror="true"> <arg value="${out-unsigned-package-ospath}" /> <arg value="-u" /> <arg value="-z" /> <arg value="${resources-package-ospath}" /> <arg value="-f" /> <arg value="${intermediate-dex-ospath}" /> <arg value="-rf" /> <arg value="${srcdir-ospath}" /> <arg value="-rj" /> <arg value="${external-libs-ospath}" /> </exec> <echo>It will need to be signed with jarsigner before being published.</echo> </target> <target name="jarsigner" depends="package"> <echo>Packaging ${out-unsigned-package} for release</echo> <exec executable="${jarsigner}" failonerror="true"> <arg value="-verbose" /> <arg value="-storepass" /> <arg value="byread002" /> <arg value="-keypass" /> <arg value="byread002" /> <arg value="-keystore" /> <arg value="bbyread.keystore" /> <arg value="-signedjar" /> <arg value="${out-signed-package-ospath}" /> <arg value="${out-unsigned-package-ospath}" /> <arg value="byread" /> </exec> </target> <target name="release" depends="jarsigner"> <echo>release for release</echo> </target> <!-- Install the package on the default emulator --> <target name="install" depends="debug"> <echo>Installing ${out-debug-package} onto default emulator</echo> <exec executable="${adb}" failonerror="true"> <arg value="install" /> <arg value="${out-debug-package}" /> </exec> </target> <target name="reinstall" depends="debug"> <echo>Installing ${out-debug-package} onto default emulator</echo> <exec executable="${adb}" failonerror="true"> <arg value="install" /> <arg value="-r" /> <arg value="${out-debug-package}" /> </exec> </target> <!-- Uinstall the package from the default emulator --> <target name="uninstall"> <echo>Uninstalling ${application-package} from the default emulator</echo> <exec executable="${adb}" failonerror="true"> <arg value="uninstall" /> <arg value="${application-package}" /> </exec> </target> </project> |
这个网上资料比较少,尤其是中文的,上面说的也就是我这几天摸索的一点小成果,肯定有很多说的不全甚至错误的地方,希望读者不吝赐教,有问题也欢迎回复~~
声明: 本文由( 乐测网 )原创编译,转载请保留链接: 使用Hudson持续集成Android项目
-----==== 本站公告 ====-----
1.本站是目前唯一能支持智能手机平板电脑访问的软件测试技术网站.
2.具体访问方法请参考本站的手机访问说明,或直接点击以下链接:
→点击这里打开手机平板访问说明←