ant自动打包apk

FREERTOS+LWIP+IAP实现TCP、HTTP、网页访问并固件升级、更新配置 (三)lwip实现httpd服务并在web访问 在前两篇文章中配置freeRTOS和,并实现了TCP、UDP的通信协议,现在终于轮到重头戏lwip的httpd服务,LWIP官方例程中是有很多自带的网页的,但是远远不够满足实际项目的使用需求,因此我也是踩了很多坑,从前端网页制作,到网络通信的实现,到后端数据处理,从头开始学起,也是学习到了很多没接触过的东西,本章将搭建LWIP的HTTP服务使得浏览器可以访问WEB。 阅读详情

公司的游戏要开始定期发布安卓版本,各种渠道sdk版本有十个左右,将来也有增长的趋势,觉得用eclipse打包的话效率太低,就研究了下使用ant自动打包签名apk。

其实eclipse打包无非也是使用android sdk以及jdk的一些命令,具体如下几个步骤:

1. 生成应用的R.java

2. 编译所有java文件为class文件

3. 打包class文件和jar包为class.dex

4. 打包assets和res资源为压缩包

5. 组合class.dex和资源压缩包生成未签名的apk

6. 签名apk

7. 字节对齐(优化,可以不需要)

每个步骤对应的命令和ant脚本如下:

1. 生成应用的R.java

<exec executable="${aapt}" failonerror="true">  
       
<arg value="package" />  
        <arg value="-m" />  
        <arg value="-J" />  
        <arg value="${outdir-r}" />  
        <arg value="-M" />  
        <arg value="AndroidManifest.xml" />  
        <arg value="-S" />  
        <arg value="${resource-dir}" />  
<arg value="-I" />  
         <arg value="${android-jar}" />  
        </exec> 
   


2. 编译所有java文件为class文件

        <echo>Compiling aidl files into Java classes...</echo>  
        <apply executable="${aidl}" failonerror="true">  
            <arg value="-p${android-framework}" />  
            <arg value="-I${srcdir}" />  
            <fileset dir="${srcdir}">  
            <include name="**/*.aidl" />  
            </fileset>  
        </apply>  

<!-- Compile this project's .java files into .class files. -->     
        <javac encoding="UTF-8" target="1.5" source="1.5" includeAntRuntime="false" extdirs="" srcdir="." destdir="${outdir-classes}" bootclasspath="${android-jar}">      <classpath>  
            <fileset dir="${external-libs}" includes="*.jar" />  
            </classpath>  
        </javac>  

代码中或者res/string/values.xml中有中文的话,javac的encoding命令最好制定UTF-8


3. 打包class文件和jar包为class.dex

<apply executable="${dx}" failonerror="true" parallel="true">  
            <arg value="--dex" />  
    <arg value="--output=${intermediate-dex-ospath}" />  
            <arg path="${outdir-classes-ospath}" />  
            <fileset dir="${external-libs}" includes="*.jar" /> 
        </apply>  

4. 打包assets和res资源为压缩包

<exec executable="${aapt}" failonerror="true">  
            <arg value="package" />  
            <arg value="-f" />  
            <arg value="-M" />  
            <arg value="AndroidManifest.xml" />  
            <arg value="-S" />  
            <arg value="${resource-dir}" />  
            <arg value="-A" />  
            <arg value="${asset-dir}" />  
            <arg value="-I" />  
            <arg value="${android-jar}" />  
            <arg value="-F" />  
            <arg value="${resources-package}" />  
        </exec>  

5. 组合class.dex和资源压缩包生成未签名的apk

<exec executable="${apk-builder}" failonerror="true">  
        <arg value="${out-unsigned-package-ospath}" />  
        <arg value="-u" />  
        <arg value="-z" />  
        <arg value="${resources-package-ospath}" />  
        <arg value="-f" />  
        <arg value="${intermediate-dex-ospath}" />  
        <arg value="-rf" />  
        <arg value="${srcdir-ospath}" />    
<arg value="-nf" />  
        <arg value="${external-libs-ospath}" />  
        </exec> 
    

如果有c++生成的.so文件,需要-nf文件制定.so文件路径


6. 签名apk

<exec executable="${jarsigner}" failonerror="true">              
<arg value="-digestalg" />
<arg value="SHA1" />
<arg value="-sigalg" />
<arg value="MD5withRSA" />
         <arg value="-keystore" />  
         <arg value="android.keystore"/> 
         <arg value="-storepass" />  
<arg value="${local.key.store.password}" />
         <arg value="-signedjar" />
         <arg value="${out-signed-package-ospath}" />  
         <arg value="${out-unsigned-package-ospath}" />
         <arg value="${local.key.alias}" />  
        </exec>  
  

