Proguard混淆代码(1)

【意义】混淆代码,可以加大别人反编译的难度,从而最大化的保护自己的代码安全。

【场景】我写了一个发短信的程序,回调给游戏一个发短信是否成功的参数,如果成功,游戏就给用户加道具。本意:只想暴露给游戏 doPay()接口,但不想让别人知道我内部的代码及发送短信的内容,所以我就要混淆我的代码,只保留doPay()接口不被混淆~

工程目录结构:

1 分析:

PaymentForSms.java  中,有 doPay方法

public static void doPay(Context context,String uid,String productName,String productPrice,SmsResultCallback callback)

2

具体实现:

准备: Eclipse ,Ant包(网上随便一搜,一大堆,类似java jdk安装方法),android sdk自身带的 proguard.jar工具 + build.xml + progard.cfg

实现:

接下来,重点就是 build.xml 和 progard.cfg的编写了。。。代码中,有详细注释。如果不明白的,可以 百度一下,就非常清晰了...

build.xml

build.xml

<?xml version="1.0"?>
<!-- 默认启动执行targetB -->
<project
    name="targetPro"
    default="targetB" >

    <!-- 全局变量 -->

    <!-- android-sdk 的路径 -->
    <property
        name="android-sdk"
        value="D:\android-sdk-4.2" />
    <!-- android-版本 2.2 -->
    <property
        name="android-jar"
        value="${android-sdk}/platforms/android-8/android.jar" />

    <!-- 任务组1 打印了一句话,没作用-->
    <target name="targetA" >
        <echo message="Java Version: ${parent.version}" />
    </target>

    <!-- 任务组 2 先检查targetA执行与否,如果没执行,则先执行targetA-->
    <target
        name="targetB"
        depends="targetA"
        unless="philander" >

        <echo message="The base dir is: ${basedir}" />

       <!--  建立路径,放.class -->
        <mkdir dir="E:/SDK_Test/build/classes" />
       <!--  <mkdir dir="E:/SDK_SMS/build/gen" /> -->

        <!-- 用到的Android编译库  android.jar -->
        <path id="project.libs" >
            <fileset dir="${android-sdk}/tools/support" >
                <include name="*.jar" />
            </fileset>

            <!-- 可以写多个库 -->
        </path>
        <!-- 编译,用到了 android.jar -->
        <javac
            bootclasspath="${android-jar}"
            destdir="E:/SDK_Test/build/classes"
            encoding="GBK"
            includeantruntime="on" >

            <!-- 需要编译的.java文件路径 -->
            <src path=".\src" />

            <!-- 用到的编译jar包  如android.jar -->
            <classpath refid="project.libs" />
        </javac>

        <!-- 打jar包  source_sdk.jar是未混淆的代码 -->
        <jar
            basedir="E:/SDK_Test/build/classes"
            destfile="source_sdk.jar" >
        </jar>

        <echo>混淆代码 ... </echo>
        <jar basedir="E:/SDK_Test/build/classes" destfile="temp.jar" /> <!-- temp.jar 为在根目录下 生成的,没混淆 jar包 -->
        <java jar="D:\android-sdk-4.2\tools\proguard\lib\proguard.jar" fork="true" failonerror="true">
            <jvmarg value="-Dmaximum.inlined.code.length=32" />
            <arg value="@proguard.cfg"></arg>
        </java>

        <!-- 删除多余的 .class 和 jar包 -->
        <delete dir="E:/SDK_SMS/build/classes"/>
        <delete dir="E:/SDK_Test"/>
        <delete file="temp.jar" />
      <!-- 后续自己定义操作 -->
       <!--    <delete file="temp.jar" />
        <delete dir="E:/SDK_SMS/build/classes"/>
        <mkdir dir="E:/SDK_SMS/build/classes"/>
        <unzip src="http://m.cnblogs.com/160574/optimized.jar" rel="nofollow"/>        <delete file="optimized.jar" />

        <jar
            basedir="E:/SDK_SMS/build/classes"
            destfile="SDK.jar" >
        </jar>

        <delete dir="E:\SDK_SMS\build" /> -->
    </target>

</project>
proguard.cfg
#jar包所在地址
-injars temp.jar
#jar包输出地址
-outjars proguard_sdk.jar
#引用的库的jar,用于解析injars所指定的jar类
-libraryjars D:/android-sdk-4.2/tools/support/annotations.jar
-libraryjars libs/android-support-v4.jar
-libraryjars D:/android-sdk-4.2/platforms/android-8/android.jar

-optimizationpasses 7
#混淆时不会产生形形色色的类名
-dontusemixedcaseclassnames
#指定不去忽略非公共的库类
-dontskipnonpubliclibraryclasses

-verbose
-dontoptimize
#不预校验
-dontpreverify
#优化
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
#检查引用是否正确,如果在-libraryjars中定义了,无需在次声明
-dontwarn android.net.http.**

#取消打印日志
-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** v(...);
    public static *** i(...);
}

