Android自动打包、签名、优化、上传ANT脚本
16lz
2022-06-28
此脚本是针对于android在线更新的SDK,以前android有离线安装包,后来改为直接在线安装进行,两者的成本在于sdk的路径和一些工具类的路径不同。
此脚本用于进行自动编译用户需要的APK安装包,使用时候,请将签名用的*.keystore放在和build.xml同一目录,并命名为android.keystore,(如想更改,请在build.xml 中的jarsigner target进行更改)
build.properties
Java代码- android.tools=${sdk.folder}tools
- android_version=2.1
- apk.sdk.home=D\:/androidsdktools/android-sdk_r04-windows/android-sdk-windows/
- apk.tools=${apk.sdk.home}tools/
- application.package=com.test.testname
- bin.dir=${jde.home}bin
- app.name=NewAndroid
- app.source.path=G\:/test/
- jdk.home=C\:/Java_1.6_U18/jdk1.6.0_18/
- output.dir=../outputDir
- password=123456
- sdk.folder=D\:/androidsdktools/android-sdk_r04-windows/android-sdk-windows/platforms/android-2.0.1/
- temp.dir=127980239039628
Build.xml
Xml代码- <?xmlversion="1.0"encoding="UTF-8"?>
- <projectname="Test"default="debug"basedir=".">
- <propertyfile="build.properties">
- </property>
- <!--Theintermediatesdirectory-->
- <!--Eclipseuses"bin"foritsownoutput,sowedothesame.-->
- <propertyname="outdir"value="bin"/>
- <!--*************************************************************************************-->
- <!--Nouserservicablepartsbelow.-->
- <propertyname="android-framework"value="${sdk.folder}/framework.aidl"/>
- <!--Inputdirectories-->
- <propertyname="resource-dir"value="res"/>
- <propertyname="asset-dir"value="assets"/>
- <propertyname="srcdir"value="src"/>
- <conditionproperty="srcdir-ospath"value="${basedir}\${srcdir}"else="${basedir}/${srcdir}">
- <osfamily="windows"/>
- </condition>
- <propertyname="external-libs"value="libs"/>
- <conditionproperty="external-libs-ospath"value="${basedir}\${external-libs}"else="${basedir}/${external-libs}">
- <osfamily="windows"/>
- </condition>
- <!--Outputdirectories-->
- <propertyname="outdir-classes"value="${outdir}/classes"/>
- <conditionproperty="outdir-classes-ospath"value="${basedir}\${outdir-classes}"else="${basedir}/${outdir-classes}">
- <osfamily="windows"/>
- </condition>
- <conditionproperty="zipalign-package-ospath"value="${basedir}\${output.dir}\${app.name}_for_android_${android_version}_${temp.dir}.apk"else="${basedir}/${output.dir}">
- <osfamily="windows"/>
- </condition>
- <!--CreateR.javainthesourcedirectory-->
- <propertyname="outdir-r"value="src"/>
- <!--Intermediatefiles-->
- <propertyname="dex-file"value="classes.dex"/>
- <propertyname="intermediate-dex"value="${outdir}/${dex-file}"/>
- <conditionproperty="intermediate-dex-ospath"value="${basedir}\${intermediate-dex}"else="${basedir}/${intermediate-dex}">
- <osfamily="windows"/>
- </condition>
- <!--Thefinalpackagefiletogenerate-->
- <propertyname="resources-package"value="${outdir}/${ant.project.name}.ap_"/>
- <conditionproperty="resources-package-ospath"value="${basedir}\${resources-package}"else="${basedir}/${resources-package}">
- <osfamily="windows"/>
- </condition>
- <propertyname="out-debug-package"value="${outdir}/${ant.project.name}-debug.apk"/>
- <conditionproperty="out-debug-package-ospath"value="${basedir}\${out-debug-package}"else="${basedir}/${out-debug-package}">
- <osfamily="windows"/>
- </condition>
- <propertyname="out-unsigned-package"value="${outdir}/${ant.project.name}-unsigned.apk"/>
- <propertyname="out-signed-package"value="${outdir}/${ant.project.name}-signed.apk"/>
- <conditionproperty="out-unsigned-package-ospath"value="${basedir}\${out-unsigned-package}"else="${basedir}/${out-unsigned-package}">
- <osfamily="windows"/>
- </condition>
- <conditionproperty="out-signed-package-ospath"value="${basedir}\${out-signed-package}"else="${basedir}/${out-signed-package}">
- <osfamily="windows"/>
- </condition>
- <!--Tools-->
- <conditionproperty="aapt"value="${android.tools}/aapt.exe"else="${android.tools}/aapt">
- <osfamily="windows"/>
- </condition>
- <conditionproperty="zipalign"value="${apk.tools}/zipalign.exe"else="${apk.tools}/zipalign">
- <osfamily="windows"/>
- </condition>
- <conditionproperty="jarsigner"value="${jdk.home}/bin/jarsigner.exe"else="${jdk.home}/bin/jarsigner">
- <osfamily="windows"/>
- </condition>
- <conditionproperty="aidl"value="${android.tools}/aidl.exe"else="${android.tools}/aidl">
- <osfamily="windows"/>
- </condition>
- <conditionproperty="adb"value="${apk.tools}/adb.exe"else="${apk.tools}/adb">
- <osfamily="windows"/>
- </condition>
- <conditionproperty="dx"value="${android.tools}/dx.bat"else="${android.tools}/dx">
- <osfamily="windows"/>
- </condition>
- <conditionproperty="apk-builder"value="${apk.tools}/apkbuilder.bat"else="${apk.tools}/apkbuilder">
- <osfamily="windows"/>
- </condition>
- <propertyname="android-jar"value="${sdk.folder}/android.jar"/>
- <!--Rules-->
- <!--Createtheoutputdirectoriesiftheydon'texistyet.-->
- <targetname="dirs"depends="init">
- <echo>Creatingoutputdirectoriesifneeded...</echo>
- <mkdirdir="${outdir}"/>
- <mkdirdir="${outdir-classes}"/>
- </target>
- <!--GeneratetheR.javafileforthisproject'sresources.-->
- <targetname="resource-src"depends="dirs">
- <echo>GeneratingR.java/Manifest.javafromtheresources...</echo>
- <execexecutable="${aapt}"failonerror="true">
- <argvalue="package"/>
- <argvalue="-m"/>
- <argvalue="-J"/>
- <argvalue="${outdir-r}"/>
- <argvalue="-M"/>
- <argvalue="AndroidManifest.xml"/>
- <argvalue="-S"/>
- <argvalue="${resource-dir}"/>
- <argvalue="-I"/>
- <argvalue="${android-jar}"/>
- </exec>
- </target>
- <!--Generatejavaclassesfrom.aidlfiles.-->
- <targetname="aidl"depends="dirs">
- <echo>CompilingaidlfilesintoJavaclasses...</echo>
- <applyexecutable="${aidl}"failonerror="true">
- <argvalue="-p${android-framework}"/>
- <argvalue="-I${srcdir}"/>
- <filesetdir="${srcdir}">
- <includename="**/*.aidl"/>
- </fileset>
- </apply>
- </target>
- <!--Compilethisproject's.javafilesinto.classfiles.-->
- <targetname="compile"depends="dirs,resource-src,aidl">
- <javacencoding="ascii"target="1.5"debug="true"extdirs=""srcdir="."destdir="${outdir-classes}"bootclasspath="${android-jar}">
- <classpath>
- <filesetdir="${external-libs}"includes="*.jar"/>
- </classpath>
- </javac>
- </target>
- <!--Convertthisproject's.classfilesinto.dexfiles.-->
- <targetname="dex"depends="compile">
- <echo>Convertingcompiledfilesandexternallibrariesinto${outdir}/${dex-file}...</echo>
- <applyexecutable="${dx}"failonerror="true"parallel="true">
- <argvalue="--dex"/>
- <scriptsrc="/javascripts/tinymce/themes/advanced/langs/zh.js"type="text/javascript"><!--mce:0--></script><scriptsrc="/javascripts/tinymce/plugins/javaeye/langs/zh.js"type="text/javascript"><!--mce:1--></script><argvalue="--output=${intermediate-dex-ospath}"/>
- <argpath="${outdir-classes-ospath}"/>
- <filesetdir="${external-libs}"includes="*.jar"/>
- </apply>
- </target>
- <!--Puttheproject'sresourcesintotheoutputpackagefile.-->
- <targetname="package-res-and-assets">
- <echo>Packagingresourcesandassets...</echo>
- <execexecutable="${aapt}"failonerror="true">
- <argvalue="package"/>
- <argvalue="-f"/>
- <argvalue="-M"/>
- <argvalue="AndroidManifest.xml"/>
- <argvalue="-S"/>
- <argvalue="${resource-dir}"/>
- <argvalue="-A"/>
- <argvalue="${asset-dir}"/>
- <argvalue="-I"/>
- <argvalue="${android-jar}"/>
- <argvalue="-F"/>
- <argvalue="${resources-package}"/>
- </exec>
- </target>
- <!--Sameaspackage-res-and-assets,butwithout"-A${asset-dir}"-->
- <targetname="package-res-no-assets">
- <echo>Packagingresources...</echo>
- <execexecutable="${aapt}"failonerror="true">
- <argvalue="package"/>
- <argvalue="-f"/>
- <argvalue="-M"/>
- <argvalue="AndroidManifest.xml"/>
- <argvalue="-S"/>
- <argvalue="${resource-dir}"/>
- <!--Noassetsdirectory-->
- <argvalue="-I"/>
- <argvalue="${android-jar}"/>
- <argvalue="-F"/>
- <argvalue="${resources-package}"/>
- </exec>
- </target>
- <!--Invokethepropertargetdependingonwhetherornot
- anassetsdirectoryispresent.-->
- <!--TODO:findanicerwaytoincludethe"-A${asset-dir}"argument
- onlywhentheassetsdirexists.-->
- <targetname="package-res">
- <availablefile="${asset-dir}"type="dir"property="res-target"value="and-assets"/>
- <propertyname="res-target"value="no-assets"/>
- <antcalltarget="package-res-${res-target}"/>
- </target>
- <!--Packagetheapplicationandsignitwithadebugkey.
- Thisisthedefaulttargetwhenbuilding.Itisusedfordebug.-->
- <targetname="debug"depends="dex,package-res">
- <echo>Packaging${out-debug-package},andsigningitwithadebugkey...</echo>
- <execexecutable="${apk-builder}"failonerror="true">
- <argvalue="${out-debug-package-ospath}"/>
- <argvalue="-z"/>
- <argvalue="${resources-package-ospath}"/>
- <argvalue="-f"/>
- <argvalue="${intermediate-dex-ospath}"/>
- <argvalue="-rf"/>
- <argvalue="${srcdir-ospath}"/>
- <argvalue="-rj"/>
- <argvalue="${external-libs-ospath}"/>
- </exec>
- </target>
- <!--Packagetheapplicationwithoutsigningit.
- Thisallowsfortheapplicationtobesignedlaterwithanofficialpublishingkey.-->
- <targetname="release"depends="dex,package-res">
- <echo>Packaging${out-unsigned-package}forrelease...</echo>
- <execexecutable="${apk-builder}"failonerror="true">
- <argvalue="${out-unsigned-package-ospath}"/>
- <argvalue="-u"/>
- <argvalue="-z"/>
- <argvalue="${resources-package-ospath}"/>
- <argvalue="-f"/>
- <argvalue="${intermediate-dex-ospath}"/>
- <argvalue="-rf"/>
- <argvalue="${srcdir-ospath}"/>
- <argvalue="-rj"/>
- <argvalue="${external-libs-ospath}"/>
- </exec>
- <echo>Itwillneedtobesignedwithjarsignerbeforebeingpublished.</echo>
- </target>
- <!--Installthepackageonthedefaultemulator-->
- <targetname="install"depends="debug">
- <echo>Installing${out-debug-package}ontodefaultemulator...</echo>
- <execexecutable="${adb}"failonerror="true">
- <argvalue="install"/>
- <argvalue="${out-debug-package}"/>
- </exec>
- </target>
- <targetname="reinstall"depends="debug">
- <echo>Installing${out-debug-package}ontodefaultemulator...</echo>
- <execexecutable="${adb}"failonerror="true">
- <argvalue="install"/>
- <argvalue="-r"/>
- <argvalue="${out-debug-package}"/>
- </exec>
- </target>
- <!--Uinstallthepackagefromthedefaultemulator-->
- <targetname="uninstall">
- <echo>Uninstalling${application.package}fromthedefaultemulator...</echo>
- <execexecutable="${adb}"failonerror="true">
- <argvalue="uninstall"/>
- <argvalue="${application.package}"/>
- </exec>
- </target>
- <!--初始化目录-->
- <targetname="init"depends="Copy_Ressource">
- <echomessage="Initoutputdirectory.....">
- </echo>
- <mkdirdir="${output.dir}"/>
- </target>
- <!--拷贝资源-->
- <targetname="Copy_Ressource">
- <echomessage="Copyappresource.">
- </echo>
- <copytodir="${asset-dir}"overwrite="true"failonerror="false">
- <filesetdir="${app.source.path}">
- <includename="*.*"/>
- </fileset>
- </copy>
- </target>
- <!--进行签名-->
- <targetname="jarsigner"depends="release">
- <execexecutable="${jarsigner}"failonerror="true">
- <argvalue="-verbose"/>
- <argvalue="-storepass"/>
- <argvalue="${password}"/>
- <argvalue="-keystore"/>
- <argvalue="android.keystore"/>
- <argvalue="-signedjar"/>
- <argvalue="${out-signed-package-ospath}"/>
- <argvalue="${out-unsigned-package-ospath}"/>
- <argvalue="android.keystore"/>
- </exec>
- </target>
- <!--进行优化-->
- <targetname="zipalign"depends="jarsigner">
- <execexecutable="${zipalign}"failonerror="true">
- <argvalue="-v"/>
- <argvalue="-f"/>
- <argvalue="4"/>
- <argvalue="${out-signed-package-ospath}"/>
- <argvalue="${zipalign-package-ospath}"/>
- </exec>
- </target>
- <!--直接上传到手机中去-->
- <targetname="adb"depends="zipalign">
- <execexecutable="${adb}"failonerror="true">
- <argvalue="install"/>
- <argvalue="-r"/>
- <argvalue="${zipalign-package-ospath}"/>
- </exec>
- </target>
- </project>
更多相关文章
- Pycharm安装PyQt5的详细教程
- android ndk编译x264开源(用于android的ffmpeg中进行软编码)
- Android使用Retrofit进行网络请求
- Android--SoLoader,android动态加载so库
- haproxy根据客户端浏览器进行跳转
- Android(安卓)命令行编译、打包生成apk文件
- [APP] Android(安卓)开发笔记 006-使用短信验证SDK进行短信验证
- android手机客户端上传文件,java servlet服务器端接收并保存到服
- Android(安卓)获取存储卡路径和空间使用情况