如果用的是jdk1.6可以不需要-digestalg SHA1 -sigalg MD5withRSA参数,因为默认就是这种。

jdk1.7以上必须加上-digestalg SHA1 -sigalg MD5withRSA参数,不然签名会失败


7. 字节对齐(优化,可以不需要)

<exec executable="${zipalign}" failonerror="true">              
            <arg value="-f" />  
            <arg value="4" />  
            <arg value="${out-signed-package-ospath}" />  
            <arg value="${zipalign-package-ospath}" />  
        </exec>  

有引用外部android project的打包方式略有不同,外部lib project如果只需要引用jar包的话,可以直接引用对应jar包就行了,没啥太大区别。如果外部lib project的res目录下有资源的话,需要稍作修改,具体修改的几个步骤如下:

1. 生成应用的R.java

<exec executable="${aapt}" failonerror="true">  
         <arg value="package" />  
         <arg value="-m" />  
<arg value="--auto-add-overlay" />  
         <arg value="-J" />  
         <arg value="${outdir-r}" />  
         <arg value="-M" />  
         <arg value="AndroidManifest.xml" />  
         <arg value="-S" />  
         <arg value="${resource-dir}" />  
<arg value="-S" />  
         <arg value="${extrasdk.dir}/${resource-dir}" />
 
         <arg value="-I" />  
         <arg value="${android-jar}" />  
        </exec> 
        <exec executable="${aapt}" failonerror="true">  
         <arg value="package" />  
         <arg value="-m" />  
<arg value="--auto-add-overlay" />  
         <arg value="-J" />  
         <arg value="${outdir-r}" />              
<arg value="-M" />  
         <arg value="${extrasdk.dir}/AndroidManifest.xml" />    
<arg value="-S" />  
         <arg value="${resource-dir}" />  
<arg value="-S" />  
         <arg value="${extrasdk.dir}/${resource-dir}" />  
         <arg value="-I" />  
         <arg value="${android-jar}" />  
        </exec>
 

2. 编译所有java文件为class文件

<echo>Compiling aidl files into Java classes...</echo>  
        <apply executable="${aidl}" failonerror="true">  
            <arg value="-p${android-framework}" />  
            <arg value="-I${srcdir}" />  
            <fileset dir="${srcdir}">  
            <include name="**/*.aidl" />  
            </fileset>  
        </apply>  

<!-- Compile this project's .java files into .class files. -->     
        <javac encoding="UTF-8" target="1.5" source="1.5" includeAntRuntime="false" extdirs="" srcdir="." destdir="${outdir-classes}" bootclasspath="${android-jar}">      <classpath>  
            <fileset dir="${external-libs}" includes="*.jar" />
 
<fileset dir="${extrasdk.dir}/libs" includes="*.jar" />
            </classpath>  
        </javac>  

3. 打包class文件和jar包为class.dex

<apply executable="${dx}" failonerror="true" parallel="true">  
            <arg value="--dex" />  
    <arg value="--output=${intermediate-dex-ospath}" />  
            <arg path="${outdir-classes-ospath}" />  
            <fileset dir="${external-libs}" includes="*.jar" /> 

<fileset dir="${extrasdk.dir}/libs" includes="*.jar" /> 

        </apply>  

4. 打包assets和res资源为压缩包

<exec executable="${aapt}" failonerror="true">  
            <arg value="package" />  
            <arg value="-f" />

<arg value="--auto-add-overlay" />  
            <arg value="-M" />  
            <arg value="AndroidManifest.xml" />  
            <arg value="-S" />  
            <arg value="${resource-dir}" />

<arg value="-S" />  
        <arg value="${extrasdk.dir}/${resource-dir}" />  

            <arg value="-A" />  
            <arg value="${asset-dir}" />  
            <arg value="-I" />  
            <arg value="${android-jar}" />  
            <arg value="-F" />  
            <arg value="${resources-package}" />  
        </exec>  
 

其他步骤一致,基本思路就是打包资源时需要打包进外链工程的res下资源,编译时引用外链工程的jar包。外链工程assets下面如果有资源的话需要手动拷贝至项目工程assets下。


一些会遇到问题和解决方式:

1. 签名不成功,如果用的是jdk1.7及以上的话, jarsigner签名时需要带上-digestalg SHA1 -sigalg MD5withRSA参数,默认jdk1.7使用的加密方式不是这种,会签名后导致apk运行不成功。

2. 为了打包脚本在各个机器上都能运行成功,相关工具路径可以从windows环境变量获取,这样不用手动修改各个机器的工具路径,方便打包。

