[原]Android打包之Eclipse打包

Android自动打包流程详细图:

步骤一:

在工程中新建一个build.xml.

步骤二:

给工程配置ant工具。

选择ant工具的步骤如下:

Windows->Shown view->Ant 这样就出项了ant视图框。在ant视图框中单击右键,选择addBuilderfile添加ant编译文件。

添加好ant编译文件后,我们还需要对编译文件进行设置:选中编译文件,右键单击选择Run As->external Tools configurations

弹出了ant编译的配置框。

在编译ant文件时,我们常常遇到编译进程卡住现象,这是因为ant编译器找不到日志输出文件造成的。可以在ant编译框中的Main->Argument文本框中添加如下语句:-logger org.apache.tools.ant.NoBannerLogger,这样指定ant编译时的日志编译器。

如果在编译工程时,遇到不可映射的字符集(工程字符集和ant编译器的字符集不一致)时,可以修改ant的编译时字符集

步骤如下:在ant编译配置框中选择common->Console Encoding设置ant的字符集

步骤三:

编写build.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="AntTest" default="release">
    <!--     指定配置文件      -->
    <property file="default.properties" />
    <property file="local.properties" />  

    <!--     定义工具目录      -->
    <property name="sdk.dir" value="${sdk-dir}" />
    <property name="android.tools.dir" value="${sdk.dir}/tools" />
    <property name="android.platformtools.dir" value="${sdk.dir}/platform-tools" />
    <property name="android.platforms.dir" value="${sdk.dir}/platforms/${target}" />  

    <property name="android.tools.absolute.dir" location="${android.tools.dir}" />
    <property name="android.platformtools.absolute.dir" location="${android.platformtools.dir}" />
    <property name="android.platforms.absolute.dir" location="${android.platforms.dir}" />  

    <!--     定义工具
    <property name="verbose" value="false" />-->
    <condition property="exe" value=".exe" else="">
        <os family="windows" />
    </condition>
    <property name="jar.proguard" value="${proguard-jar}" />
    <property name="jar.android" value="${android.platforms.absolute.dir}/android.jar" />
    <property name="tools.dx" value="${android.platformtools.absolute.dir}/dx.bat" />
    <property name="tools.apkbuilder" value="${android.tools.absolute.dir}/apkbuilder.bat" />
    <property name="tools.adb" value="${android.tools.absolute.dir}/adb${exe}" />
    <property name="tools.zipalign" value="${android.tools.absolute.dir}/zipalign${exe}" />
    <property name="tools.aapt" value="${android.platformtools.absolute.dir}/aapt${exe}" />
    <property name="tools.aidl" value="${android.platformtools.absolute.dir}/aidl${exe}" />
    <property name="tools.jarsigner" value="${JAVA_HOME}/bin/jarsigner${exe}" />  

    <!--     定义引入工具库
    <path id="android.antlibs">
        <pathelement path="${sdk.dir}/tools/lib/anttasks.jar" />
        <pathelement path="${sdk.dir}/tools/lib/sdklib.jar" />
        <pathelement path="${sdk.dir}/tools/lib/androidprefs.jar" />
        <pathelement path="${sdk.dir}/tools/lib/apkbuilder.jar" />
        <pathelement path="${sdk.dir}/tools/lib/jarutils.jar" />
    </path>
            定义任务
    <taskdef name="aaptexec" classname="com.android.ant.AaptExecLoopTask" classpathref="android.antlibs" />
    <taskdef name="apkbuilder" classname="com.android.ant.ApkBuilderTask" classpathref="android.antlibs" />
    <taskdef name="xpath" classname="com.android.ant.XPathTask" classpathref="android.antlibs" />
    -->  

    <!--     定义源代码及资源等输入目录       -->
    <property name="in.source.dir" value="src" />
    <property name="in.resource.dir" value="${res-dir}" />
    <property name="in.asset.dir" value="${assets-dir}" />  

    <property name="in.source.absolute.dir" location="${in.source.dir}" />
    <property name="in.resource.absolute.dir" location="${in.resource.dir}" />
    <property name="in.asset.absolute.dir" location="${in.asset.dir}" />  

    <!--     定义本地库/第三方工具库文件目录        -->
    <property name="in.external.libs.dir" value="libs" />
    <property name="in.native.libs.dir" value="libs" />  

    <property name="in.external.libs.absolute.dir" location="${in.external.libs.dir}" />
    <property name="in.native.libs.absolute.dir" location="${in.native.libs.dir}" />  

    <!--     定义输入文件      -->
    <property name="in.manifest.file" value="${manifest-file}" />
    <property name="in.android.aidl.file" value="${android.platforms.dir}/framework.aidl" />  

    <property name="in.manifest.absolute.file" location="${in.manifest.file}" />
    <property name="in.android.aidl.absolute.file" location="${in.android.aidl.file}" />  

    <!--     定义输出文件目录    -->
    <property name="out.gen.dir" value="gen" />
    <property name="out.dir" value="bin" />
    <property name="out.classes.dir" value="${out.dir}/classes" />  

    <property name="out.gen.absolute.dir" location="${out.gen.dir}" />
    <property name="out.absolute.dir" location="${out.dir}" />
    <property name="out.classes.absolute.dir" location="${out.classes.dir}" />
    <property name="release.absolute.dir" location="${release-dir}" />  

    <!--     定义输出文件          -->
    <property name="out.dex.file" value="${ant.project.name}-classes.dex" />
    <property name="out.resource.package.file" value="${ant.project.name}-resource.apk" />
    <property name="out.unsigned.package.file" value="${ant.project.name}-unsigned.apk" />
    <property name="out.signed.package.file" value="${ant.project.name}-signed.apk" />
    <property name="out.aligned.package.file" value="${ant.project.name}-aligned.apk" />
    <property name="release.package.file" value="${release-apk-file}" />  

    <property name="out.dex.absolute.file" location="${out.dir}/${out.dex.file}" />
    <property name="out.resource.package.absolute.file" location="${out.dir}/${out.resource.package.file}" />
    <property name="out.unsigned.package.absolute.file" location="${out.dir}/${out.unsigned.package.file}" />
    <property name="out.signed.package.absolute.file" location="${out.dir}/${out.signed.package.file}" />
    <property name="out.aligned.package.absolute.file" location="${out.dir}/${out.aligned.package.file}" />
    <property name="release.package.absolute.file" location="${release.absolute.dir}/${release.package.file}" />  

    <!--
        <target>标签
        一个项目标签下可以有一个或多个target标签。一个target标签可以依赖其他的target标签。例
        如,有一个target用于编译程序,另一个target用于声称可执行文件。在生成可执行文件之前必
        须先编译该文件,因策可执行文件的target依赖于编译程序的target。Target的所有属性如下。
            (1)name表示标明,这个属性是必须的。
            (2)depends表示依赖的目标。
            (3)if表示仅当属性设置时才执行。
            (4)unless表示当属性没有设置时才执行。
            (5)description表示项目的描述。
        Ant的depends属性指定了target的执行顺序。Ant会依照depends属性中target出现顺序依次执行
        每个target。在执行之前,首先需要执行它所依赖的target。程序中的名为run的target的
        depends属性compile,而名为compile的target的depends属性是prepare,所以这几个target执
        行的顺序是prepare->compile->run。
        一个target只能被执行一次,即使有多个target依赖于它。如果没有if或unless属性,target总
        会被执行。
