`
coolerbaosi
  • 浏览: 728762 次
文章分类
社区版块
存档分类
最新评论

Android 中的ant文件说明

 
阅读更多
Android本身是支持ant打包项目的,并且SDK中自带一个build.xml文件。
通过该文件,可以对文件进行编译、打包、安装等。并且支持多种方式打包,如debug或者release。
一般的,可以按照如下方法进行操作:


首先创建一个Android工程。
工程创建好后,需要为工程添加ant支持,即创建相应的build.xml文件。
这个文件不需要用户自己创建,只需要执行如下命令即可:
<sdk>/tools/androidupdateproject-p<project>-t<target>


其中:
sdk为sdk的安装目录,其下的tools/android是我们要使用的命令。
project为项目目录。
target为项目所使用的android的targetid,也就是项目对应的android的版本。


可以将sdk的tools目录添加到环境变量~/.bashrc文件中,重启后生效,以后可以直接使用命令了。
可以通过执行以下命令查看当前sdk中所包含的target以及相应id:
androidlisttargets


执行完androidupdateproject命令后,会在项目的根目录下生成相应的ant文件。
主要有build.xml、ant.properties、local.properties三个文件。
如果没有ant.properties文件,可以自己手动添加。


其中,build.xml文件是进行antbuild的主要文件,它引用了其它的文件。
在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文件的执行方法为:右键->RunAs->AntBuild。


如果是debug版的话,默认会使用debug方式签名。
如果是release版的话,需要指定相应的keystore以及私钥。
否则,最后只能生成一个没有签名的apk文件。


设定私钥库的方法是,在ant.properties文件中,添加如下内容:
key.store=<keystore>
key.alias=<key>
key.store.password=<keystorepwd>
key.alias.password=<keypwd>


其中:
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:
<targetname="-pre-build"depends="-ndk-build">
</target>
<targetname="-ndk-build">
<execexecutable="ndk-build"failonerror="true">
<argvalue="clean"/>
</exec>
<execexecutable="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->右键->RunAs->ExternalToolsConfigurations,
在右侧区域选中JRE标签页,可以看到对jre设定有三个选项:
RuninthesameJREastheworkspace使用与workspace相同版本的jre。
Executionenvironment根据相关环境选择一个jre版本。
SeparateJRE使用一个已经安装的jre的当前版本。

一般项目的jre都会设定为1.7以下的版本,所以建议选择第一个,使其与项目设定保持一致即可。




如何使用ant编译Android工程

很早就知道Android支持命令行方式创建和编译工程,但大多数情况下我们都是直接使用Eclipse+ADT的方式来处理的。

最近做的项目就是使用ant来编译的,之前也没研究过ant怎么样,所以一直不知道怎么用ant来编译Android工程。

今天在Gentoo下试了下,没有做任何设置ant就可以用了,应该是以前我不知不觉就安装好了。

安装ant

如果是在Windows下,需要到网站上去下载:http://ant.apache.org/bindownload.cgi

再设置好环境变量,这个就不说了。

使用android命令创建工程

ant编译需要依赖于build.xml文件,如果是用Eclipse生成的工程,是没有这个文件的。显然Google支持ant编译自然不会让我们去手动生成的文件了,她为我们准备了android命令:

输入android create project查看如何创建一个Android工程:

pjq@gentoo-pjq ~/android/workspace $ android create project
Error: The parameters --target, --path, --package, --activity must be defined for action 'create project'

Usage:
  android [global options] action [action options]

Global options:
  -v --verbose  Verbose mode: errors, warnings and informational messages are printed.
  -h --help     Help on a specific command.
  -s --silent   Silent mode: only errors are printed out.

Action "create project":
  Creates a new Android Project.
Options:
  -n --name     Project name
  -t --target   Target id of the new project [required]
  -p --path     Location path of new project [required]
  -k --package  Package name [required]
  -a --activity Activity name [required]

使用命令:

android create project -n AndroidAnt -t android-8 -p ./AndroidAnt -k net.impjq.androidant -a HelloAndroidAnt
Created project directory: ./AndroidAnt
Created directory /home/pjq/android/workspace/AndroidAnt/src/net/impjq/androidant
Added file ./AndroidAnt/src/net/impjq/androidant/HelloAndroidAnt.java
Created directory /home/pjq/android/workspace/AndroidAnt/res
Created directory /home/pjq/android/workspace/AndroidAnt/bin
Created directory /home/pjq/android/workspace/AndroidAnt/libs
Created directory /home/pjq/android/workspace/AndroidAnt/res/values
Added file ./AndroidAnt/res/values/strings.xml
Created directory /home/pjq/android/workspace/AndroidAnt/res/layout
Added file ./AndroidAnt/res/layout/main.xml
Created directory /home/pjq/android/workspace/AndroidAnt/res/drawable-hdpi
Created directory /home/pjq/android/workspace/AndroidAnt/res/drawable-mdpi
Created directory /home/pjq/android/workspace/AndroidAnt/res/drawable-ldpi
Added file ./AndroidAnt/AndroidManifest.xml
Added file ./AndroidAnt/build.xml

很明显目录结构和用Eclipse生成的一样,只是多了build.xml,这个就是为了在命令行用ant编译而准备的。

使用ant编译Android工程

编译这个新生成的工程

pjq@gentoo-pjq ~/android/workspace $ cd AndroidAnt/
pjq@gentoo-pjq ~/android/workspace/AndroidAnt $ ls
AndroidManifest.xml  build.xml           local.properties
bin                  default.properties  res
build.properties     libs                src
pjq@gentoo-pjq ~/android/workspace/AndroidAnt $ ant
Buildfile: /home/pjq/android/workspace/AndroidAnt/build.xml
    [setup] Android SDK Tools Revision 6
    [setup] Project Target: Android 2.2
    [setup] API level: 8
    [setup] WARNING: No minSdkVersion value set. Application will install on all Android versions.
    [setup] Importing rules file: platforms/android-8/ant/ant_rules_r2.xml

help:
     [echo] Android Ant Build. Available targets:
     [echo]    help:      Displays this help.
     [echo]    clean:     Removes output files created by other targets.
     [echo]    compile:   Compiles project's .java files into .class files.
     [echo]    debug:     Builds the application and signs it with a debug key.
     [echo]    release:   Builds the application. The generated apk file must be
     [echo]               signed before it is published.
     [echo]    install:   Installs/reinstalls the debug package onto a running
     [echo]               emulator or device.
     [echo]               If the application was previously installed, the
     [echo]               signatures must match.
     [echo]    uninstall: Uninstalls the application from a running emulator or
     [echo]               device.

BUILD SUCCESSFUL
Total time: 2 seconds

使用antdebug来生成用debug key签名的APK。

ant debug
pjq@gentoo-pjq ~/android/workspace/AndroidAnt $ ant debug
Buildfile: /home/pjq/android/workspace/AndroidAnt/build.xml
    [setup] Android SDK Tools Revision 6
    [setup] Project Target: Android 2.2
    [setup] API level: 8
    [setup] WARNING: No minSdkVersion value set. Application will install on all Android versions.
    [setup] Importing rules file: platforms/android-8/ant/ant_rules_r2.xml

-compile-tested-if-test:

-dirs:
     [echo] Creating output directories if needed...
    [mkdir] Created dir: /home/pjq/android/workspace/AndroidAnt/gen
    [mkdir] Created dir: /home/pjq/android/workspace/AndroidAnt/bin/classes

-resource-src:
     [echo] Generating R.java / Manifest.java from the resources...

-aidl:
     [echo] Compiling aidl files into Java classes...

compile:
    [javac] /home/pjq/android/android-sdk-linux_86/platforms/android-8/ant/ant_rules_r2.xml:255: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
    [javac] Compiling 2 source files to /home/pjq/android/workspace/AndroidAnt/bin/classes

-dex:
     [echo] Converting compiled files and external libraries into /home/pjq/android/workspace/AndroidAnt/bin/classes.dex...

-package-resources:
     [echo] Packaging resources
 [aaptexec] Creating full resource package...

-package-debug-sign:
[apkbuilder] Creating AndroidAnt-debug-unaligned.apk and signing it with a debug key...
[apkbuilder] Using keystore: /home/pjq/.android/debug.keystore

debug:
     [echo] Running zip align on final apk...
     [echo] Debug Package: /home/pjq/android/workspace/AndroidAnt/bin/AndroidAnt-debug.apk

BUILD SUCCESSFUL
Total time: 8 seconds



分享到:
评论

相关推荐

    Android代码-Ant-Multiple-Package

    文件说明:ant文件中 key.store=加密文件 key.alias=alias名称 key.store.password=加密密码 key.alias.password=alias密码 umeng_channels=baidu,google,umeng //渠道包,用逗号分隔 output.apk.dir=F:\...

    新版Android开发教程.rar

    o Apache Ant 1.6.5 or later for Linux and Mac, 1.7 or later for Windows o Not Not Not Not compatible with Gnu Compiler for Java (gcj) Note: Note: Note: Note: If JDK is already installed on your ...

    Android插件框架Android-Plugin-Framework.zip

    12、需要关注PluginTest工程的ant.properties文件和project.properties文件以及custom_rules.xml文件,插件使用宿主程序共享库,以及共享库R引用,和编译时排除的功能,都在这3个配置文件中体现 暂不支持的...

    疯狂Android讲义光盘第三部分(共三部分)

    本光盘是《疯狂Android讲义》一书的配书光盘,书中的代码按章、按节存放, 即第2章、第2节所使用的代码放在codes文件夹的02\2.2文件夹下,依此类推。 另外,书中每份源代码也给出与光盘源文件的对应关系,方便读者...

    疯狂android讲义光盘源码第一部分(全部三部分)

    本光盘是《疯狂Android讲义》一书的配书光盘,书中的代码按章、按节存放, 即第2章、第2节所使用的代码放在codes文件夹的02\2.2文件夹下,依此类推。 另外,书中每份源代码也给出与光盘源文件的对应关系,方便读者...

    疯狂Android讲义光盘第二部分(全三部分)

    本光盘是《疯狂Android讲义》一书的配书光盘,书中的代码按章、按节存放, 即第2章、第2节所使用的代码放在codes文件夹的02\2.2文件夹下,依此类推。 另外,书中每份源代码也给出与光盘源文件的对应关系,方便读者...

    ANPR:适用于Android的自动交通牌照识别器

    全国公共广播电台适用于Android的自动交通牌照识别器####说明基于OpenCV,SVM和Tesseract的Android车牌识别系统。 ####先决条件Android 2.3或更高版本西班牙语的培训文件[trained data file] [tessdata]。 建议使用V...

    Android-Batch-Pack:Android-Batch-Pack可以每次批量打包和修改umeng的频道标签

    Android-Batch-Pack 的介绍和使用说明 Android-Batch-Pack 是实现批量打包apk的工具,适用于包含了第三方library project的project,并且不影响project的代码混淆,每次打包自动修改用于统计的渠道标签(如友盟统计...

    ANE-GooglePlayServices:Adobe AIR ANE 项目 - 此示例说明了一个问题,但不起作用!

    如果您注释掉此文件中的 GooglePlayServicesUtils 引用,则此 Android ANE 将起作用: 该项目可以使用 SPK-GPS_Build 文件夹中的 ANT 脚本构建。 只需导航到该文件夹​​并运行“ant buildANE”。 要构建测试 GPS....

    实现android自动化测试部署与运行Shell脚本分享

    我的配置是linux 64, android4.2.2的sdk。 实现的细节都在代码注释里了,变量名以及echo的内容也是说明的一部分。 主流程为: 1.检测是否指定端口的模拟器已经运行,若有则关闭 2.创建模拟器 3.启动模拟器 4.用ant ...

    基于Android的电子拍卖系统(客户端源码+服务端源码+数据库+配置说明).zip

    2. 修改auction\WEB-INF路径下的applicationContext.xml文件, 将其中的数据库连接信息修改为你的数据库连接信息。 3. 进入auction\WEB-INF路径下,启动DOS或shell窗口,输入: ant compile -- 该命令用于编译应用...

    cw-advandroid:_高级Android开发的繁忙程序员指南_的源代码-android source code

    除非另有说明,否则此归档文件中的所有源代码均根据Apache 2.0许可进行许可。 顶级目录的名称大致对应于章节标题的缩写形式。 由于章节编号随每个发行版而变化,并且由于某些示例被多个章节使用,因此我不愿意将...

    android-tutorial-guided-tour

    在链接上的“包含在您的项目中”说明中使用点1。 Android Studio:使用最顶层文件夹中的build.gradle文件导入,确保使用Gradle包装器。 您可能可以单独导入该库,但是官方不支持此功能。 如果要将库添加到项目中,...

    conker-server:此应用程序是 Conker Android 应用程序的服务器。 此应用程序是布鲁内尔大学 CS2001 模块的一部分

    康克服务器此应用程序...v0.3 从构建构建说明要清理构建并运行应用程序: ant 要删除任何已编译的类和可运行的 jar 文件: ant clean 将 java 源代码编译成类(不干净): ant compile 将 java 源代码编译成类和可运行

    网狐荣耀版开发使用常见问题解答

    一、网狐荣耀版短信验证开发流程说明 现在的很多游戏,都有短信验证登录的功能,特别是国内比较火的网狐棋牌系统,有的甚至直接短信验证码为登录密码,这确实是一个好的思路,保证了密码不被盗。但是,短信验证怎么...

    ShowcaseView:来自 https 遗留分支的分支

    重要通知 我不再积极地在这个遗留分支上工作。 这是由于对 master 进行了更大的重写... 使用链接中“包含在您的项目中”说明中的第 1 点。 Android Studio:使用最顶层文件夹中的 build.gradle 文件导入,确保使用 Gr

    kivy-webview:p4a在vy中的webview

    用pip install python-for-android似乎是不行的,这里构造的环境使用ant的旧的打包 方式,我本人从github里面安装 使用的命令是: pip install git+ 这个成功后,环境不再使用ant来build apk,代替的是gradle,实测发现apk...

Global site tag (gtag.js) - Google Analytics