利用Ant在mac osx下实现多渠道打包 + 混淆

Posted 袁阳的csdn博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用Ant在mac osx下实现多渠道打包 + 混淆相关的知识,希望对你有一定的参考价值。

这篇文章是上一篇mac下多渠道打包的实现的续集,在上一篇的基础上加上混淆功能。

混淆

说到混淆,让我想起前段时间很火的蜻蜓FM造假事件,有人通过反编译蜻蜓FM,发现其源代码基本没有做过混淆,才会让人找到像“普罗米修斯”这样神一样的代码。
同上一篇文章一样,混淆也是一个我们值得深入的学习点。在自动打包学习学习过程中,我也搜集到了一些很好的学习资料:

1)新增混淆后的文件地址
首先,我们应该知道混淆的时机:在将源代码编译成class文件后,我们就可以通过android自带的proguard.jar这个命令对class文件进行混淆。这里修改init任务,加入 混淆后代码的存放目录:

<mkdir dir="ant/build/classes/proguard"/>

         <delete>
            <fileset dir="ant/build/classes/proguard"></fileset>
        </delete>

2)在编译后加入混淆功能:
由1已知我们可以通过sdk自带的proguard.jar命令执行混淆。代码如下:

  <jar basedir="ant/bin/classes" destfile="temp.jar"/>  
        <java jar="/Users/yuanyang/Downloads/adt-bundle-mac-x86_64-20131030/sdk/tools/proguard/lib/proguard.jar" fork="true" failonerror="true">  
            <jvmarg value="-Dmaximum.inlined.code.length=32"/>  
            <arg value="-injars temp.jar"/>  
            <arg value="-outjars optimized.jar"/>  
            <arg value="-libraryjars $android-jar"/>          
            <arg value="-libraryjars libs"/>  
            <arg value="-dontpreverify"/>  
            <arg value="-dontoptimize"/>  
            <arg value="-dontusemixedcaseclassnames"/>  
            <arg value="-allowaccessmodification"/>  
            <arg value="@proguard-project.txt"/>  
            <arg value="-optimizationpasses 7"/>  
            <arg value="-verbose"/>  
            <arg value="-dontskipnonpubliclibraryclasses"/>  
            <arg value="-dontskipnonpubliclibraryclassmembers"/>  
        </java>  
        <delete file="temp.jar"/>  
        <unzip src="optimized.jar" dest="ant/build/classes/proguard"/>  
        <delete file="optimized.jar"/>  

3)修改Eclipse生成的proguard-project.txt文件。
如果没有这一步,可以像正常情况一样进行编译,打包,但是应用无法启动。后来通过网络资料,需要在proguard-project.txt下新增混淆代码:


-keep public class * extends android.app.Activity  
-keep public class * extends android.app.Application  
-keep public class * extends android.app.Service  
-keep public class * extends android.content.BroadcastReceiver  
-keep public class * extends android.content.ContentProvider  
-keep public class * extends android.support.v4.widget  

我们可能会问,为什么Eclipse没有这几行代码,但是却能正常运行?我的猜想是:Eclipse在执行混淆的时候会把这些代码自动添加进去。因为每个Android项目这几行都是一样的。
欧克,将这些代码merge到昨天的build.xml中,执行ant,享受自动打包的乐趣吧。

以上是关于利用Ant在mac osx下实现多渠道打包 + 混淆的主要内容,如果未能解决你的问题,请参考以下文章

Android中利用ant进行多渠道循环批量打包

Android自动化构建之Ant多渠道打包实践(上)

gradle打包android (实现外部导入签名文件多渠道打包导入ant脚本)

Android自己主动化构建之Ant多渠道打包实践(下)

ant 打批量渠道包,第三方项目作为library打包出错的问题

cocos2dx 在Mac平台下利用Eclipse打包安卓apk安装包详细教程