使用Ant打包Android应用具体解释

  计划写个完整的使用Ant打包Android应用的系列文章。三篇文章。首篇具体介绍採用Ant打包Android应用的流程。列出部分定制问题及其解决方法,第二篇介绍我理解的Ant打包的思路与主要的概念和使用,最后一篇描写叙述apk包的生成过程。

实现的环境:

操作系统:ubuntu 64bit 14.04

Android SDK Build Tools:22.0.1

Android SDK Tools:24.3.3

Ant:1.9.4

ProGuard:5.2.1

JDK:1.7

一、简单应用出包流程

  这里的出包流程包含编译、代码混淆、apk签名。

对于简单的Android应用。简单的几步操作就能完毕:

1.生成Ant编译须要的build.xml

在SDK文件夹的tools下,调用android update project生成,详细命令的使用方法能够查看參考1。比如:切换到你的工程文件夹

android update project --name 自己起的工程名 -p .

-p參数后面的点是表示当前文件夹

在project文件夹下就会生成Ant编译须要的build.xml,直接执行ant debug。就可以完毕编译,并在bin文件夹下生成debug版本号的apk包。须要注意的几个问题是:

(1)自己主动生成的build.xml生成了几个跟Android相关的target呢:能够通过直接输入ant来查看help说明

(2)遇到BUILD FAILED怎样解决:能够查看BUILD FAILED上面的log看运行到什么地方,还有看提示在build.xml的哪一行出现故障。这里的build.xml是指在sdk/tools/ant下的,比如:

[aapt] invalid resource directory name: project文件夹/bin/res crunch

BUILD FAILED
sdk/tools/ant/build.xml:649: The following error occurred while executing this line:
build.xml:694:null returned: 1

一般看到res crunch,应该就是你在eclipse中project自己主动编译的文件与ant生成文件冲突。仅仅要关掉eclipse的自己主动编译。clean下project又一次跑ant就可以。

(3)能够留心看下project.properties和local.properties

2.加入代码混淆

在工程的project.properties文件里有凝视说明怎样打开代码混淆

#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

去除#号就可以,同一时候能够在proguard-project.txt添加你须要特殊处理的配置

改动后,再运行ant release,你会在输出中看到

-obfuscate:
[mkdir] Created dir:project文件夹/bin/proguard
[jar] Building jar: project文件夹/bin/proguard/original.jar
[proguard] ProGuard, version 5.2.1
...

能够看到我用的proguard版本号。可是用ant debug是没有proguard,由于仅仅有release版本号才须要混淆,具体原因兴许文章会具体讲述。混淆后的mapping文件在bin文件夹下。

注意的问题:project的AndroidManifest.xml中假设配置了android:debuggable=true,那么即使ant release也不会混淆代码

3.签名

首先给apk签名须要keystore。详细的生成此处不细讲,简单的说在eclipse中选则project,右键android tools -> export android application 中有生成选项

其次是在project文件夹下新建ant.properties文件,里面配置你的签名信息

比如:

key.store=kestore文件的路径

key.store.password=密码

key.alias.password=密码

key.alias=别名

此时再运行ant release,在bin文件夹下可生成“project名-release.apk”。你终于要的release版本号的apk

到此,简单androidproject的的ant编译打包完毕,很方便。

二、加入定制化

1.增加so库

Android应用的Ant编译默认是不会编译jniproject的,它仅仅会处理libs中的库文件。

假设你的libs中刚好有编译好的so,那打包好的apk似乎能正常执行。在配置好的jniproject,仅仅要执行ndk的ndk-build就可以完毕so的编译。因此,仅仅要在build.xml同文件夹中加入custom_rules.xml文件,内容例如以下:

<?xml version="1.0" encoding="UTF-8"?>
<project name="工程名" default="help">
<target name="-pre-compile">
    <echo >ndk build.............................</echo>
    <exec executable="${ndk.dir}/ndk-build" >
    </exec>
</target>

</project>

在同文件夹下的local.properties中添加一行。指定你的ndk文件夹

ndk.dir=ndk路径