3. jar包中有assets资源或者res资源的,需要手动拷贝至项目目录,不然脚本打包无法将这些资源打包进最终apk。



UR机械臂正逆运动学解析:从DH参数到8组解的完整求解策略 本文深入解析UR机械臂的正逆运动学求解策略,从DH参数原理到完整的8组解求解方法。详细介绍了正运动学的坐标变换过程,以及逆运动学中Atan2函数和三角恒等变换的应用,并揭示了8组解的产生机制。通过实际案例和调试技巧,帮助工程师掌握UR机械臂运动学求解的核心技术。 阅读详情

相关推荐

ant自动打包完整例子

ant自动打包流程: 1.生成keystore, 签名时要用到. 可参考http://www.cnblogs.com/feisky/archive/2010/01/17/1650076.html 2.更改localproperties中的sdk.dir, 为你机器上环境的安装路径 3.更改ant下的路径, 可参考README.txt文件 5.在testant下直接运行ant即可生成apk.

ant命令行打包android apk之图文从原理角度完全详解android打包过程(打包系列教程之一)

工作也有一段时间了,刚来到公司时,说起来惭愧,打包根本不怎么会,然后呢,各种原因,管理svn和打包的各类工作都必须要由我来做了,之前的工程师留下的ant打包工具的打包速度,我实在忍无可忍了!太慢了!一个包8分钟,搞毛!没办法,自己只能去研究学习,研究了好多大牛的博客后,对打包的整体过程我也终于弄明白了,不容易啊!因此也想在这里分享给大家,为了大家能比较清晰的弄明白android打包的过程与方法,

zejian的博客 1万+

使用ant编译、签名、优化打包apk文件

使用ant编译、签名、优化打包apk文件 附件为一个build.properties文件和一个build.xml文件。 执行的前提是需要配置好ANT_HOME、ANDROID_HOME、JAVA_HOME环境变量。

Android批量打包,利用Ant打包

<br />为了放不同内容的漫画到Android Market上,但是Android Market需要每个应用的不要不同的包名,所以就需要批量打包了;<br />流程差不多是这样的:<br />1.给编辑人员图形界面操作资源;<br />2.利用Ant处理相应的资源;<br />3.利用Ant打包;<br />4.以用Antapk安装到模拟器,看是否正常运行;<br /> <br />这里主要写利用Ant打包apk文件,弄了我好一阵,写下来为自己备忘,也希望能帮助到刚好在处理相关的朋友;<br /> <b

xiexie777的专栏 6064

使用Ant打包Apk

当我们在Eclipse中对项目Run As Android Application的时候,会在bin文件夹下生成apk及其他一些文件,至于为什么生成这些文件开始我也不明白,查了相关资料才知道原来Android项目在Eclipse中是通过Ant进行构建的。学习Ant踩了很多坑,总结下来以后方便查看,也希望帮助更多的人。欢迎评论交流哦!1、下载Ant并配置环境变量Ant下载地址:http://ant.a

MAGIC 2001

ant的build.xml构建自动打包android apk 完全详解(打包系列教程之二)

