您的位置:首页 > 其它

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

2015-12-13 17:38 239 查看
这篇文章是上一篇mac下多渠道打包的实现的续集,在上一篇的基础上加上混淆功能。

混淆

说到混淆,让我想起前段时间很火的蜻蜓FM造假事件,有人通过反编译蜻蜓FM,发现其源代码基本没有做过混淆,才会让人找到像“普罗米修斯”这样神一样的代码。

同上一篇文章一样,混淆也是一个我们值得深入的学习点。在自动打包学习学习过程中,我也搜集到了一些很好的学习资料:

proguard官方学习资料

前辈总结的混淆的用法

有兴趣的同学可以前往学习。

接下来,继续昨天的工程,加入自动混淆的功能。

1)新增混淆后的文件地址

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

" data-snippet-id="ext.e40d5481efcf953abac5676ff874e7a0" data-snippet-saved="false" data-codota-status="done">[code]<mkdir dir="ant/build/classes/proguard"/>

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


2)在编译后加入混淆功能:

由1已知我们可以通过sdk自带的proguard.jar命令执行混淆。代码如下:

" data-snippet-id="ext.9a2aa0daa1e4afe2f2f21ff693b13722" data-snippet-saved="false" data-csrftoken="7BIcLrkl-owbVPKwTjPnLNzPkpJezi6dAn2w" data-codota-status="done">[code]  <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下新增混淆代码:

[code]
-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,享受自动打包的乐趣吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: