打包签名IS移动开发总结android

Android使用ant实现自动化打包和多渠道打包

2017-04-09  本文已影响131人  cao健强

前言

eclipse在Android开发过程中使用起来还是比较方便的,但是在打包时的编译速度确实不敢恭维,那么自动化打包在这时就显得很重要了,这是一个解决程序员宝贵的双手的技术。

正文

一、在开始自动化打包之前我们先要配置好环境变量(包括jdk、Android sdk以及ant的环境变量)

二、当环境变量配置完成后,我们就可以开始准备开始实现自动化打包了

1.进入要打包的工程的项目目录。
2.输入命令" android update project --name MyProject -p ./ ",其中-name参数是指定项目名称;-p参数是要打包的地址(./ 表示当前目录)。
这时候我们可以看到在我们的项目根目录下多了build.xml,以及local.properties两个文件。

到此,我们的项目就支持ant编译打包了

三、项目中引用了其他library项目时,我们还需要让其依赖的项目支持ant编译打包

四、进行项目的编译打包。

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

#keystore的路径,必须使用正斜杠  
key.store= "C:\Users\Administrator\Desktop\is\android" 
#keystore的密码  
#key.store.password=123456
#alias名  
key.alias=myAlias
#alias密码  
#key.alias.password=abcdef 

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

六、自动打包渠道包
1、实现批量循环打包需要一个类似于for循环的功能,在Ant的核心包里没有相关的For循环的Task,即不支持for循环,但是ant支持第三方扩展包,以支持更多的其他功能。
  于是我们要下载相应的支持for循环的扩展包。可以使用开源的Ant-contrib包。下载地址:http://ant-contrib.sourceforge.net/ ,也可以自行百度搜索资源包 。
  下载后的解压得到的jar文件放到ant的lib目录。
接下来我们就可以打包渠道包了。

  1. 首先在ant.properties文件中增加属性 market_channels (渠道列表,以逗号分割),version(应用程序版本名)
#渠道市场列表  
market_channels=yingyongbao,360,wandoujia,baidu  
#版本号  
version=8.0  

3.在我们项目的build.xml中加入如下代码:

<!-- 渠道包打包脚本  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>  

在项目根目录下运行 ant deploy 命令就会帮你各个渠道的签名包了(为了全程可以自动执行,ant.properties文件中的keystore的密码可以指定,这样在执行过程中就不需要手动输入密码了),在bin目录的out目录下。

问题

在执行打包时我遇到了一个ant\build.xml:698: null returned: 1的错误,查了一下发现这个问题许多人都遇到了,这里记录一下:

这样子就只对自己的项目生效!
为什么会有\x3Cdir\x3E这个东西,其实就是<dir>,不过ant build.xml中不允许使用'<'字符,所以要转义一下。

如果没有解决的话可以换成
<property name="aapt.ignore.assets" value="<dir>crunch:!.svn:!.git:.:<dir>_:!CVS:!thumbs.db:!picasa.ini:!.scc:~" />

二者的区别在于<dir>的写法不同

将上面的代码复制到项目目录下的build.xml中,保存,再次打包即可。

总结

自动化打包是一门非常节省程序员开发时间的技术,自此我们宝贵的双手就解放了。233333~

上一篇下一篇

猜你喜欢

热点阅读