V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pgyer
V2EX  ›  蒲公英

Ant 多渠到混淆打包

  •  
  •   pgyer · 2015-05-14 17:19:56 +08:00 · 495 次点击
    这是一个创建于 3270 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近刚忙完了一个项目,本以为可以好好放松一下了,没想到客户提了一个变态的要求,同时要打包上线100多个渠道,需要替换图标,启动页还有一堆烦人的参数,粗略估计一个一个打包,至少两天时间,真是醉了。心中一阵草泥马飞过之后,想着自己的尾款还没到账,只能硬着头皮搞一个自动化的打包脚本。

    1、首先安装ant ,下载地址http://ant.apache.org/不会安装的可以参考http://yarin.blog.51cto.com/1130898/692569。

    2、利用Ant批量打包的基本思想是,每次打包后自动替换渠道号,以及自己要替换的参数,比如本demo就要不仅要替换渠道号,一些参数,还要替换图标和启动页面。

    这样带来了一个问题:Ant不支持循环,怎样循环打包?

    扩展包Ant-contrib能轻松解决这个问题

    可以翻墙的同学可以到http://ant-contrib.sourceforge.net/自行下载,或者去我的云空间下载http://pgyer.qiniudn.com/ant-contrib-1.0b3.jar,下载后直接把ant-contrib-1.0b3.jar放到Ant的lib文件夹即可。

    3、生成并改写build.xml 执行如下命令

    android update project --name testbyfrank -t 1 -p /Users/frank/Documents/workspace/testbyfrank

    此命令在当前的工程目录生成build.xml, -t 表示targetid 可以通过android list targets查看 -p 指定工程目录

    修改build.xml 代码见demo

    4、生成ant.properties 内容如下:market_channels是用来替换的参数以:和-分割。

    java.encoding=utf-8

    out.absolute.dir=/Users/frank/Documents/publish_testbyfrank

    gos.path=/Users/frank/Documents/publish_testbyfrank_bin

    proguard.config=proguard.cfg

    app_version=1.5

    market_channels=\u65B0\u77E5:60-xinzhi,\u897F\u5149:18-xiguang

    5、project.properties文件中打开混淆代码,去掉下面所在行的#

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

    6、编写proguard-project.txt,demo中有,大家自行删减

    6、执行命令ant deploy就慢慢等待生成的多渠道的apk吧

    7、最后在目录/Users/frank/Documents/publish_testbyfrank_bin下生成了两个apk

    testbyfrank_xiguang.apk 和testbyfrank_xinzhi.apk

    自己抽离出来的demo已经经过我的测试没有问题,大家可以通过http://pgyer.qiniudn.com/testbyfrank.zip下载示例代码。

    注意事项及可能遇到的问题

    1.工程如果引用到其它类库工程,请先生成类库的build.xml

    2.如果提示invalid resource directory name: /Users/frank/Documents/workspace/appcompat_v7/bin/res/crunch等类似的错误请先手动删除bin目录,重新执行ant deploy命令

    3.如果出现Can't read [/Users/frank/Documents/workspace/testbyfrank/libs/Android_Location_V1.1.0.jar] (No such file or directory)类似的错误,表明你没有用到这个类库,请在混淆文件中去掉对应的即可。

    4.如果xml文件有用到自定义的控件,对应的java文件不能混淆

    5.如果用的gson的库,对应的实体类不可以混淆。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5080 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 09:42 · PVG 17:42 · LAX 02:42 · JFK 05:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.