在Windows下用ant编译Android应用生成apk安装包
来源:互联网 发布:web开发人员网络 编辑:程序博客网 时间:2024/06/01 08:06
一般情况下,我们用Eclipse开发Android应用,几乎从来没有考虑用命令行来编译,因为Eclipse太强大了以至于Android开发成为了傻瓜。
今天,我决心来尝试一下用ant来编译Android应用,ant编译Android应用其实就是调用多个Android SDK提供的多个编译工具,最后编译打包签名,形成apk文件。
我的开发环境是Windows XP,Java是1.6的,Eclipse是adt自带的那个。下面是用ant来编译Android应用的build.xml的内容。
<project default="main" basedir="."> <property name="apk-name" value="product" /> <property name="apk-version" value="latest" /> <property name="apk-market" value="dev" /> <property name="basedir" value="." /> <property name="android-jar" value="E:/adt-bundle-windows-x86-20130219/sdk/platforms/android-8/android.jar" /> <!-- <property name="android-jar" value="/usr/lib/android-sdk/platforms/android-10/android.jar" /> --> <target name="init"> <echo>start initing ... </echo> <mkdir dir="out" /> <delete> <fileset dir="out"></fileset> </delete> <mkdir dir="gen" /> <delete> <fileset dir="gen"></fileset> </delete> <mkdir dir="bin/classes" /> <delete> <fileset dir="bin/classes"></fileset> </delete> <mkdir dir="build/${apk-version}" /> <echo>finish initing. </echo> </target> <target name="main" depends="init"> <echo>generating R.java for project to dir gen (using aapt) ... </echo> <exec executable="aapt"> <arg value="package" /> <arg value="-m" /> <arg value="-J" /> <arg value="gen" /> <arg value="-M" /> <arg value="AndroidManifest.xml" /> <arg value="-S" /> <arg value="res" /> <arg value="-S" /> <arg value="${basedir}/res" /> <arg value="-I" /> <arg value="${android-jar}" /> <arg value="--auto-add-overlay" /> </exec> <echo>generating R.java for library to dir gen (using aapt) ... </echo> <exec executable="aapt"> <arg value="package" /> <arg value="-m" /> <arg value="--non-constant-id" /> <arg value="--auto-add-overlay" /> <arg value="-J" /> <arg value="gen" /> <arg value="-M" /> <arg value="${basedir}/AndroidManifest.xml" /> <arg value="-S" /> <arg value="res" /> <arg value="-S" /> <arg value="${basedir}/res" /> <arg value="-I" /> <arg value="${android-jar}" /> </exec> <path id="project.libs"> <fileset dir="libs"> <include name="*.jar" /> </fileset> </path> <echo>compiling java files to class files (include R.java, library and the third-party jars) ... </echo> <javac destdir="bin/classes" bootclasspath="${android-jar}"> <src path="${basedir}/src" /> <src path="src" /> <src path="gen" /> <classpath refid="project.libs" /> </javac> <echo>packaging class files (include the third-party jars) to calsses.dex ... </echo> <!-- <exec executable="dx"> --> <exec executable="dx.bat"> <arg value="--dex" /> <arg value="--output=${basedir}/out/classes.dex" /> <arg value="${basedir}/bin/classes" /> <arg value="${basedir}/libs" /> </exec> <echo>packaging resource (include res, assets, AndroidManifest.xml, etc.) to res.zip ... </echo> <exec executable="aapt"> <arg value="package" /> <arg value="-f" /> <arg value="-M" /> <arg value="AndroidManifest.xml" /> <arg value="-S" /> <arg value="res" /> <arg value="-S" /> <arg value="${basedir}/res" /> <arg value="-A" /> <arg value="assets" /> <arg value="-I" /> <arg value="${android-jar}" /> <arg value="-F" /> <arg value="out/res.zip" /> <arg value="--auto-add-overlay" /> </exec> <echo>building unsigned.apk ... </echo> <!-- <exec executable="apkbuilder"> --> <exec executable="apkbuilder.bat"> <arg value="${basedir}/out/unsigned.apk" /> <arg value="-u" /> <arg value="-z" /> <arg value="${basedir}/out/res.zip" /> <arg value="-f" /> <arg value="${basedir}/out/classes.dex" /> </exec> <echo>signing the unsigned apk to final product apk ... </echo> <exec executable="jarsigner"> <arg value="-keystore" /> <arg value=".keystore" /> <arg value="-storepass" /> <arg value="hello123456" /> <arg value="-keypass" /> <arg value="hello123456" /> <arg value="-signedjar" /> <arg value="${basedir}/build/${apk-version}/${apk-name}_${apk-version}_${apk-market}.apk" /> <arg value="${basedir}/out/unsigned.apk" /> <arg value="zhy" /> </exec> <echo>done.</echo> </target></project>
上面的build.xml文件在我的机器上测试通过了。注意,我加粗的部分就是要稍作修改的部分,你应该懂的。
要注意的是,在执行之前要用 keytool -genkey -alias yourname 来生成一个密钥。并将.keystore文件复制到目录下,或者指定具体的位置。否则,最后一步不能成功的话,就无法生成在手机上可安装使用的apk文件了。
E:\workspace\Hello8>antBuildfile: E:\workspace\Hello8\build.xmlinit: [echo] start initing ... [mkdir] Created dir: E:\workspace\Hello8\out [mkdir] Created dir: E:\workspace\Hello8\gen [mkdir] Created dir: E:\workspace\Hello8\bin\classes [mkdir] Created dir: E:\workspace\Hello8\build\latest [echo] finish initing.main: [echo] generating R.java for project to dir gen (using aapt) ... [echo] generating R.java for library to dir gen (using aapt) ... [echo] compiling java files to class files (include R.java, library and the third-party jars) ... [javac] E:\workspace\Hello8\build.xml:76: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds [javac] Compiling 2 source files to E:\workspace\Hello8\bin\classes [echo] packaging class files (include the third-party jars) to calsses.dex... [echo] packaging resource (include res, assets, AndroidManifest.xml, etc.)to res.zip ... [echo] building unsigned.apk ... [exec] [exec] THIS TOOL IS DEPRECATED. See --help for more information. [exec] [echo] signing the unsigned apk to final product apk ... [exec] [exec] 警告: [exec] 签名者证书将在六个月内过期。 [echo] done.BUILD SUCCESSFULTotal time: 9 secondsE:\workspace\Hello8>
因为我在用keytool -genkey 的时候没有指定有效期,默认就是六个月。这在实际使用的时候,肯定是要指定时长的,比如10年20年之类的。
之所以,我能够这么快就能成功的使用ant编译android应用,全都是下面这篇文章的功能(不过我修改了一下build.xml才运行通过):
Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
http://www.cnblogs.com/qianxudetianxia/archive/2012/07/04/2573687.html#commentform在此,对该文的作者表示感谢和敬意!
0 0
- 在Windows下用ant编译Android应用生成apk安装包
- cocos2dx项目在命令行下转换成android并编译生成APK安装包
- windows下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
- windows下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
- android 生成apk安装包
- 使用Ant编译Apk包
- 使用ant编译生成apk
- Ant 编译源代码生成apk
- 使用Ant打包Android应用——apk生成过程
- window下使用ant编译android应用
- Android手动编译生成apk安装文件
- ant 自动编译 android apk
- android使用ant编译APK
- android使用ant编译APK
- Android使用ant编译apk
- android使用ant编译APK
- android使用ant编译APK
- Android使用ant编译APK
- 趣味题
- Gartner:2013年全球存储市场疲软依旧
- 前台技术--dhtrmlxTree使用
- USING PARTED ON > 2TB DRIVES TO CREATE NEW PARTITIONS FOR LVM
- 算法设计与分析--小算法问题总结
- 在Windows下用ant编译Android应用生成apk安装包
- Android framework 中双击 home 的实现
- C++ 虚函数表解析
- 黑马程序员 测试题:编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,程序计算这一天是星期几,并且计算出是一年中的第几天
- VS2010/MFC编程入门之二十二(常用控件:按钮控件的编程实例)
- Linux系统下查看LSI公司RAID阵列卡相关信息
- 为了纪念的忘却
- 字符串编辑
- DWR的学习-dwr convert的作用