一键编译之通过脚本自动打成apk

来源:互联网 发布:在c 中执行sql语句 编辑:程序博客网 时间:2024/06/05 21:52

    一键编译分三篇,1.通过脚本自动打成apk;2.配合apk中的版本更新实现自动检测/自动更新;3.搭建jekins环境实现自动测试;

     本篇博客为:通过脚本自动打成apk,因为是个懒人,所以这里不对ant脚本作分析,如果感兴趣的朋友可以baidu下,有很多前辈写了很多文章,当时小弟也是根据这些文件搞出来的,这里说实话更多也只是为了记录下,怕以后忘记,记性不好没办法.....

build.xml

<?xml version="1.0" encoding="UTF-8"?><project name="iWifi" default="zipalign" basedir=".">        <property name="password" value="12345678"/>    <!-- environment of the system -->    <property environment="env"/><property name="env.ANDROID_HOME" value="D:\flow\adt-bundle-windows-x86-20130219\sdk"/>    <property name="env.JAVA_HOME" value="C:\Program Files (x86)\Java\jdk1.6.0_39"/>    <!-- current time -->    <tstamp>            <format property="today" pattern="yyMMdd_hhmmss"/>    </tstamp>    <property name="dir.android_home" value="${env.ANDROID_HOME}"/>    <property name="dir.java_home" value="${env.JAVA_HOME}"/>    <!-- relative dir of android sdk -->    <property name="dir.tools" value="${dir.android_home}/tools"/>    <property name="dir.platform" value="${dir.android_home}/platforms/android-17"/>    <property name="dir.platform_tools" value="${dir.android_home}/platform-tools"/>    <property name="lib.android" value="${dir.platform}/android.jar"/>    <property name="android.framework" value="${dir.platform}/framework.aidl"/>    <!-- command tools in android sdk -->    <property name="aapt" value="${dir.platform_tools}/aapt"/>    <property name="aidl" value="${dir.platform_tools}/aidl"/>    <property name="adb" value="${dir.platform_tools}/adb"/>    <property name="zipalign" value="${dir.tools}/zipalign"/>    <condition property="dx" value="${dir.platform_tools}/dx.bat" else="${dir.platform_tools}/dx">            <os family="windows" />    </condition>    <condition property="apk-builder" value="${dir.tools}/apkbuilder.bat" else="${dir.tools}/apkbuilder">            <os family="windows" />    </condition>    <condition property="jarsigner" value="${dir.java_home}/bin/jarsigner.exe" else="${dir.java_home}/bin/jarsigner">        <os family="windows" />    </condition>    <!-- relative dir of our project -->    <property name="dir.src" value="${basedir}/src"/>    <property name="dir.assets" value="${basedir}/assets"/>    <property name="dir.res" value="${basedir}/res"/>    <property name="dir.gen" value="$basedir}/gen"/>    <property name="file.manifest" value="${basedir}/AndroidManifest.xml"/>    <property name="external-jars" value="${basedir}/libs"/>    <!-- dex file name -->    <property name="file.dex" value="classes.dex"/>    <property name="file.resource" value="resources.ap_"/>    <!-- the output dir -->    <property name="dir.target" value="${basedir}/bin"/>    <property name="dir.target_classes" value="${dir.target}/classes"/>    <property name="dir.target_dex" value="${dir.target}/${file.dex}"/>    <property name="dir.target_resource" value="${dir.target}/${file.resource}"/>    <property name="dir.target_debug" value="${dir.target}/debug"/>    <property name="dir.target_release" value="${dir.target}/release"/>    <property name="file.apk_debug" value="${dir.target_debug}/${ant.project.name}_${today}.apk"/>    <property name="file.apk_unsign_release" value="${dir.target_release}/${ant.project.name}_unsign_${today}.apk"/>    <property name="file.apk_release" value="${dir.target_release}/${ant.project.name}s.apk"/>    <!-- the signed release which use zipalign tool to optimized -->    <property name="file.apk_zipalign" value="${dir.target_release}/${ant.project.name}.apk"/>    <target name="clean">            <delete dir="${dir.target}"/>        <delete dir="${dir.target_classes}"/>        <delete dir="${dir.target_debug}"/>        <delete dir="${dir.target_release}"/>    </target>        <!-- init -->    <target name="init" depends="clean">            <mkdir dir="${dir.target}"/>        <mkdir dir="${dir.target_classes}"/>        <mkdir dir="${dir.target_debug}"/>        <mkdir dir="${dir.target_release}"/>    </target>        <!-- generate apk file for the project -->    <target name="compile" depends="init">               <!-- Generate the R.java file for this project's resources. -->            <exec executable="${aapt}" failonerror="true">            <arg value="package" />            <arg value="-m" />            <arg value="-J" />            <arg value="${dir.src}" />            <arg value="-M" />            <arg value="${file.manifest}" />            <arg value="-S" />            <arg value="${dir.res}" />            <arg value="-I" />            <arg value="${lib.android}" />        </exec>        <!-- Generate java classes from .aidl files. -->        <apply executable="${aidl}" failonerror="true">            <arg value="-p${android.framework}" />            <arg value="-I${dir.src}" />            <fileset dir="${dir.src}">                <include name="**/*.aidl" />            </fileset>        </apply>        <!-- Compile this project's .java files into .class files. -->                <javac encoding="GBK" target="1.6" debug="true" extdirs="" srcdir="${dir.src}" destdir="${dir.target_classes}" bootclasspath="${lib.android}">            <classpath>                <fileset dir="${external-jars}" includes="*.jar" />            </classpath>        </javac>        <!-- Convert this project's .class files into .dex files. -->                <apply executable="${dx}" failonerror="true" parallel="true">            <arg value="--dex" />            <arg value="--output=${dir.target_dex}" />            <arg path="${dir.target_classes}" />            <fileset dir="${external-jars}" includes="*.jar" />        </apply>        <!-- Put the project's resources into the output package file. -->        <exec executable="${aapt}" failonerror="true">            <arg value="package" />            <arg value="-f" />            <arg value="-M" />            <arg value="AndroidManifest.xml" />            <arg value="-S" />            <arg value="${dir.res}" />            <arg value="-A" />            <arg value="${dir.assets}" />            <arg value="-I" />            <arg value="${lib.android}" />            <arg value="-F" />            <arg value="${dir.target_resource}"/>        </exec>    </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="compile">        <exec executable="${apk-builder}" failonerror="true">            <arg value="${file.apk_debug}" />            <arg value="-z" />            <arg value="${dir.target_resource}" />            <arg value="-f" />            <arg value="${dir.target_dex}" />            <arg value="-rf" />            <arg value="${dir.src}" />            <arg value="-rj" />            <arg value="${external-jars}" />        </exec>    </target>    <!-- Package the application without signing it.             This allows for the application to be signed later with an official publishing key. -->    <target name="unsign-release" depends="compile">        <exec executable="${apk-builder}" failonerror="true">            <arg value="${file.apk_unsign_release}" />            <arg value="-u" />            <arg value="-z" />            <arg value="${dir.target_resource}" />            <arg value="-f" />            <arg value="${dir.target_dex}" />            <arg value="-rf" />            <arg value="${dir.src}" />            <arg value="-rj"/>            <arg value="${external-jars}"/>        </exec>    </target>    <!-- sign the apk -->    <!-- use the command below to generate the android.keystore file:            "keytool -genkey -alias android.keystore -keyalg RSA -validity  20000 -keystore android.keystore" -->    <target name="jarsigner" depends="unsign-release">        <exec executable="${jarsigner}" failonerror="true">            <arg value="-verbose" />            <arg value="-storepass" />            <arg value="${password}" />            <arg value="-keystore" />            <arg value="android.keystore" />            <arg value="-signedjar" />            <arg value="${file.apk_release}" />            <arg value="${file.apk_unsign_release}" />            <arg value="android.keystore" />        </exec>    </target>        <!-- optimize -->    <target name="zipalign" depends="jarsigner">        <exec executable="${zipalign}" failonerror="true">            <arg value="-v" />            <arg value="-f" />            <arg value="4" />            <arg value="${file.apk_release}" />            <arg value="${file.apk_zipalign}" />        </exec>                <!-- delete unsigned apk and unoptimized apk -->        <delete file="${file.apk_unsign_release}"/>        <delete file="${file.apk_release}"/>    </target></project>
需要做两处修改:

      1.修改property name="env.ANDROID_HOME"和property name="env.JAVA_HOME",分别对应android的SDK路径和java的SDK路径;

      2.需要生成key.store文件,如何生成同样baidu,步骤都很详细;

build.bat

if defined ANT_HOME goto BUILDset ANT_HOME=..\apache-ant-1.9.4set path=%path%;%ANT_HOME%\bin:BUILDant.bat -buildfile build.xml



0 0
原创粉丝点击