博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ant android 打包签名和渠道
阅读量:5751 次
发布时间:2019-06-18

本文共 3426 字,大约阅读时间需要 11 分钟。

hot3.png

1.Ant 安装:

     ant的安装比较简单,下载之后将其解压到某个目录然后配置环境变量(新建ANT_HOME环境变量,值为ant所在的目录,然后将ANT_HOME/bin添加到path中)

2.对已存在的Android项目提供Ant支持

1)没引用第三方类库,在项目根目录下输入:

android update project --name test -p ./

2)如果项目只是引用了第三方jar包,只要将jar包放在libs文件夹下就ok了,ant会在编译打包过程中会自动将第三方jar加进去的。

3)当我们的android 项目参考了其他library项目,首先要在library的根目录下输入:
android update lib-project -p ./

然后在工程的根目录下输入

android update project -p . -s --target android-14

其中-s:subprojects

3.编译打包项目:

1)测试包

ant debug : 生成一个测试版apk,默认使用 debug key 进行签名,生成的apk(your_project_name-debug.apk)在bin目录下。

2)未签名包

ant release : 生成一个未签名和未aligned的apk包,生成的apk(your_project_name-release-unsigned.apk和your_project_name-release-unaligned.apk)在bin目录下

3)签名包

在项目的根目录下建一个ant.properties文件,输入如下内容,其中keystore密码和alias密码可以不指定(防泄漏),那么在命令执行的过程中会要求你输入。

#keystore的路径,必须使用正斜杠 

key.store=test.keystore
#keystore的密码 
#key.store.password=***** 
#别名 
key.alias=test
#alias密码 
#key.alias.password=******      

在项目根目录下运行 ant release 命令就会帮你生成一个经过签名和aligned的apk,生成的apk(your_project_name-release.apk)在bin目录下

4)渠道包

实现批量循环打包需要一个类似于for循环的功能,在Ant的核心包里没有相关的For循环的Task,即不支持for循环,但是ant支持第三方扩展包,以支持更多的其他功能。

于是我们要下载相应的支持for循环的扩展包。可以使用开源的Ant-contrib包。下载地址:  。下载后的解压得到的jar(ant-contrib-1.0b3.jar或者其他版本)文件放到ant的lib目录。

(1)首先在ant.properties文件中增加属性 market_channels (渠道列表,以逗号分割),version(应用程序版本名)

#渠道市场列表  

market_channels=360,wandoujia,baidu  

#版本号  

version=1.5.1

(2)增加custom_rules.xml文件到项目根目录或者将<project></project>中的代码添加到build.xml中

<?xml version="1.0" encoding="UTF-8"?>

<project name="custom_rules" >
 <!-- 渠道包打包脚本  ant deploy-->
 
 <taskdef resource="net/sf/antcontrib/antcontrib.properties">
  <classpath>
   <pathelement location="lib/ant-contrib-1.0b3.jar"/>
  </classpath>
 </taskdef>
 
 <target name="deploy">
    <foreach target="modify_manifest" list="${market_channels}" param="channel" delimiter=",">
    </foreach>
 </target>
 
 <target name="modify_manifest">
  <replaceregexp flags="g" byline="false">
   <!-- 匹配的内容是 android:value="*****" android:name="UMENG_CHANNEL" -->
   <regexp pattern='android:value="(.*)" android:name="UMENG_CHANNEL"' />
   <!-- 匹配之后将其替换为 android:value="渠道名" android:name="UMENG_CHANNEL" -->
   <substitution expression='android:value="${channel}" android:name="UMENG_CHANNEL"' /> 
   <!-- 正则表达式需要匹配的文件为AndroidManifest.xml -->
   <fileset dir="" includes="AndroidManifest.xml" />
  </replaceregexp>
  <property name="out.release.file" location="${out.absolute.dir}/${ant.project.name}_${channel}.apk" />
  <!--包 -->
  <antcall target="release" />
  <!--输出渠道包到bin/out目录下 -->
  <copy tofile="${out.absolute.dir}/out/${ant.project.name}v${version}-${channel}.apk" file="bin/${ant.project.name}-release.apk"/>
 </target>

</project>

在项目根目录下运行 ant deploy 命令就会帮你各个渠道的签名包了

,在bin目录的out目录下。

4.过程中的报错

1)

D:\Program Files\android-sdk-windows\tools\ant\build.xml:1147: Keystore was tampered with, or password was incorrect:Password verification failed

D:\Program Files\android-sdk-windows\tools\ant\build.xml:1147: Signing key test not found

test.keystore中有错误,路径或者是别名不对

2)

173306_JvPZ_2483853.png

这是由于library没有支持ant自动编译

3)

[aapt] invalid resource directory name: D:\work\appcompat_v7\bin\res crunch

原因分析

透过错误信息我们可以了解到,错误的原因是在编译目录 bin/res 目录中产生了一个叫crunch 的目录,而根据 android 规范这是不允许的,所以就出现了这个错误。

解决办法有如下三个

  1. 将 eclipse 的自动编译先去掉勾选(crunch 是ecliplse 生成的),然后在执行ant打包。

  2. 修改 androidsdk/tools/ant/build.xml 中 aapt.ignore.assets 的值参照

     <property name="aapt.ignore.assets" value="&lt;dir&gt;crunch:!.svn:!.git:.*:&lt;dir&gt;_*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~" />

  3. 在配置好ant 的执行环境后 cd 到源码目录 然后执行 ant release

转载于:https://my.oschina.net/u/2483853/blog/602521

你可能感兴趣的文章
Mysql备份系列(1)--备份方案总结性梳理
查看>>
C#开发的高性能EXCEL导入、导出工具DataPie(支持MSSQL、ORACLE、ACCESS,附源码下载地址)...
查看>>
[CareerCup] 1.6 Rotate Image 翻转图像
查看>>
Execution Plan 执行计划介绍
查看>>
29.6. nm - list symbols from object files
查看>>
Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals)爆零记
查看>>
jQuery中$.fn的用法示例介绍
查看>>
Python中的画图初体验
查看>>
又一个半成品库 weblog rpc client
查看>>
关于前端的photoshop初探的学习笔记
查看>>
Java程序员的日常 —— 响应式导航Demo
查看>>
敏捷软件开发宣言--常读常新
查看>>
objective-c内存管理基础
查看>>
Windows窗口在Vista中最小化效果
查看>>
Jquery真的不难~第七回 JS也要面向对象
查看>>
从C#到Objective-C,循序渐进学习苹果开发(1)--准备开发账号和开发环境
查看>>
SVN分支的合并和同步
查看>>
httpServlet,GenericServlet,Servlet源码分析
查看>>
easyUI——datebox验证和自定义取消按钮
查看>>
第 20 章 Nagios
查看>>