Android本身是支持ant打包项目的,并且SDK中自带一个build.xml文件。
通过该文件,可以对文件进行编译、打包、安装等。并且支持多种方式打包,如debug或者release。
一般的,可以按照如下方法进行操作:
首先创建一个Android工程。
工程创建好后,需要为工程添加ant支持,即创建相应的build.xml文件。
这个文件不需要用户自己创建,只需要执行如下命令即可:
<sdk>/tools/android update project -p <project> -t <target>
其中:
sdk为sdk的安装目录,其下的tools/android是我们要使用的命令。
project为项目目录。
target为项目所使用的android的target id,也就是项目对应的android的版本。
可以将sdk的tools目录添加到环境变量 ~/.bashrc 文件中,重启后生效,以后可以直接使用命令了。
可以通过执行以下命令查看当前sdk中所包含的target以及相应id:
android list targets
执行完android update project命令后,会在项目的根目录下生成相应的ant文件。
主要有build.xml、ant.properties、local.properties三个文件。
如果没有ant.properties文件,可以自己手动添加。
其中,build.xml文件是进行ant build的主要文件,它引用了其它的文件。
在local.properties文件中定义了sdk.dir属性,也就是当前使用的sdk的目录。
在ant.properties文件中,可以定义自己的一些属性,或者重定义一些属性。
当然,这两个属性文件可有可无,直接定义到build.xml中也没有关系。
在build.xml中的最后,引用了sdk目录下的tools/ant/build.xml文件。
这个是sdk默认的build文件,可以将其内容直接拷贝过来,也可以保持当前的引用方式。
项目下的build.xml默认执行的target是help,运行后可以看到相关的帮助信息。
通过帮助信息,可以看到其它可用的target。
一般的,我们需要修改为debug或者release。
修改好之后,再运行build.xml文件,就会执行我们需要的编译过程了。
build.xml文件的执行方法为:右键->Run As->Ant Build。
如果是debug版的话,默认会使用debug方式签名。
如果是release版的话,需要指定相应的keystore以及私钥。
否则,最后只能生成一个没有签名的apk文件。
设定私钥库的方法是,在ant.properties文件中,添加如下内容:
key.store=<keystore>
key.alias=<key>
key.store.password=<keystore pwd>
key.alias.password=<key pwd>
其中:
keystore为私钥库文件。
key为签名需要使用的私钥。
key.store.password为私钥库的密码。
key.alias.password为私钥的密码。
两个密码相关的属性也可以不添加,而只添加私钥库及私钥。
这样的话,执行时会依次弹出相应的输入框,提示用户输入相应的密码。
这样虽然相对繁琐,但是由于没有明文指定密码,对私钥库的保护会更好一些。
如果项目引用了第三方库的话,只需要在项目根目录创建libs文件夹并将其放入即可。
如果是jar库,直接放到libs目录下;如果是so库,需要放到libs的名为armeabi的子目录下。
也可以通过设定相应的属性来指定第三方库的位置,其默认都是libs文件夹。
jar.libs.dir为jar类型库所在的目录。
native.libs.absolute.dir为so类型库所在的目录,即armeabi的父目录。
如果项目包含了jni代码,希望在打包时自动重新编译so库,可以修改build.xml文件。
修改方法为,在引用sdk的build.xml文件之前添加如下target:
<target name="-pre-build" depends="-ndk-build">
</target>
<target name="-ndk-build">
<exec executable="ndk-build" failonerror="true">
<arg value="clean" />
</exec>
<exec executable="ndk-build" failonerror="true" />
</target>
ndk-build为ndk提供的命令,需要将ndk安装目录添加到环境变量中,添加方法同sdk/tools。
生成的so默认会放到libs/armeabi目录下。
使用默认的build.xml打包apk时,已经包含了混淆、签名、对齐优化等相关过程。
如果是使用release的方式,最后生成的apk文件已经可以直接发布了。
遗留问题:
目前采用这种方法生成的APK,虽然已经被签名了,但是,安装时错误,提示未签名。
查看APK包中的签名文件,不是默认的CERT.*,而是<key>.*。
然后,即使将名称修改成CERT.*,程序仍然不能正常安装。
如果导出debug版本,则不会有这个问题。
用ADT插件导出签名APK,也不会有这个问题。
解决方法:
产生此问题的根本原因是JDK1.7造成的,只有运行Ant使用jre1.7的版本时,才会发生该问题。
可以通过设置运行build.xml文件时使用的jre版本来解决,具体方法是:
选中build.xml->右键->Run As->External Tools Configurations,
在右侧区域选中JRE标签页,可以看到对jre设定有三个选项:
Run in the same JRE as the workspace使用与workspace相同版本的jre。
Execution environment根据相关环境选择一个jre版本。
Separate JRE使用一个已经安装的jre的当前版本。
一般项目的jre都会设定为1.7以下的版本,所以建议选择第一个,使其与项目设定保持一致即可。
分享到:
相关推荐
Ant编译打包android工程,签名,多渠道
因为项目的需要必须写一个ANDROID_ANT自动编译打包签名的脚本,终于奋斗了几天写完了,和大家分享一下
通过ant脚本,编译打包android工程。 编译打包android工程的ant脚本,Android官方提供的打包脚本。 有注释
mac下是用ant对android App的多渠道打包工具。
当一个代码项目大了以后,每次重新编译,打包,测试等都会变得非常复杂而且重复,因此c语言中有make脚本来帮助这些工作的批量完成。在Java 中应用是平台无关性的,当然不会用平台...本文介绍了android编译和ant打包原理
通过ant脚本,编译打包android工程, 编译打包android工程的ant脚本。
ant 是一个编译打包工具 只需解压便可使用 下载后有两个文件: apache-ant-1.8.2-src.zip 是源文件发布 apache-ant-1.8.2-bin.zip 是二进制发布
Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件 详见:http://www.cnblogs.com/ycxyyzw/p/4535459.html
Gradle编译打包Android apk详细介绍 理解Gradle构建过程,解读Android Gradle插件的配置 阅读本文一定是要使用过Gradle生成apk,文中不会讲如何安装运行Gradle,如有需要可先看文末的参考文章。 APK包是一个ZIP...
本资源详细的描述了如何使用Ant批量多渠道导报Android应用。运营是需要上传应用到20几个市场上去,这个时候需要批量打不通tag的包,以便友盟能够统计得到各通道下载量
在网页后台,使用Ant编译项目多渠道自动打包app应用
使用ant编译、签名、优化打包apk文件 附件为一个build.properties文件和一个build.xml文件。 执行的前提是需要配置好ANT_HOME、ANDROID_HOME、JAVA_HOME环境变量。
关于最新的Android Sdk 使用Ant多渠道批量打包的实现的文章可以看我的博客。
经过不断的尝试,在ubuntu环境下,以花界为例,我将一步一步演示如何使用命令行,使用ant编译android项目,打包多渠道APK。 要点: (1). 编译android的命令使用 (2). ant基本应用 (3). 多项目如何编译(包含...
打包原理: 反编译基础Apk -> 循环渠道号 -> 替换assets目录下的渠道文件 -> 修改渠道号 -> 重新生成Apk -> 进行签名 -> zipalign优化
-- ant打包步骤 1.用aapt生成R.java 2.JAVAC编译JAVA文件 3.批处理生成classes.dex 4.aapt打包资源 5.apkbuilder包资源和类文件为APK文件 6.jarsinger 对APK进行签名--> basedir=$(cd...
sed -i '' "s/\(android:value=\)\"\(.*\)\"\( android:name=\"UMENG_CHANNEL\"\)/\1\"$market\"\3/g" AndroidManifest.xml ant -Dapk-name=wardrobe -Dapk-version=1.1.120121120 -Dapk-market=$market done
Android 工程构建的持续集成,需要搭建一套编译和打包自动化流程,比如建立每日构建系统、自动生成发布文件等等。这些都需要我们对Android工程的编译和打包有一个比较深入的理解,例如知道它的每一步都做了什么,...
当你要将多个应用发布到多个推广渠道的时候,你会针对每一个渠道为android应用添加相应的渠道号,这样工作量会很大。这时你会想:如果有某种...用编译脚本build.xml,2.java调用ant,3.bat批处理文件(也是调用ant)