使用ant编译之签名问题

DionysosLai([email protected]) 2015/1/5

使用ant编译,可以很大提高项目开发效率。目前,coco2dx官方所提倡的提高几十倍的编译速度,其实就是使用了ant技术。原理提前将引擎库编译成一个so文件,游戏编译时,只需要编译自己的代码即可,而不需要同时编译引擎代码。相比自己的代码与引擎代码量,二者相差了几十倍,因此速度会提高很多。同时另一方面,很多问题,在Eclipse上只会报错,而不能指出具体位置(相信,大家在写mk文件时,就遇到这个问题)。然而,使用了ant编译,问题具体位置将完完全全的显示出来。

当然使用ant编译也有不好的地方,就是每次都会重新编译代码,而不是改动过的代码,这样导致每次生成apk文件都需要1到2分钟,这取决于游戏代码量。

在cocos2dx引擎中,使用ant编译工程,是一项比较复杂的操作,因此打算分成几个部分,详细的将问题阐述清楚。作为第一篇关于ant编译问题,先阐述一个比较简单的话题:签名。这个话题的延伸,就是自动生成apk,自动给apk打签名了。

给apk签名,有两种,一种是手动签名,另一种是自动签名。

手动签名:

1.      生成apk

使用ant编译之签名问题使用ant编译,可以参考这篇pdf文件(http://download.csdn.net/detail/dionysos_lai/8333741)或者网上其他资料。大概命令类似如下:

call cd 工程文件夹\proj.android
callandroid update project -p .
call antclean
call antdebug
pause

这是,我写的一个自动编译脚本,双击运行即可,这样会自动生成一个debug版的apk(注意,debgu版apk,系统会自动给apk打上bebug签名,只能将

”call ant debug”改成”call ant release”才能生成一个未签名过的release版apk)。

2.       Apk签名

如何Apk签名,可以再网上找到相关资料,这里可以参考我自己写的一个脚本命令行:

call jarsigner -verbose -keystore key文件名字 -signedjarok/代签名apk名字 生成apk名字 key文件名字
pause

创建一个.bat文件,将文件放在待签名apk同一级目录下即可,双击运行,之后输入签名key文件的密码,就会在ok文件夹生成签好名的apk了。

这里签名会有一个问题出现:"java.util.zip.ZipException:invalid entry compressed size (expected
4308 but got 4432bytes)"。这个问题很多人在网上遇到过,在ant编译时,我也曾遇到过,网上的说法有很多,解决也一样。后来,分析问题,其实很简单,就是说apk大小出错,本来应该是4308字节,现在确实4432字节了,然后就报压缩出错问题。其实,之所以出现这个问题,是因为我们尝试使用debug版apk签名了,而debug版apk已经签过名了(这也是apk大小增大的原因)。因此我们只能输出release版apk,再次签名。

直接将”call ant debug”改成”call ant release”,双击运行脚本文件,会报这个如下错误;

(ps,这就是使用ant编译好处,问题出现位置很清楚),这是由于文件” custom_rules.xml”67行清清楚楚这样写着” <copyfile="${source.absolute.dir}/../bin/${ant.project.name}-debug.apk"tofile="${customapk.out}/${ant.project.name}.apk" />”我们要做的就是改成这样即可”<copy file="${source.absolute.dir}/../bin/${ant.project.name}-release.apk"tofile="${customapk.out}/${ant.project.name}.apk"
/>”

3.       验证签名

Apk签名验证,可使用以下命令行,相关资料可以参考:http://stackoverflow.com/questions/7104624/how-do-i-verify-that-an-android-apk-is-signed-with-a-release-certificate/7104680#7104680

calljarsigner -verify -verbose -certs 待验证apk名字

自动签名:

         相对于手动签名,自动签名可以省去手动给apk打上签名这一步骤,不过自动签名是只能是release版,debug版不存在这一步骤。

如何自动签名,其实在文件”ant.properties”中,已经写得很详细了:

# This file is used to override default values used bythe Ant build system.

#

# This file must be checked into Version Control Systems,as it is

# integral to the build system of your project.

# This file is only used by the Ant script.

# You can use this to override default values such as

#  ‘source.dir‘ forthe location of your java source folder and

#  ‘out.dir‘ forthe location of your output folder.

# You can also use it define how the release builds aresigned by declaring

# the following properties:

#  ‘key.store‘ forthe location of your
keystore and

