利用Ant在mac osx下实现多渠道打包 + 混淆
2015-12-13 17:38
239 查看
这篇文章是上一篇mac下多渠道打包的实现的续集,在上一篇的基础上加上混淆功能。
同上一篇文章一样,混淆也是一个我们值得深入的学习点。在自动打包学习学习过程中,我也搜集到了一些很好的学习资料:
proguard官方学习资料。
前辈总结的混淆的用法。
有兴趣的同学可以前往学习。
接下来,继续昨天的工程,加入自动混淆的功能。
1)新增混淆后的文件地址
首先,我们应该知道混淆的时机:在将源代码编译成class文件后,我们就可以通过Android自带的proguard.jar这个命令对class文件进行混淆。这里修改init任务,加入 混淆后代码的存放目录:
2)在编译后加入混淆功能:
由1已知我们可以通过sdk自带的proguard.jar命令执行混淆。代码如下:
3)修改Eclipse生成的proguard-project.txt文件。
如果没有这一步,可以像正常情况一样进行编译,打包,但是应用无法启动。后来通过网络资料,需要在proguard-project.txt下新增混淆代码:
我们可能会问,为什么Eclipse没有这几行代码,但是却能正常运行?我的猜想是:Eclipse在执行混淆的时候会把这些代码自动添加进去。因为每个Android项目这几行都是一样的。
欧克,将这些代码merge到昨天的build.xml中,执行ant,享受自动打包的乐趣吧。
混淆
说到混淆,让我想起前段时间很火的蜻蜓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,享受自动打包的乐趣吧。
相关文章推荐
- Mac maven环境变量配置
- doc转swf,主流文档在线查看解决方案--类似百度文档功能
- thinkphp3.1怎么都连不上mysql数据库解决方法
- PowerDesigner15对SQLSERVER2008S数据库进行反向工程出错
- PowerDesigner 物理数据模型(PDM) 说明
- sqlserver2008自定义函数字符串拼接出现问题
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许
- dll文件删不掉怎么办
- tomcat6.exe与tomcat6w.exe的区别
- js处理小数 , toFixed()的潜在问题
- Spring 框架的架包分析、功能作用、优点
- 【C#】哈希表
- 编程的精义
- JAVA中内部类和匿名内部类的区别,分别在什么时候使用它们?
- JAVA中抽象类与接口的区别,分别在什么情况下使用它们
- spring4.0 源码分析 bean标签的解析(三)
- JAVA中接口存在的意义
- openwrt修改flash大小
- 数据结构实验2(二叉链表实现二叉树的基本运算)
- Cocos2d-JS坐标系统