再次运行ant release,查看你的so库是否已生成

假设你的jniproject是作为库project存在,方法是一样的。

主project依赖你的库project,在库project中也生成build.xml,然后依照上面的方法操作就可以。

2.调用隐藏api,增加android.jar

不少project是基于Android原生代码改动而来。或者就是想调用系统隐藏的部分api,就会用到别人编译好的android.jar,或者framework.jar等其他什么名字的库文件,并且会要求载入的顺序在你选择的android编译版本号之前。

在eclipse的Java Build Path->Libraries中调整其载入顺序,那么ant编译怎么改动呢?还是利用前面编写的custom_rules.xml,内容例如以下:

<?xml version="1.0" encoding="UTF-8"?>
<project name="hooktest" default="help">
<property name="project.target.android.jar" value="${sdk.dir}/platforms/${target}/android.jar" />
<target name="-pre-compile">

    <echo >set project target class path.............................</echo>

    <path id="project.target.class.path">
    <pathelement location="framework.jar"/>
    <pathelement location="${project.target.android.jar}"/>
    </path>

    <property name="my.project.target.class.path" refid="project.target.class.path" />
    <echo message="project.target.class.path:${my.project.target.class.path}" />

</target>
</project>

3.一个project中多源代码文件夹

假设一个project中设置了多个源代码文件夹,不太合适的方法就是先拷贝其他的源代码文件夹到默认的src下,在编译完毕后再删除。事实上顺便看看文件拷贝和删除,在多源代码文件夹的project中也建立custom_rules.xml,主要内容例如以下:

<target name="-pre-build">
    <echo >copy file.............................</echo>
    <copy todir="${source.absolute.dir}">

     <fileset dir="其他源代码文件夹">
        <include name="**/*.java" />
        <include name="**/*.aidl" />
    </fileset>
    </copy>
</target>

<target name="src-clean" >
    <echo >delete file.............................</echo>
    <delete dir="${source.absolute.dir}/拷贝的源代码文件夹" />
</target>

<target name="-post-build" depends="src-clean">
</target>
<target name="-pre-clean" depends="src-clean">
</target>

上述代码在运行ant clean时也会运行删除拷贝的源代码操作。而在编译前先拷贝源代码。包含aidl文件。之后在打包完毕后删除拷贝的源代码文件夹。

一个project中的源代码尽量就弄在一个文件夹里吧。

其他问题还有如库project间的资源引用,假设直接使用默认的R文件是没有问题的,可是要是在eclipse中利用build Java Build Path->project加入了子project,而且还用了当中的R文件来应用资源,那么ant打包就还得再继续折腾

结尾:

这里仅给出了使用Ant打包Android应用的基本过程和可能问题的解决方法,至于ant的使用和打包原理既能够看參考文章。也能够看兴许的补充文章。

參考:

1.android命令具体说明http://developer.android.com/tools/help/android.html

2.ant參考手冊https://ant.apache.org/manual/

3.ant打包apk具体的过程可阅读sdk/tools/ant/build.xml文件

时间: 2024-08-26 09:22:23

使用Ant打包Android应用具体解释的相关文章

使用Ant打包Android应用具体解释——Ant使用解析

上篇<使用Ant打包Android应用具体解释>描写叙述了使用Ant打包的流程,但非常多步骤并没有说明如此做的原因,本篇将从Ant方面来理解,下一篇从APK生成的流程来说明. APK包的生成是一系列操作的结果,而Ant则是将这一系列操作流程化.提供出定制化的接口,以及可配置的參数供改动,而这些都是通过指定的构建文件来实现. 我们就从Ant的打包流程来理解Ant的一些基本使用方法. 当在命令行中运行ant.默认会去解析当前文件夹的build.xml作为构建文件.以下是个删除部分注视的版本号: &

使用ANT打包Android应用

大家好,今天来分享一下如何使用ANT打包Android应用. 通常我们习惯用eclipse来开发Android程序,它会自动帮我们打包当前的应用程序.如果在Navigator视图下,我们可以看到以下几个文件: 在上图中,com包放置的是我们的class文件,classes.dex是class文件经过转换后的可以在dalvik上跑的精简类文件,resources.ap_是经过打包的资源文件,ant.apk就是最终的打包文件. 使用ANT来对应用打包,一般会经过以下几个步骤: 1.用aapt命令生成

