Android中使用ant混淆编译

1.拿一个普通项目来说,首先为它加上ant编译功能。

 代码如下 复制代码

android update project --name project_name -t 3 -p D:/temp/project_name

此时会在项目根目录自动生成一个名为build.xml的ant脚本。上面的project_name是你的项目名称。

2.加入混淆功能

就第一步来说,在命令行中已经可以使用ant进行编译了。因为Android中是这样的,在输入命令ant debug的时候会自动调用D:/android-sdk-windows/tools/ant/main_rules.xml目录下的规则文件,所以无需自己写ant脚本了。既然它会调用默认的规则文件(默认文件没有加入混淆功能),那么我们想要混淆,直接在这个规则文件上修改就好了。在名为-dex的target后加入一个target,代码如下:

 代码如下 复制代码
1 <target name="optimize" depends="compile">    <jar basedir="${out.classes.absolute.dir}" destfile="temp.jar">    <java jar="D:/android-sdk-windows/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}'"><!-- value="-libraryjars ${library-jar}/some_lib_used.jar"> --><arg value="-dontpreverify"><arg value="-dontoptimize"><arg value="-dontusemixedcaseclassnames"><arg value="-repackageclasses"><arg value="-allowaccessmodification">        <arg value="-keep public class * extends android.app.Activity">          <arg value="-keep public class * extends android.app.Service">          <arg value="-keep public class * extends android.content.BroadcastReceiver">          <arg value="-keep public class * extends android.content.ContentProvider">          <arg value="-keep public class * extends android.view.View">         <arg value="-optimizationpasses 1">        <arg value="-verbose"><arg value="-dontskipnonpubliclibraryclasses"><arg value="-dontskipnonpubliclibraryclassmembers"><arg value="-ignorewarning">    </arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></!--></arg></arg></arg></jvmarg></java>    <delete file="temp.jar">    <delete dir="${out.classes.absolute.dir}">    <mkdir dir="${out.classes.absolute.dir}">    <unzip src="optimized.jar" mce_src="optimized.jar" dest="${out.classes.absolute.dir}">    <delete file="optimized.jar"></delete></unzip></mkdir></delete></delete></jar></target>

修改上面代码涉及到路径的地方,改成本地对应的路径。<arg value="-ignorewarning"/>这一行是自己加入的,意思是忽略警告。

接着在名为-dex的target中进行一个混淆依赖,加入后代码如下:

 代码如下 复制代码
1 <target name="-dex" depends="compile, optimize, -post-compile, -obfuscate" unless="do.not.compile">        <if condition="${manifest.hasCode}">            <then>                <dex-helper>            </dex-helper></then>            <else>                <echo>hasCode = false. Skipping...</echo>            </else>        </if></target>

实际上加入的只是optimize,意思是这个target依赖target optimize。

3.开始编译

可以在命令行中编译了,编译后把class.dex进行反编译,可以看出来混淆成功。不知道为什么在我们的项目中反编译不回来,但是可以保证混淆是成功了。我拿过其他例子项目编译后反编译过,可以看下图:(不好意思,注册一星期之内不能上传图片)

时间: 2024-10-01 08:23:47

Android中使用ant混淆编译的相关文章

异常-android中MainActivity不参见编译怎么办??

问题描述 android中MainActivity不参见编译怎么办?? 代码正常,并且正确的在清单文件中注册,但是在运行的时候就是抛出ClassNotFoundException异常,怎么解决?. 解决方案 activity注册的包路径不对或者异常不是指这个actvity 解决方案二: 注意命名是否有错误.... 解决方案三: 是不是直接删了MainActivity 再注册少了,不会自动添加的 <action android:name="android.intent.action.MAIN

读懂Android中的代码混淆

本文为本人的一些实践总结,介绍一些混淆的知识和注意事项.希望可以帮助大家更好的学习和使用代码混淆. 什么是混淆 关于混淆维基百科上该词条的解释为 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为. 代码混淆影响到的元素有 类名 变量名 方法名 包名 其他元素 混淆的目的 混淆的目的是为了加大反编译的成本,但是并不能彻底防止反编译. 如何开启混淆 通常我们需要找到项目路径下app目录下的build.gradle文件 找