#不需要混淆的类  1、暴露的接口     2、自定义的Callback  3、用到第三方库的时候 

-keep public class com.rekoo.listener.SmsResultCallback {*;}
-keep public class com.rekoo.single.sms.PaymentForSms {*;}

-printmapping  proguard.map

混淆代码,就比较简单了~ build.xml右键-Run as - Ant build

刷新工程,工程目录下面,就生成了 proguard_sdk.jar 混淆jar包了。。打开看一下,就ok了。。。如有问题,请留言

时间: 2024-10-03 15:33:24

Proguard混淆代码(1)的相关文章

利用android proguard混淆代码

利用android proguard混淆代码 2014-02-05 17:50 1207人阅读 评论(1) 收藏 举报 网上虽然有很多相关博客,不过貌似都不是最新版的..于是百度+谷歌+github上的开源demo,终于成功的配置了android proguard. 最新版的android sdk的默认配置已经可以满足我们的大多数要求了,我们只需要按照sdk的提示就可以配置大部分的必须配置,然后再加上一些基本的 自定义配置就行了. 第一步,取消project.properties里面关于prog

java防止反编译之proguard混淆代码

proguard5.3下载地址:http://down.51cto.com/data/2316123 从eclipse中导出工程的jar包(这个就不详细说了) 安装proguard后打开bin目录下的proguardgui.bat启动proguard如下图所示: 点击Input/Output,设置输入输出的jar包,input就是原jar,output就是混淆后的jar. 5.点击Input/Output中的add,添加该工程用到的jar,包括jre,以及web-info下的lib中的所有jar

proguard-project.txt和project.properties混淆代码

 [转]利用android proguard混淆代码 防止反编译,优化代码 网上虽然有很多相关博客,不过貌似都不是最新版的..于是百度+谷歌+github上的开源demo,终于成功的配置了android proguard. 最新版的android sdk的默认配置已经可以满足我们的大多数要求了,我们只需要按照sdk的提示就可以配置大部分的必须配置,然后再加上一些基本的 自定义配置就行了. 第一步,取消project.properties里面关于proguard的注释.这一步可以开启proguar

Proguard android代码混淆 防止反编译

Proguard android代码混淆 防止反编译 http://www.360doc.com/content/13/1030/13/9171956_325290258.shtml

使用proguard混淆android代码

当前是有些工具比如apktool,dextojar等是可以对我们android安装包进行反编译,获得源码的.为了减少被别人破解,导致源码泄露,程序被别人盗取代码,等等.我们需要对代码进行混淆,android的sdk中为我们提供了ProGrard这个工具,可以对代码进行混淆(一般是用无意义的名字来重命名),以及去除没有使用到的代码,对程序进行优化和压缩,这样可以增加你想的难度.最近我做的项目,是我去配置的混淆配置,因此研究了一下,这里分享一下. 如何启用ProGuard ant项目和eclipse

Android开发实践:利用ProGuard进行代码混淆

由于Android的代码大都是Java代码,所以挺容易被反编译的,好在Android ADT为我们集成了混淆代码的工具,一来可以混淆我们的代码,让程序被反编译后基本看不懂,另外还能起到代码优化的作用.发布项目前,建议打开Android的代码混淆功能. Android ADT主要通过ProGuard工具来提供代码混淆,网上也有挺多博客文章讲这个的,但感觉很多都介绍得太过于复杂,这里我就以问答的方式来更加简洁地介绍下ProGuard吧. 1. ProGuard是什么 ProGuard是一个工具,用来

Android项目:proguard混淆之常见问题及解决方法汇总

1.使用proguardgui混淆器对jar包进行混淆,出现EXCEPTION FROM SIMULATION错误: [2014-07-08 14:29:55 - Test024_HouseBox_v02_jar] Dx  EXCEPTION FROM SIMULATION: [2014-07-08 14:29:55 - Test024_HouseBox_v02_jar] Dx local variable type mismatch: attempt to set or access a va

【转】Android 混淆代码总结

http://blog.csdn.net/lovexjyong/article/details/24652085 为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译,下面来总结以下混淆代码的步骤: 1. 大家也许都注意到新建一个工程会看到项目下边有这样proguard-project.txt一个文件,这个对混淆代码很重要,如果你不小心删掉了,没关系,从其他地方拷贝一个过来 2. 最重要的就是在proguard-project.txt添加混淆的申明了: a. 把所有你的jar包都申明进来

Android 混淆代码汇总

为了防止别人对自己被盗的劳动,混淆代码可以被反编译可以有效地防止,以下在下面的代码混乱总结的步骤: 1. 大家可能已经注意到一个新的项目将在下面看到的物品都有这个proguard-project.txt一份文件,该代码可用于混乱非常重要.假设你不小心删除,没关系,来 2. 最重要的就是在proguard-project.txt加入混淆的申明了: a. 把全部你的jar包都申明进来,比如: -libraryjars libs/apns_1.0.6.jar -libraryjars libs/arm