-->
    <target name="-clean">
        <echo>Creating output directories if needed...</echo>
        <delete dir="${out.absolute.dir}" />
        <delete dir="${out.gen.absolute.dir}" />
    </target>  

    <target name="-dirs" depends="-clean">
        <echo>Creating output directories if needed...</echo>
        <mkdir dir="${in.resource.absolute.dir}" />
        <mkdir dir="${in.external.libs.absolute.dir}" />
        <mkdir dir="${out.gen.absolute.dir}" />
        <mkdir dir="${out.absolute.dir}" />
        <mkdir dir="${out.classes.absolute.dir}" />
    </target>  

    <!--
        第一步 生成R.java类文件:
        Eclipse中会自动生成R.java,ant和命令行使用android SDK提供的aapt.ext程序生成R.java。
    -->
    <target name="-resource-src" depends="-dirs">
        <echo>Generating R.java / Manifest.java from the resources...</echo>
        <exec executable="${tools.aapt}" failonerror="true">
            <arg value="package" />
            <arg value="-m" />
            <arg value="-J" />
            <arg path="${out.gen.absolute.dir}" />
            <arg value="-M" />
            <arg path="${in.manifest.absolute.file}" />
            <arg value="-S" />
            <arg path="${in.resource.absolute.dir}" />
            <arg value="-I" />
            <arg path="${jar.android}" />
        </exec>
    </target>  

    <!--
        第二步 将.aidl文件生成.java类文件:
        Eclipse中自动生成,ant和命令行使用android SDK提供的aidl.exe生成.java文件。
    -->
    <!-- Generates java classes from .aidl files. -->
    <target name="-aidl" depends="-dirs">
        <echo>Compiling aidl files into Java classes...</echo>
        <apply executable="${tools.aidl}" failonerror="true">
            <arg value="-p${in.android.aidl.file}" />
            <arg value="-I${in.source.absolute.dir}" />
            <arg value="-o${out.gen.absolute.dir}" />
            <fileset dir="${in.source.absolute.dir}">
                <include name="**/*.aidl" />
            </fileset>
        </apply>
    </target>  

    <!--
        第三步 编译.java类文件生成class文件:
        Eclipse中自动生成,ant和命令行使用jdk的javac编译java类文件生成class文件。
         -->
    <!-- Compiles this project‘s .java files into .class files. -->
    <target name="compile" depends="-resource-src, -aidl" >
        <echo>Compiles project‘s .java files into .class files</echo>
        <javac encoding="utf-8" target="1.5" debug="true" extdirs="" srcdir="."
            destdir="${out.classes.absolute.dir}" bootclasspath="${jar.android}">
            <classpath>
                <fileset dir="${in.external.libs.absolute.dir}" includes="*.jar" />
                <fileset dir="${in.external.libs.absolute.dir}" includes="*.zip" />
            </classpath>
        </javac>
    </target>  

    <!--Execute proguard class flies-->
    <target name="optimize" depends="compile">
        <echo>optimize classes are put to "${out.absolute.dir}"   .</echo>
        <jar basedir="${out.classes.absolute.dir}" destfile="${out.absolute.dir}/temp.jar"/>
        <taskdef resource="proguard/ant/task.properties"  classpath="${jar.proguard}" />
        <proguard>
            -injars                 ${out.absolute.dir}/temp.jar
            -outjars                    ${out.absolute.dir}/optimized.jar
            -libraryjars                ${jar.android}
            -optimizationpasses 5
            -dontusemixedcaseclassnames
            -dontskipnonpubliclibraryclasses
            -dontpreverify
            -verbose
            -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
            -include proguard.cfg
          </proguard>
        <delete file="${out.absolute.dir}/temp.jar"/>
        <delete dir="${out.classes.dir}" failonerror="false" />
        <mkdir dir="${out.classes.dir}"/>
        <unzip src="${out.absolute.dir}/optimized.jar" dest="${out.classes.absolute.dir}"/>
        <delete file="${out.absolute.dir}/optimized.jar"/>
    </target>  

    <!--
        第四步 将class文件打包生成classes.dex文件:
        Eclipse中自动生成,ant和命令行使用android SDK提供的dx.bat命令行脚本生成classes.dex文件。
    -->
    <target name="dex" depends="optimize">
        <echo>Converting compiled files and external libraries into ${out.absolute.dir}/${out.dex.file}    ...</echo>
        <apply executable="${tools.dx}" failonerror="true" parallel="true">
            <arg value="--dex" />
            <arg value="--output=${out.dex.absolute.file}" />
            <arg path="${out.classes.absolute.dir}" />
            <fileset dir="${in.external.libs.absolute.dir}" includes="*.jar"/>
        </apply>
        <delete dir="${out.classes.absolute.dir}"/>
    </target>  

    <!--
        第五步 打包资源文件(包括res、assets、androidmanifest.xml等):
        Eclipse中自动生成,ant和命令行使用Android SDK提供的aapt.exe生成资源包文件。
    -->
    <target name="package-resource">
        <echo>Packaging resources and assets ${out.resource.package.absolute.file}    ...</echo>
        <exec executable="${tools.aapt}" failonerror="true">
            <arg value="package" />
            <arg value="-f" />
            <arg value="-M" />
            <arg value="${in.manifest.file}" />
            <arg value="-S" />
            <arg value="${in.resource.absolute.dir}" />
            <arg value="-A" />
            <arg value="${in.asset.absolute.dir}" />
            <arg value="-I" />
            <arg value="${jar.android}" />
            <arg value="-F" />
            <arg value="${out.resource.package.absolute.file}" />
        </exec>
    </target>  

    <!--
        第六步 生成未签名的apk安装文件:
        Eclipse中自动生成debug签名文件存放在bin目录中,ant和命令行使用android SDK提供的apkbuilder.bat命令脚本生成未签名的apk安装文件。
    -->
    <!-- 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-resource">
        <echo>Packaging ${out.unsigned.package.absolute.file} for release...</echo>
        <exec executable="${tools.apkbuilder}" failonerror="true">
            <arg value="${out.unsigned.package.absolute.file}" />
            <arg value="-u" />
            <arg value="-z" />
            <arg value="${out.resource.package.absolute.file}" />
            <arg value="-f" />
            <arg value="${out.dex.absolute.file}" />
            <arg value="-rf" />
            <arg value="${in.source.absolute.dir}" />
            <arg value="-rj" />
            <arg value="${in.external.libs.absolute.dir}" />
        </exec>
        <echo>It will need to be signed with jarsigner before being published.</echo>
        <delete file="${out.resource.package.absolute.file}" />
        <delete file="${out.dex.absolute.file}" />
    </target>  

    <!--
        第七步 对未签名的apk进行签名生成签名后的android文件:
    -->
    <!-- Package the application without signing it.  This allows for the application to be signed later with an official publishing key. -->
    <target name="jarsigner" depends="package">
        <echo>Packaging ${out.unsigned.package.absolute.file} for release...</echo>
        <exec executable="${tools.jarsigner}" failonerror="true">
            <arg value="-keystore" />
            <arg value="${keystore}" />
            <arg value="-storepass" />
            <arg value="${password}" />
            <arg value="-keypass" />
            <arg value="${password}" />
            <arg value="-signedjar" />
            <arg value="${out.signed.package.absolute.file}" />
            <arg value="${out.unsigned.package.absolute.file}" />
            <arg value="${keyalias}" />
        </exec>
        <delete file="${out.unsigned.package.absolute.file}" />
    </target>  

    <!--
        第七步 签名的文件进行字节对齐;
    -->
    <target name="zipalign" depends="jarsigner">
        <echo>Zipalign ${out.aligned.package.absolute.file} for release...</echo>
        <exec executable="${tools.zipalign}">
            <arg value="-f" />
            <arg value="-v" />
            <arg value="4" />
            <arg value="${out.signed.package.absolute.file}" />
            <arg value="${out.aligned.package.absolute.file}" />
        </exec>
        <delete file="${out.signed.package.absolute.file}" />
    </target>  

    <!--
        第八步 签名的文件进行字节对齐;
    -->
    <target name="release" depends="zipalign">
        <copy tofile="${release.package.absolute.file}">
            <fileset dir="${out.absolute.dir}" includes="${out.aligned.package.file}"/>
        </copy>
        <delete file="${out.aligned.package.absolute.file}" />
    </target>  