#  ‘key.alias‘ forthe name of the key to use.

# The password will be askedduring the build when you use the ‘release‘ target.

根据其提示,在这个文件中添加如下几句即可:

key.store=E:/LogicGame/cocos2d-x-2.2.3/apk/key
key.alias=key
key.store.password=123456
key.alias.password=123456

注意,这里”key”是签名key,123456,是其密码。这里可能会有一个这样一个错误。

引起这个错误的原因,就是unix与window的格式问题,也就是将”/”,写错了”\”。

ok,关于ant签名差不多就到这里了,希望对大家有用。

时间: 2024-10-20 14:39:13

使用ant编译之签名问题的相关文章

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.

ANT编译Android Eclipse工程

将Android SDK的tools/和platform-tools/目录包含在可执行文件的搜索路径中.Windows下,将其添加到PATH环境变量中 切换到Android Eclipse项目目录下,并执行以下命令.Eclipse项目生成器模版不包含ant可用的build.xml.以下命令将生成build.xml文件.该命令只需要运行一次即可. android update project -p . 接下来编译项目.如果需要编译并签名为debug的.apk,请在同一目录下执行如下命令.该命令执行

[转] Ant 编译 Android 项目为 Apk 实战, 常见问题解决

补充,自行安装Ant, 配置ant环境变量, 在android 项目 根目录下使用 android update project 可以自动生成 build.xml 和 local.peoperties 文件 //------------------------------------------------------------------------------------------------------------------ 1.背景 项目进行到一定程度了,每次发布前,产品要求打包测

ant编译后用hadoop报Could not find or load main class

错误信息: [[email protected] HDFS_Java_API]$ hadoop HDFSJavaAPI.jar HDFSJavaAPIDemo Warning: $HADOOP_HOME is deprecated. Error: Could not find or load main class HDFSJavaAPI.jar 报错原因: 当前运行的 .class  文件不在 hadoop-env.sh文件中 解决办法: 在 hadoop-env.sh中配置HADOOP_CLA

使用ant编译项目技巧

ant编译时指定jdk的版本 系统的jdk版本是1.6,而项目使用的jdk版本是1.5,所以在编译时需要指定jdk的版本为1.5,可以使用下面的方法为javac 任务指定fork和executable,是用指定编译器编译,这个方法更灵活,您甚至可以指定非sun公司的java编译器.详见:6.5节 编译时忽略指定的java文件 在编译时可能有的包下面的java文件不需要编译,那么就可以使用这个用法,详见:6.5节 打包时忽略指定的class文件 在打包时可能有的class文件不想打入到包中,那么就

ANT编译打包&WIFI调试& adb shell常用命令

ANT编译打包 1:用ADT工具自带的打包:    1:切换到项目目录: 运行,android update project -p . android update project -p ./ --library ../com.example.plugin1.ifs 2:刷新:多了两个目录, 3:local.properties配置: sdk.dir=E:\\samy\\adt-huixin_x86-20140321\\sdk  key.store=./keystore/**** key.sto

ant编译时遇到的问题记录

1. 需要使用svnant,从SVN中获取源码 需要使用的扩展包:svnant-1.3.1.zip里所有的jar 下载地址:http://subclipse.tigris.org/files/documents/906/49042/svnant-1.3.1.zip build.xml中的写法 <!--定义SVN地址--> <property name="svnurl" value="http://xx/svn/projectName"/> &

Ant编译MapReduce程序

本文记录Ant编译MapReduce程序的过程. 程序使用<Hadoop MapReduce Cookbook>中的示例代码. 1.安装Ant Ant项目主页:http://ant.apache.org/ 下载二进制安装包,例如apache-ant-1.9.4-bin.tar.gz,上传到Hadoop集群环境上,解压即完成安装. [huser@master apache-ant-1.9.4]$ pwd /home/huser/hadoop/apache-ant-1.9.4 2.下载示例程序 下

Ubuntu环境下利用ant编译nutch2.x &amp; 配置nutch2.x

利用ant编译nutch2.x 详见:1.    http://blog.javachen.com/2014/05/20/nutch-intro/   2.    wiki.apache.org/nutch/Nutch2Tutorial 前提条件:配置ant(http://www.cnblogs.com/xxx0624/p/4172277.html) 1. 下载nutch(例如:我的是apache-nutch-2.2.1-src.tar.gz) 解压,重命名nutch文件夹(命名为nutch),