以上这段引用自 http://baike.baidu.com/view/1241829.htm?fr=ala0_1_1#2
1: 生成R.java文件,android平台编译必须的文件,eclipse下编译时会自动生成,需要自己写脚本来完成生成过程;
2:编译,不多说.ant javac;
3:打包,使用SDK提供的apk-builder来生成apk包;
4:签名,jarsigner,使用jdk提供的命令生成.keystore,然后使用命令jarsigner对apk包进行签名操作;
5:发布,将生成的apk包自动install到android手机(或手机虚拟平台,因为需要注册,所以我用的是手机实体机);
再来看对应的脚本部分:
0:脚本初始化:
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 |
<!-- 定义SDK的相关路径 --> <property name="sdk-folder" value="../BuildTools/SDK" /> <property name="android-tools" value="../BuildTools/SDK/tools" /> <property name="android-platform" value="../BuildTools/SDK/platforms/android-3/tools" /> <!--定义JDK的相关路径--> <property name="java-path" value="../../Java/jdk1.5.0_22/bin" /> <!--定义中间生成物的路径,Eclipse里面使用"bin"来存储中间生成物,我们也一样,当然你也可以改--> <property name="outdir" value="./bin" /> <!-- No user servicable parts below. --> <property name="android-framework" value="${android-tools}/lib/framework.aidl" /> <!-- 定义输入项的目录 --> <property name="resource-dir" value="./res" /> <property name="asset-dir" value="./assets" /> <property name="srcdir" value="./src" /> <!--通过判断操作系统是否为win的,来指定srcdir-ospath的具体路径,主要是"\"与"/"的区别--> <condition property="srcdir-ospath" value="${basedir}\${srcdir}" else="${basedir}/${srcdir}" > <os family="windows"/> </condition> <property name="external-libs" value="libs" /> <!--通过判断操作系统是否为win的,来指定external-libs-ospath的具体路径,主要是"\"与"/"的区别--> <condition property="external-libs-ospath" value="${basedir}\${external-libs}" else="${basedir}/${external-libs}" > <os family="windows"/> </condition> <!--定义输出项目录--> <property name="outdir-classes" value="${outdir}/classes" /> <condition property="outdir-classes-ospath" value="${basedir}\${outdir-classes}" else="${basedir}/${outdir-classes}" > <os family="windows"/> </condition> <!-- 定义R.java文件的存储目录--> <property name="outdir-r" value="./src" /> <!-- Intermediate files --> <property name="dex-file" value="classes.dex" /> <property name="intermediate-dex" value="${outdir}/${dex-file}" /> <!--同理判断"/"与"\"--> <condition property="intermediate-dex-ospath" value="${basedir}\${intermediate-dex}" else="${basedir}/${intermediate-dex}" > <os family="windows"/> </condition> <!-- 定义最后生成的apk文件存储路径 --> <property name="resources-package" value="${outdir}/${ant.project.name}.ap_" /> <!--同理判断"/"与"\"--> <condition property="resources-package-ospath" value="${basedir}\${resources-package}" else="${basedir}/${resources-package}" > <os family="windows"/> </condition> <!--定义debug apk的路径--> <property name="out-debug-package" value="${outdir}/${ant.project.name}-debug.apk" /> <!--同理判断"/"与"\"--> <condition property="out-debug-package-ospath" value="${basedir}\${out-debug-package}" else="${basedir}/${out-debug-package}" > <os family="windows"/> </condition> <!--定义未经过签名的apk文件路径--> <property name="out-unsigned-package" value="${outdir}/${ant.project.name}-unsigned.apk" /> <!--同理判断"/"与"\"--> <condition property="out-unsigned-package-ospath" value="${basedir}\${out-unsigned-package}" else="${basedir}/${out-unsigned-package}" > <os family="windows"/> </condition> <!-- 定义aapt,aidl,adb,dx,apkbuilder等工具的路径,主要还是去判断"/"与"\" --> <condition property="aapt" value="${android-platform}/aapt.exe" else="${android-tools}/aapt" > <os family="windows"/> </condition> <condition property="aidl" value="${android-platform}/aidl.exe" else="${android-tools}/aidl" > <os family="windows"/> </condition> <condition property="adb" value="${android-platform}/adb.exe" else="${android-tools}/adb" > <os family="windows"/> </condition> <condition property="dx" value="${android-platform}/dx.bat" else="${android-tools}/dx" > <os family="windows"/> </condition> <condition property="apk-builder" value="${android-tools}/apkbuilder.bat" else="${android-tools}/apkbuilder" > <os family="windows"/> </condition> <!--定义编译用到的android提供的android包的路径--> <property name="android-jar" value="../BuildTools/SDK/platforms/android-3/android.jar" /> <!--实现ant集成svn,使用svn update功能--> <path id="svn.classpath"> <fileset dir="../BuildTools/apache-ant-1.8.1-bin/lib"> <include name="***.aidl"/> </fileset> </apply> </target> <!-- 编译java文件成class文件 --> <target name="compile"> <javac encoding="UTF-8" target="1.5" debug="true" extdirs="" srcdir="./src" destdir="${outdir-classes}" bootclasspath="${android-jar}"> <classpath> <fileset dir="${external-libs}" includes="*.jar"/> </classpath> </javac> </target> <!-- 将class文件转换为dex文件 --> <target name="dex"> <apply executable="${dx}" fail parallel="true"> <arg value="--dex" /> <arg value="--output=${intermediate-dex-ospath}" /> <arg path="${outdir-classes-ospath}" /> <fileset dir="${external-libs}" includes="*.jar"/> </apply> </target> <!-- 使用aapt将要打包的资源进行准备 --> <target name="package-res-and-assets"> <exec executable="${aapt}" fail> <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> |
3.打包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<!-- 使用apk-builder将准备好的资源打成未经过签名的apk包 --> <target name="release"> <exec executable="${apk-builder}" fail> <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> </target> |
4.签名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<!--使用jarsigner对apk包进行签名--> <target name="jarsigner"> <exec executable="${java-path}/jarsigner.exe" dir="./bin"> <arg value="-storepass"/> <arg value="key"/> <arg value="-keystore"/> <arg value="E:\android\BuildTools\keystore\key.keystore"/> <arg value="-signedjar"/> <arg value="Project.apk"/> <arg value="Project-unsigned.apk"/> <arg value="E:\android\BuildTools\keystore\key.keystore"/> </exec> </target> |
5.发布
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<!--卸载手机上旧的软件--> <target name="uninstall"> <exec executable="${adb}" fail> <arg value="uninstall" /> <arg value="***.apk" /> </exec> </target> <!--安装新成生的软件到手机上--> <target name="install" depends="debug"> <exec executable="${adb}" fail> <arg value="install" /> <arg value="${outdir}/***.apk" /> </exec> </target> |
注: 执行脚本时需将android手机连接至电脑, 我们使用的触发方式不是SVN库的变化,而是手工触发,所以从严格意义上来说,还不算是持续集成.
声明: 本文由( 乐测网 )原创编译,转载请保留链接: 基于Android手机平台持续集成的实现(一)
-----==== 本站公告 ====-----
1.本站是目前唯一能支持智能手机平板电脑访问的软件测试技术网站.
2.具体访问方法请参考本站的手机访问说明,或直接点击以下链接:
→点击这里打开手机平板访问说明←