</project>  

第四步:

执行project的build即可。

[原]Android打包之Eclipse打包

时间: 2024-08-07 01:25:08

[原]Android打包之Eclipse打包的相关文章

[原]Android打包之Eclipse打多渠道包

Android自动打包流程详细图: 步骤一和步骤二参考:[原]Android打包之Eclipse打包 步骤三:编写build.xml <?xml version="1.0" encoding="UTF-8"?> <project name="AndroidTouchDemo"> <!-- 指定配置文件 --> <property file="default.properties">

[原] Android自动打包之命令行打包

Android自动打包流程详细图: 总结为以下几个步骤: 1. 生成R文件 2. Java代码编译成class文件 3. class文件生成dex文件 4. 打包资源 5. 生成apk 6. 创建密匙 7. 签名apk 下面用Ubuntu命令行来打包,流程如下: 1. 生成R文件,命令如下: aapt package -f -m -J $BUILD_SOURCE_PATH/$ANDROID_GEN \ -A $BUILD_SOURCE_PATH/$PACKAGE_RESOURCE_FILE \

Android项目在eclipse中无法打包apk文件[bin目录下没生成apk文件]问题解决

后来我发现在eclipse的Preferences -> Android -> Build中有一项“Skip packaging and dexing until export or launch....”,原来这个选项默认是被勾选的,这个选项的意思是“跳过packing和dexing,直到export或者 launch...”,去掉这个选项即可解决问题. Android项目在eclipse中无法打包apk文件[bin目录下没生成apk文件]问题解决

