利用Ant在mac osx下实现多渠道打包 + 混淆
Posted 袁阳的csdn博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用Ant在mac osx下实现多渠道打包 + 混淆相关的知识,希望对你有一定的参考价值。
这篇文章是上一篇mac下多渠道打包的实现的续集,在上一篇的基础上加上混淆功能。
混淆
说到混淆,让我想起前段时间很火的蜻蜓FM造假事件,有人通过反编译蜻蜓FM,发现其源代码基本没有做过混淆,才会让人找到像“普罗米修斯”这样神一样的代码。
同上一篇文章一样,混淆也是一个我们值得深入的学习点。在自动打包学习学习过程中,我也搜集到了一些很好的学习资料:
- proguard官方学习资料。
- 前辈总结的混淆的用法。
有兴趣的同学可以前往学习。
接下来,继续昨天的工程,加入自动混淆的功能。
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下实现多渠道打包 + 混淆的主要内容,如果未能解决你的问题,请参考以下文章
gradle打包android (实现外部导入签名文件多渠道打包导入ant脚本)