利用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,享受自动打包的乐趣吧。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值