[原]Android打包之跨平台打包

Android自动打包流程详细图: 在前面一些博客我们知道了如何通过命令行打包,如何通过Eclipse打包,如何通过编写shell脚本来进行打包,但是这些都不能很好的跨平台进行打包. 因Python本身具有很好的跨平台特性,故本博就是通过使用Python来进行编写跨平台打包脚本,脚本如下(build.py): #!/bin/python # build Android application package (.apk) from the command line using the SDK t

Eclipse打包Android项目时用到proguard.cfg后,出现的Warning:can&amp;#39;t find referenced class问题的解决方式

Warning: can't find superclass or interface Warning: can't find referenced class 这两个问题的解决方法: 1.要把你项目中所引入的第三方jar包使用"-libraryjars 包路径"指定好. 2.还是报错的话,确保报错的类没有在你的项目中使用到,使用"-dontwarn 类名正則表達式"屏蔽警告. 完了?但是我还想问:第一步做完后还是报错,并且这个类在我项目中真的实用到,不能使用&qu

cocos2dx Android 使用ant 批量打包

参考文章: 例子:http://www.2cto.com/kf/201305/208139.html http://blog.csdn.net/ljb_blog/article/details/12709983 eclipse 如何支持ant:http://www.cnblogs.com/sw926/p/3238512.html 环境介绍: 引擎:cocos2dx2.2.2 开发平台:mac jdk 1.7 注:参考了以上文章,最后发现打包也不用自己下ant,也不用命令行, 而是设置 <proj

