ipu的trunk版的android工程和服务端工程。

build.xml 12KB

    <?xml version="1.0" encoding="UTF-8"?> <project name="apkTargets" default="apkpackaging" basedir="."> <taskdef resource="net/sf/antcontrib/antlib.xml"/> <!-- 指定配置文件 --> <property file="build.properties" /> <record name="${log_file}" loglevel="info" append="no" action="start" /> <!-- 识别编译环境 --> <condition property="exe" value=".exe" else=""><os family="windows" /></condition> <condition property="bat" value=".bat" else=""><os family="windows" /></condition> <!-- Android SDK Tools --> <property name="zipalign" value="${android_tools}/zipalign${exe}" /> <property name="jarsigner" value="${jdk_home}/bin/jarsigner${exe}" /> <property name="android-target-dir" value="${android_sdk_home}/platforms/${android-target}" /> <property name="android-jar" value="${android-target-dir}/android.jar" /> <property name="android-framework" value="${android-target-dir}/framework.aidl" /> <property name="aapt" value="${android_tools}/aapt${exe}" /> <property name="dx" value="${android_tools}/dx${bat}" /> <property name="aidl" value="${android_tools}/aidl${exe}" /> <property name="proguard-jar" value="${android_sdk_home}/tools/proguard/lib/proguard.jar" /> <property name="annotations-jar" value="${android_sdk_home}/tools/support/annotations.jar" /> <!-- some file directory exclude "bin" file, because "bin" file will be changed each loop --> <property name="gen-dir" value="gen" /> <property name="src-dir" value="src" /> <property name="libs-dir" value="libs" /> <property name="res-dir" value="res" /> <property name="asset-dir" value="assets" /> <property name="bin-dir" value="bin" /> <property name="manifest-xml" value="AndroidManifest.xml" /> <!-- 主工程各个目录 --> <property name="host-gen" value="${project_home}/${gen-dir}" /> <property name="host-src" value="${project_home}/${src-dir}" /> <property name="host-libs" value="${project_home}/${libs-dir}" /> <property name="host-bin" value="${project_home}/${bin-dir}" /> <property name="host-classes" value="${host-bin}/classes" /> <property name="intermediate-dex" value="${project_home}/${bin-dir}/${app_name}/classes.dex" /> <!-- The final package file to generate --> <property name="resources-package" value="${project_home}/${bin-dir}/${app_name}/${app_name}.ap_" /> <property name="out-unsigned-package" value="${project_home}/${bin-dir}/${app_name}/${app_name}-unsigned.apk" /> <property name="out-signed-package" value="${project_home}/${bin-dir}/${app_name}/${app_name}-signed.apk" /> <property name="zipalign-package" value="${output_path}/${app_name}_for_android_${android_version}.apk" /> <!-- 自动化打包的target --> <target name="apkpackaging" depends="init,aapt_gererateR,aidl,compile,obfuscate,dex-package,aapt-package-res,apk-builder,jar-signer,zipalign"/> <!-- 初始化清空--> <target name="init"> <delete dir="${host-gen}" /> <delete dir="${host-bin}" /> <delete file="${project_home}/proguardMapping.txt" /> <mkdir dir="${host-gen}" /> <mkdir dir="${host-bin}" /> <mkdir dir="${host-classes}" /> <mkdir dir="${host-bin}/${app_name}" /> <!-- <mkdir dir="${output_path}" /> --> </target> <!-- 生成R文件和Manifest.java --> <target name="aapt_gererateR"> <foreach target="aapt_gererateR_library" list="${libraries}" param="library" delimiter=","> </foreach> <!-- auto-add-overlay 这个重要,覆盖资源,不然报错--> <var name="p" value="package -m --auto-add-overlay -J ${host-gen} -M ${project_home}/${manifest-xml} -I ${android-jar} -S ${project_home}/${res-dir}"/> <for list="${libraries}" param="library"> <sequential> <available property="isExist_library_res_r" file="@{library}/res" type="dir" /> <if> <equals arg1="${isExist_library_res_r}" arg2="true" /> <then> <var name="p" value="${p} -S @{library}/${res-dir}"/> </then> </if> </sequential> </for> <!-- 编译工程的的R文件 --> <exec executable="${aapt}" failonerror="true"> <arg line="${p}" /> </exec> </target> <target name="aapt_gererateR_library"> <echo>gererate R.java with ${library}</echo> <available property="isExist_library_r_l" file="${library}/res" type="dir" /> <!-- 是否需要参数 -S ${library}/${res-dir} --> <if> <equals arg1="${isExist_library_r_l}" arg2="true" /> <then> <var name="param" value="-S ${library}/${res-dir}"/> </then> <else> <var name="param" value=""/> </else> </if> <var name="param" value="package -m --non-constant-id --auto-add-overlay -J ${host-gen} -M ${library}/${manifest-xml} -I ${android-jar} ${param}"/> <echo>aapt_gererateR_library param:${param}</echo> <mkdir dir="${library}/gen"/> <!-- 编译Libray的R文件 --> <exec executable="${aapt}" failonerror="true"> <arg line="${param}" /> </exec> </target> <!-- 生成aidl对应的java文件 --> <target name="aidl"> <apply executable="${aidl}" failonerror="true"> <arg value="-p${android-framework}" /> <arg value="-I${host-src}" /> <arg value="-o${host-gen}" /> <fileset dir="${host-src}"> <include name="**/*.aidl" /> </fileset> </apply> </target> <!-- 编译java文件为class文件 --> <target name="compile"> <available property="isExist_host_libs_h" file="${host-libs}" type="dir" /> <if> <equals arg1="${isExist_host_libs_h}" arg2="true" /> <then> <copydir src="${host-libs}" dest="${host-bin}/libs"/> </then> </if> <for list="${libraries}" param="library"> <sequential> <available property="isExist_library_libs_l" file="@{library}/libs" type="dir" /> <if> <equals arg1="${isExist_library_libs_l}" arg2="true" /> <then> <copydir src="@{library}/libs" dest="${host-bin}/libs" /> </then> </if> </sequential> </for> <path id="library.libs"> <fileset dir="${host-bin}/libs"> <include name="*.so" /> <include name="**/*.so" /> <include name="*/*.so" /> <include name="**/*.jar" /> <include name="*.jar" /> </fileset> </path> <javac debug="true" extdirs="" srcdir="." includeantruntime="on" destdir="${host-classes}" bootclasspath="${android-jar}" encoding="UTF-8" source="${jdk_version}" target="${jdk_version}" > <compilerarg line="-encoding UTF-8 " /> <src path="${host-src}" /> <src path="${host-gen}" /> <classpath refid="library.libs" /> </javac> </target> <!-- 混淆 --> <target name="obfuscate"> <jar basedir="${host-classes}" destfile="temp.jar" /> <java jar="${proguard-jar}" fork="true" failonerror="true"> <sysproperty key="file.encoding" value="UTF-8" /> <jvmarg value="-Dmaximum.inlined.code.length=32" /> <arg value="-injars temp.jar" /> <arg value="-outjars optimized.jar" /> <arg value="-libraryjars '${annotations-jar}'" /> <arg value="-libraryjars '${android-jar}'" /> <arg value="@${project_home}/proguard-project.txt" /> </java> <delete file="temp.jar" /> <delete dir="${host-classes}" /> <mkdir dir="${host-classes}" /> <unzip src="optimized.jar" dest="${host-classes}" /> <delete file="optimized.jar" /> </target> <!-- 打包dex文件 --> <target name="dex-package"> <echo>Packaging dex...</echo> <var name="dex_p" value="--dex --output=${intermediate-dex} ${host-classes}"/> <available property="isExist_host_libs_dx" file="${host-libs}" type="dir" /> <if> <equals arg1="${isExist_host_libs_dx}" arg2="true" /> <then> <var name="dex_p" value="${dex_p} ${host-libs}"/> </then> </if> <for list="${libraries}" param="library"> <sequential> <available property="isExist_host_libs_dx_l" file="@{library}/libs" type="dir" /> <if> <equals arg1="${isExist_host_libs_dx_l}" arg2="true" /> <then> <var name="dex_p" value="${dex_p} @{library}/libs"/> </then> </if> </sequential> </for> <exec executable="${dx}" failonerror="true" > <arg line="${dex_p}"/> </exec> </target> <!-- aapt打包资源 --> <target name="aapt-package-res"> <echo>Packaging resources and assets...</echo> <var name="temp" value=""/> <for list="${libraries}" param="library"> <sequential> <available property="isExist_library_res_aapt" file="@{library}/res" type="dir" /> <if> <equals arg1="${isExist_library_res_aapt}" arg2="true" /> <then> <var name="temp" value="${temp} -S @{library}/${res-dir}"/> </then> </if> </sequential> </for> <echo>------------------------------</echo> <echo>${temp}</echo> <var name="res_p" value="package -f -M ${project_home}/${manifest-xml} -S ${project_home}/${res-dir} ${temp} -A ${project_home}/${asset-dir} -I ${android-jar} -F ${resources-package} --auto-add-overlay"/> <exec executable="${aapt}" failonerror="true"> <arg line="${res_p}"/> </exec> </target> <!-- APK打包 --> <target name="apk-builder"> <echo>Building apk...</echo> <var name="temp" value=""/> <for list="${libraries}" param="library"> <sequential> <available property="isExist_library_libs_builder" file="@{library}/libs" type="dir" /> <if> <equals arg1="${isExist_library_libs_builder}" arg2="true" /> <then> <var name="temp" value="${temp} -nf @{library}/libs -rj @{library}/libs"/> </then> </if> </sequential> </for> <var name="apkBuild_p" value="${out-unsigned-package} -u -z ${resources-package} -f ${intermediate-dex} -rf ${host-src} ${temp}"/> <java classpath="${android_apk_tools}/lib/sdklib.jar" classname="com.android.sdklib.build.ApkBuilderMain" fork="true" failonerror="true"> <sysproperty key="file.encoding" value="UTF-8" /> <arg line="${apkBuild_p}"/> </java> </target> <!-- APK签名 --> <target name="jar-signer"> <echo>Jar signer...</echo> <exec executable="${jarsigner}" failonerror="true"> <!-- 打印详细日志 --> <!-- <arg value="-verbose" /> --> <!-- 签名信息 --> <arg value="-keystore" /> <arg value="${key_store}" /> <arg value="-storepass" /> <arg value="${key_store_password}" /> <arg value="-keypass" /> <arg value="${key_alias_password}" /> <!-- 输出安装包 --> <arg value="-signedjar" /> <arg value="${out-signed-package}" /> <arg value="${out-unsigned-package}" /> <arg value="${key_alias}" /> <!-- --> <arg value="-digestalg" /> <arg value="SHA1" /> <arg value="-sigalg" /> <arg value="MD5withRSA" /> </exec> </target> <!-- 使用zipalign做优化,对apk文件进行对齐 --> <target name="zipalign"> <echo>Zipalign optimizing...</echo> <exec executable="${zipalign}" failonerror="true"> <!-- 打印详细日志 --> <!-- <arg value="-v" /> --> <arg value="-f" /> <arg value="4" /> <arg value="${out-signed-package}" /> <!-- arg value="${out-unsigned-package}" /> --> <arg value="${zipalign-package}" /> </exec> <echo>打包完成:${zipalign-package}</echo> </target> </project>