【IOS-COCOS2D-X 游戏开发之七】整合COCOS2DX的ANDROID项目到XCODE项目中,XCODE编写&amp;编译代码,ANDROID导入打包运行即可!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/667.html 此篇针对较早的-x引擎讲解的,最新的可以参考: [Cocos2d-X(2.x) 游戏开发系列之二]cocos2dx最新2.0.1版本跨平台整合NDK+Xcode,Xcode编写&编译代码,Android导入打包运行即可!   之前有两节介绍了mac下配置Android NDK并搭建Cocos2dX以

在32位的Ubuntu 11.04中为Android NDK r6编译FFmpeg0.8.1版-Android中使用FFmpeg媒体库(一)

原文:http://doandroid.info/?p=465 最近想通过FFmpeg库来练习在Android中使用其他第三方库进行开发.本文基本按照Ubuntu 10.10 64bit下使用Android NDK r6编译FFmpeg 0.8.1实现,感谢原作者辛苦的工作. 1 下载相应的Android NDK r6文件2 下载FFmpeg0.8.1的版本 截至到2011年10月2日已经发布了FFmpeg 0.8.5版本. 本文中系统之前已经配置过了NDK r6,我们通过控制台使用ndk-bu

android中应用编译报错

问题描述 android中应用编译报错 一个带下拉列表的应用,在编译的时候报错: The constructor ArrayAdapter(LayoutNext, int, String[]) is undefined 不知道应该怎么解决? 我的实现代码: public class LayoutNext extends Fragment implements OnClickListener,OnItemSelectedListener{ TimePicker timepicker; privat

[Android]转-Android 中的拿来主义(编译,反编译,AXMLPrinter2,smali,baksmali)!

原文地址  一.前言:  大家好,今天给大家分享一下Android中的拿来主 义,我们时常会碰到一个自己觉得很漂亮很帅气的应用(apk),所以我们会尝试用WinRAR等之类工具查看,而一般的应用程序打包后的目录通常是这样的 如下图:   当然res里的图片是可以拿来就用的(笔者的好多应用的图片都是从别人的apk里扣出来的),而诸如layout里的布局及权限文件 (AndroidManifest.xml)已经是一堆乱码了,完全看不懂,想看看别人是怎么布局的都不容易.还有源代码都被编译成了 clas

Android中编译工具链的改动----LLVM份量的增加

作者:史宁宁 -----------------------------------------------------------------------------------转载请注明出处---------------------------------------------------------------------------------        最近,Android中的编译工具链发生了改动,这个改动是Android的runtime(也可以说是VM,这两种说法在Google

在Android中通过jni方式使用编译好的FFmpeg库-Android中使用FFmpeg媒体库(二)

原文:http://doandroid.info/?p=471 在继上篇在32位的Ubuntu 11.04中为Android NDK r6编译FFmpeg最新版0.8.1后,本人来给大家展示一下如何在Android中使用编译好的FFmpeg库. 整体调用逻辑为: 1 编译完ffmpeg库 2 使用jni方式撰写c代码,其中需要包含相应的ffmpeg的头文件 3 撰写相应的Android.mk文件,里面指定需要编译的c代码以及需要链接的动态库 4 执行ndk-build生成相应的jni库 5 创建

Flex开发中使用Ant编译.mxml成.swf后,在.swf里使用Session的解决方法

Flex开发中使用Ant编译.mxml成.swf后,在.swf里使用Session的解决方法 http://iamin.blogdriver.com/iamin/1176113.html Flex Remote Object中直接使用HttpSession的方法在Flex Samples里有Session的操作使用例子:http://localhost:8080/samples/explorer/misc/ServerSessionDemo.mxml但是,使用mxmlc编译.mxml成.swf后