Android开发把项目打包成apk,安卓到手机上,或者提交到app应用商店

#1.用Eclipse的话导出app其实还是很容易的.大家看我的步骤.有图有真相哦 选择一个项目 创建一个新的,位置随便,下面是密码 这里都是一些名字,地区,组织,国家.看你们自己的了 选择你要存放apk的位置 打完收工 Android开发把项目打包成apk,安卓到手机上,或者提交到app应用商店,布布扣,bubuko.com

Android开发把项目打包成apk-(转)

做完一个Android项目之后,如何才能把项目发布到Internet上供别人使用呢?我们需要将自己的程序打包成Android安装包文件--APK(Android Package),其后缀名为".apk".将APK文件直接上传到Android模拟器或Android手机中执行即可进行安装.Android系统要求具有其开发者签名的私人密钥的应用程序才能够被安装.生成数字签名以及打包项目成APK都可以采用命令行的方式,但是通过Eclipse中的向导我们会更加方便地完成整个流程,打包发布的过程非

Eclipse打包Egret App

Egret官方提供eclipse和androidstudio打包. 这里使用eclipse. 1 下载android环境 Eclipse + ADT + SDKTools:http://www.androiddevtools.cn/ Eclipse中文包:http://www.veryhuo.com/down/html/69596.html 2 Egret教程 官网新版教程 Android Studio打包:http://developer.egret.com/cn/2d/publish/pub