使用Ant打包Android应用详解——Ant使用解析

上篇<使用Ant打包Android应用详解>描述了使用Ant打包的流程,但很多步骤并没有说明如此做的原因,本篇将从Ant方面来理解,下一篇从APK生成的流程来说明. APK包的生成是一系列操作的结果,而Ant则是将这一系列操作流程化,提供出定制化的接口,以及可配置的参数供修改,而这些都是通过指定的构建文件来实现.我们就从Ant的打包流程来理解Ant的一些基本用法.当在命令行中执行ant,默认会去解析当前目录的build.xml作为构建文件.下面是个删除部分注视的版本: <project

使用Ant打包Android应用详解

计划写个完整的使用Ant打包Android应用的系列文章,三篇文章.首篇详细介绍采用Ant打包Android应用的流程,列出部分定制问题及其解决方法,第二篇介绍我理解的Ant打包的思路与基本的概念和使用,最后一篇描述apk包的生成过程. 实现的环境: 操作系统:ubuntu 64bit 14.04 Android SDK Build Tools:22.0.1 Android SDK Tools:24.3.3 Ant:1.9.4 ProGuard:5.2.1 JDK:1.7 一.简单应用出包流程

Ant打包Android代码生成apk文件

可參考下面,实现一套代码不同渠道的打包 http://blog.csdn.net/liuhe688/article/details/6679879 http://cnn237111.blog.51cto.com/2359144/1130502 http://www.cnblogs.com/hoojo/p/ant_increment_svn_diff_diffsummarize.html http://www.eoeandroid.com/thread-323111-1-1.html http:/

使用Ant批量打包Android应用完全指南

本文章由Socks完成,博客地址:http://blog.csdn.net/zhaokaiqiang1992 转载请说明! 折腾了一下午,百度了一下午,终于实现了使用Ant对Android应用的批量打包,也算是了却了我的一桩心事.虽然网上的这部分教程也有,但是感觉写的不是详细.更为重要的是,各种方法之间的差异比较大,对于新手来说,各种方法之间的选择是极为痛苦的,一个方法一个方法的去实验,是很浪费时间的.因此,我想给大家提供一套完整的,详细的Ant打包Android应用的教程,方便大家的学习和以后

【Android开发经验】使用Ant批量打包Android应用全然指南

本文章由Socks完毕.博客地址:http://blog.csdn.net/zhaokaiqiang1992 转载请说明. 折腾了一下午.百度了一下午,最终实现了使用Ant对Android应用的批量打包,也算是了却了我的一桩心事.尽管网上的这部分教程也有,可是感觉写的不是具体. 更为重要的是.各种方法之间的差异比較大.对于新手来说.各种方法之间的选择是极为痛苦的,一个方法一个方法的去实验,是非常浪费时间的. 因此,我想给大家提供一套完整的,具体的Ant打包Android应用的教程,方便大家的学习

理解使用Gradle编译打包Android apk

本篇的目的:理解Gradle构建过程,解读Android Gradle插件的配置 阅读本文一定是要使用过Gradle生成apk,文中不会讲如何安装运行Gradle,如有需要可先看文末的参考文章. APK包是一个ZIP压缩包,从Java源代码.资源文件到生成这个APK,经过了编译打包一系列特定的过程,这个过程可以参看<使用Ant打包Android应用--apk生成过程>,也可以从自己的旧版SDK文档(/docs/tools/building/index.html)中找到.而这一系列特定的过程,重

Ant编译打包Android工程流程

一.Ant编译打包android工程步骤 二.Ant apk签名 1.keystore签名    定义自己的签名文件 生成keystore文件:keytool -genkey -alias android.keystore -keyalg RSA - validity 20000 -keystore android.keystore 对应的java命令:jarsigner -verbose -keystore android.keystore -signedjar android_signed.