How to obfuscate an Android application android混淆(Obfuscate)

 

Obfuscate an Android application 这篇文章的作者介绍了如何在Android平台下混淆程序,并且给出antbuild.xml文件,经过自己的测试,发现里面少了一些target项,在Eclips会出错,后来结合zxing开源项目的build.xml文件,终于混淆成功,项目包减少了不少。

 (http://fonter.javaeye.com/blog/489728

这里主要提一些注意事项,不提供源代码

1、创建build.xml文件

 直接在项目的目录下新建一个名为build.xml的文件

 

 

2、创建Ant打包方式

项目 –> properties –> builders –> new –> ant builder

 

 

接着Buildfile选择项目build.xml文件,Base Dir选择项目目录就行了,记得勾上你的builders

 

 

 

3build.xml文件修改

zxing这个文件没有加入混淆包选项,所以得做一些修改,如下示例

 

Xml代码 
  1. <property name="proguard-home" value="D://Program Files//proguard4.2//lib//"/>  
  2.   
  3.     <target name="optimize" depends="compile">  
  4.         <jar basedir="${outdir-classes}" destfile="temp.jar"/>  
  5.         <java jar="${proguard-home}/proguard.jar" fork="true" failonerror="true">  
  6.             <jvmarg value="-Dmaximum.inlined.code.length=32"/>  
  7.             <arg value="-injars temp.jar"/>  
  8.             <arg value="-outjars optimized.jar"/>  
  9.             <arg value="-libraryjars ${android-jar}"/>  
  10.             <!-- <arg value="-libraryjars ${library-jar}/some_lib_used.jar"/> -->  
  11.             <arg value="-dontpreverify"/>  
  12.             <arg value="-dontoptimize"/>  
  13.             <arg value="-dontusemixedcaseclassnames"/>  
  14.             <arg value="-repackageclasses ''"/>  
  15.             <arg value="-allowaccessmodification"/>  
  16.             <arg value="-keep public class com.iwidsets.WidsetsActivity"/>  
  17.             <!-- <arg value="-keep public class com.just2me.obfapp.receiver.*"/> -->  
  18.             <arg value="-optimizationpasses 7"/>  
  19.             <arg value="-verbose"/>  
  20.             <arg value="-dontskipnonpubliclibraryclasses"/>  
  21.             <arg value="-dontskipnonpubliclibraryclassmembers"/>  
  22.         </java>  
  23.         <delete file="temp.jar"/>  
  24.         <delete dir="${outdir-classes}"/>  
  25.         <mkdir dir="${outdir-classes}"/>  
  26.         <unzip src="optimized.jar" dest="${outdir-classes}"/>  
  27.         <delete file="optimized.jar"/>  
  28.     </target>  

 

注意:keep public class com.iwidsets.WidsetsActivity需改成你的主Activity

 

 并修改target dex

 

Xml代码 
  1. <!-- Convert this project's .class files into .dex files. -->  
  2. <target name="dex" depends="compile,optimize">  
  3.     <echo>Converting compiled files and external libraries into ${out-folder}/${dex-file}...</echo>  
  4.     <apply executable="${dx}" failonerror="true" parallel="true">  
  5.         <arg value="--dex" />  
  6.         <arg value="--output=${intermediate-dex-location}" />  
  7.         <arg path="${outdir-classes-location}" />  
  8.         <fileset dir="${external-libs-folder}" includes="*.jar"/>  
  9.     </apply>  
  10. </target>  

 

  • 大小: 4.9 KB
  • 大小: 27.1 KB
  • 大小: 25.5 KB
  • 大小: 6.4 KB

 

 

 

 

 

 

There is no easy way to obfuscate Java classes of an Android app. This is no Eclipse plugin, nor even a working ant script.

Maybe there are working ant scripts. But for Android SDK 1.5, it seems like no one has supplied a proper one, yet. And hence, I spent half a day hacking out a script that works. There are more effort and hurdles than what are presented here.. but for a simple working script, here it is how I did it:

 

1 Create a Project

From the Terminal, in /android-sdk/tools/, run:

./android create project –target 2 –path /PATH/TO/ObfuscatedApp –activity MyActivity –package com.just2me.obfapp

 

2 Edit build.xml

Replace the build.xml with my modified build.xml, which is the most important item in this tutorial. The obfuscation work is in the optimize target as seen below.

ant build.xml

Some points to note in the build.xml ant script:

  • Edit the properties for the path to your Android SDK and Proguard
  • If you use any libraries, copy them to /lib and add -libraryjars ${library-jar}/some_lib_used.jar accordingly
  • -dontoptimize is needed for Android
  • For all classes that are declared in AndroidManifest.xml Application nodes (Activities, Receviers, etc), add an arg to tell proguard not to obfuscate. Exampe: "-keep public class com.just2me.obfapp.activity.*"

 

3 Run ant

The last step is to simply run the ant script!

To package a debug version that is signed with a debug key, run "ant debug-obf".

To package a release version that is unsigned, run "ant release-obf".

If all is well, then you will find the products in /bin. ObfuscatedApp-debug.apk would be the debug package that could be installed on simulator/devices.

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值