通过上一篇文章内容的学习,我们基本已经明白了android打包签名apk的主要操作与流程,那么这一篇文章我们就将上一篇文章的打包内容转化成ant的build.xml文件进行自动打包,这样可以避免我们上一篇文章的敲打命令行的繁琐操作,从而让我们离自动化操作更近一步(建议先了解一下ant的基本用法,可以看这篇文章:http://blog.csdn.net/jason0539/article/deta

zejian的博客 1万+

ant批量打包android_apk(一步一艰辛)

首先声明,android开发小白一枚,一直保持成长的“猩猩”,ant自己也不是很懂,扒啦了网上很多资料才实现了android使用ant的批量打包工作(大神勿笑,我很羞涩,我很腼腆);言归正传: 1.准备工作。 ant的下载,配置(为实现自动批量打包,就要使用for循环,ant不支持for,就要引入ant-contrib-1.0b3.jar,让ant能使用foreach) an

qq_21945825的博客 483

Android ant自动打包APK

这有篇帖子详细介绍了ant打包:http://www.eoeandroid.com/thread-557178-1-1.html    一、       到apache官网下载apache-ant,截止2014年12月10日最新版本是1.9.4. 下载地址:http://ant.apache.org/ file:///C:/Users/xinyuli/AppData/Local/Temp

1009

Android 自动编译、打包生成apk文件 2 - 使用原生Ant方式

上次使用命令行生成apk文件《Android 命令行编译、打包生成apk文件》,学习命令行生成的目的是为了编写ant打下基础。 一、 ant环境 下载ant包,配置环境变量 二、ant编译Android项目 1. 生成R文件 2. Java代码生成class文件 3. class文件生成dex文件 4. 打包资源 5. 生成apk 6.

Android 1万+

Android 自动编译、打包生成apk文件 3 - 使用SDK Ant方式

相关文章列表: 《Android 自动编译、打包生成apk文件 1 - 命令行方式》 《Android 自动编译、打包生成apk文件 2 - 使用原生Ant方式》 《Android 自动编译、打包生成apk文件 3 - 使用SDK Ant方式》 (当前文章)     之前第一篇和第二篇分别是都是完全自己手写代码,自己测试并执行所有命令行命令,并且把所有命令都用翻译成an

Android 1万+

ant入门 -自动打包apk(备忘)

webapp被炒得很热,所以这两天看了一下ant自动apk打包,在此做一下备忘 一、配置好android脚本编译app的环境 **- 1、 下载jdk 1.6版** 安装配置好jdk 详见网上教程 **- 2、 下载android-sdk** (链接:http://developer.android.com/sdk/index.html  DOWNLOAD

SongBaoHeng的专栏 669

android eclipse ant 编译java,Eclipse下配置Ant脚本并自动打包带签名的Android apk

eclipse虽然用的比较少,但是在一些古老的项目上还会用到滴,其中最麻烦的事情就是打带签名包的问题,不太方便,下面通过本文给大家记录下配置ant自动打包带签名apk的过程,作为备份。(PC环境为MAC)1,第一步得安ant,下载对应安装包,解压后配置环境变量:export ANT_HOME="/Users/yanzi/work/apache-ant-1.9.4"export PATH=${PA...

weixin_42202605的博客 163

ant打包apk文件

ant打包android工程,手动打包apk文件

Ubuntu-Linux环境下通过命令搭建android环境 通多ant脚本自动打包apk

经过几天的试错!终于完成了在Ubuntu 环境下an自动化脚本打包apk。中间遇到各种坑。从最初开始吧!http://blog.csdn.net/xiaolei05/article/details/16872011 这是我接触的第一篇对我帮助很大的博客文章。里面详细的介绍了Ubuntu下安装ant安装java jdk.我当时安装的是jdk8. 一.安装jdk8 http://ubuntuhand

莫爷博客 3147

使用Gradle与Ant实现多个apk自动打包

使用Gradle与Ant实现不同的apk打包 说下应用场景: 公司有这样的需求:对于同一份代码,需要生成N多个不同的Apk,包括应用图标不同,启动图不同,包名不同等,而且后续业务发展,可能这些Apk的数量会越来越多,如果我们打包一个就修改一下包名,替换下图片,那这样就会显得非常的麻烦,而且公司也没有多余的人力来做这个,所以就想到了自动打包。早就想写篇博客总结下,一直拖到现在。如果你的公司也有类

dhhuanghui的博客 1135

Ant打包Android代码生成apk文件

1、配置ant环境 2、生成build.xml 可以使用android sdk/tools下的android.bat来自动生成build.xml文件。 进入需要打包的项目根目录,执行 android update project -p path 会生成一个build.xml和local.properties文件。 2、用ant打包 有两种形式的打包:debug和release 1)

心无所属的专栏 1589

Ant打包Apk(上)

本来想着昨天晚上整理一下笔记把这篇博客给发布去,没想到昨晚突然接到局方的电话说项目了Bug,因此昨天晚上回到家连夜改Bug,改完Bug已经接近凌晨1点。。。。。。。估计所有的程序猿都遇到过类似的情况,没办法,客户是上帝。好了,废话不多讲。     首先说一下,利用Ant打包Android Apk存在两种方式,这篇博客先来介绍一下最简单的一种打包方式,这种方式需要依赖Android SDK。

lzy_tinyjoy 1026

Ant打包APK

除了使用IDE将android工程打包生成APK之外,我们也可以使用Ant对android工程进行打包

ximigo225的专栏 757

ant使用总结(一):使用ant自动打包apk

配置ant环境 (1)下载ant 下载地址一:http://mirrors.cnnic.cn/apache//ant/binaries/apache-ant-1.9.4-bin.zip 下载地址二:http://pan.baidu.com/s/1gdnc98n (2)解压ant,并把bin目录路径配置到系统path变量中 在命令行窗口中能执行ant命令表示配置成功 更新工程配置 (1)打开命令行窗口,执行如下命令: SDK根目录\tools\android update project --n

4305

CanLinProSW调试软件

CanLinProSW调试软件

上一篇: 使用Visual Leak Detector(VLD)检测内存泄漏
下一篇: 游戏资源更新设计
code_monkey
博客等级 码龄19年 3粉丝 39原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值