`
shuai1234
  • 浏览: 978520 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

Android 混淆代码总结

 
阅读更多
为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译,下面来总结以下混淆代码的步骤:
1. 大家也许都注意到新建一个工程会看到项目下边有这样proguard-project.txt一个文件,这个对混淆代码很重要,如果你不小心删掉了,没关系,从其他地方拷贝一个过来
2. 最重要的就是在proguard-project.txt添加混淆的申明了:
 a. 把所有你的jar包都申明进来,例如:
 -libraryjars libs/apns_1.0.6.jar
 -libraryjars libs/armeabi/libBaiduMapSDK_v2_3_1.so
 -libraryjars libs/armeabi/liblocSDK4.so
-libraryjars libs/baidumapapi_v2_3_1.jar
-libraryjars libs/core.jar
-libraryjars libs/gesture-imageview.jar
-libraryjars libs/gson-2.0.jar
-libraryjars libs/infogracesound.jar
-libraryjars libs/locSDK_4.0.jar
-libraryjars libs/ormlite-android-4.48.jar
-libraryjars libs/ormlite-core-4.48.jar
-libraryjars libs/universal-image-loader-1.9.0.jar
b. 将你不需要混淆的部分申明进来,因为有些类经过混淆会导致程序编译不通过,如下:
-keep public class * extends android.app.Fragment  
-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.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class * extends android.support.v4.**
-keep public class com.android.vending.licensing.ILicensingService
--以上都是API里边的类,最好都要避免混淆
有些很特殊的,例如百度地图,你需要添加以下申明:
-keep class com.baidu.** { *; } 
-keep class vi.com.gdi.bgl.android.**{*;}
根据我的经验,一般model最好避免混淆(model无关紧要,不混淆也没多大关系)如:
-keep class com.bank.pingan.model.** { *; }
下面在贴上关于Umeng分享统计的避免混淆的申明
-dontwarn android.support.v4.**  
-dontwarn org.apache.commons.net.** 
-dontwarn com.tencent.** 
-keepclasseswithmembernames class * {
    native <methods>;
}
-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
-keepclasseswithmembers class * {
    public <init>(android.content.Context);
}
-dontshrink
-dontoptimize
-dontwarn com.google.android.maps.**
-dontwarn android.webkit.WebView
-dontwarn com.umeng.**
-dontwarn com.tencent.weibo.sdk.**
-dontwarn com.facebook.**
-keep enum com.facebook.**
-keepattributes Exceptions,InnerClasses,Signature
-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable
-keep public interface com.facebook.**
-keep public interface com.tencent.**
-keep public interface com.umeng.socialize.**
-keep public interface com.umeng.socialize.sensor.**
-keep public interface com.umeng.scrshot.**
-keep public class com.umeng.socialize.* {*;}
-keep public class javax.**
-keep public class android.webkit.**
-keep class com.facebook.**
-keep class com.umeng.scrshot.**
-keep public class com.tencent.** {*;}
-keep class com.umeng.socialize.sensor.**
-keep class com.tencent.mm.sdk.openapi.WXMediaMessage {*;}
-keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*;}
-keep class im.yixin.sdk.api.YXMessage {*;}
-keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}
-keep public class [your_pkg].R$*{
    public static final int *;
}
3.以上工作完成,混淆工作就完成了一大半了,最后需要做的就是在project.properties文件中加上你的混淆文件申明了,如下:
   proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
4. OK, 最后一步,打签名包测试,如果有问题,仔细看下Log也许有得类不能混淆,那么你得加入到proguard-project.txt文件中
-------以上就是混淆代码的全过程了
 
最后贴上proguard-project.txt的全部代码:
  
[java] view plaincopy在CODE上查看代码片派生到我的代码片
# To enable ProGuard in your project, edit project.properties  
# to define the proguard.config property as described in that file.  
#  
# Add project specific ProGuard rules here.  
# By default, the flags in this file are appended to flags specified  
# in ${sdk.dir}/tools/proguard/proguard-android.txt  
# You can edit the include path and order by changing the ProGuard  
# include property in project.properties.  
#  
# For more details, see  
#   http://developer.android.com/guide/developing/tools/proguard.html  
  
# Add any project specific keep options here:  
  
# If your project uses WebView with JS, uncomment the following  
# and specify the fully qualified class name to the JavaScript interface  
# class:  
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {  
#   public *;  
#}  
-optimizationpasses 5  
-dontusemixedcaseclassnames  
-dontskipnonpubliclibraryclasses  
-dontpreverify  
-verbose  
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  
  
-keepattributes *Annotation*  
-keepattributes Signature  
  
-libraryjars libs/apns_1.0.6.jar  
-libraryjars libs/armeabi/libBaiduMapSDK_v2_3_1.so  
-libraryjars libs/armeabi/liblocSDK4.so  
-libraryjars libs/baidumapapi_v2_3_1.jar  
-libraryjars libs/core.jar  
-libraryjars libs/gesture-imageview.jar  
-libraryjars libs/gson-2.0.jar  
-libraryjars libs/infogracesound.jar  
-libraryjars libs/locSDK_4.0.jar  
-libraryjars libs/ormlite-android-4.48.jar  
-libraryjars libs/ormlite-core-4.48.jar  
-libraryjars libs/universal-image-loader-1.9.0.jar  
  
-keep class com.baidu.** { *; }   
-keep class vi.com.gdi.bgl.android.**{*;}  
  
-keep public class * extends android.app.Fragment    
-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.app.backup.BackupAgentHelper  
-keep public class * extends android.preference.Preference  
-keep public class * extends android.support.v4.**  
-keep public class com.android.vending.licensing.ILicensingService  
  
-keep class com.google.gson.stream.** { *; }  
-keep class com.google.gson.examples.android.model.** { *; }  
-keep class com.uuhelper.Application.** { *; }  
-keep class net.sourceforge.zbar.** { *; }  
-keep class com.google.android.gms.** { *; }   
  
-keep class com.bank.pingan.model.** { *; }  
  
-keep public class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper  
-keep public class * extends com.j256.ormlite.android.apptools.OpenHelperManager  
   
-keep class com.android.vending.licensing.ILicensingService  
-keep class android.support.v4.** { *; }    
-keep class org.apache.commons.net.** { *; }    
-keep class com.tencent.** { *; }    
   
-keep class com.umeng.** { *; }    
-keep class com.umeng.analytics.** { *; }    
-keep class com.umeng.common.** { *; }    
-keep class com.umeng.newxp.** { *; }    
   
-keep class com.j256.ormlite.** { *; }    
-keep class com.j256.ormlite.android.** { *; }    
-keep class com.j256.ormlite.field.** { *; }    
-keep class com.j256.ormlite.stmt.** { *; }   
  
-dontwarn android.support.v4.**    
-dontwarn org.apache.commons.net.**   
-dontwarn com.tencent.**    
  
-keepclasseswithmembernames class * {  
    native <methods>;  
}  
  
-keepclasseswithmembernames class * {  
    public <init>(android.content.Context, android.util.AttributeSet);  
}  
  
-keepclasseswithmembernames class * {  
    public <init>(android.content.Context, android.util.AttributeSet, int);  
}  
  
-keepclassmembers enum * {  
    public static **[] values();  
    public static ** valueOf(java.lang.String);  
}  
  
-keep class * implements android.os.Parcelable {  
  public static final android.os.Parcelable$Creator *;  
}  
  
-keepclasseswithmembers class * {  
    public <init>(android.content.Context);  
}  
  
-dontshrink  
-dontoptimize  
-dontwarn com.google.android.maps.**  
-dontwarn android.webkit.WebView  
-dontwarn com.umeng.**  
-dontwarn com.tencent.weibo.sdk.**  
-dontwarn com.facebook.**  
  
-keep enum com.facebook.**  
-keepattributes Exceptions,InnerClasses,Signature  
-keepattributes *Annotation*  
-keepattributes SourceFile,LineNumberTable  
  
-keep public interface com.facebook.**  
-keep public interface com.tencent.**  
-keep public interface com.umeng.socialize.**  
-keep public interface com.umeng.socialize.sensor.**  
-keep public interface com.umeng.scrshot.**  
  
-keep public class com.umeng.socialize.* {*;}  
-keep public class javax.**  
-keep public class android.webkit.**  
  
-keep class com.facebook.**  
-keep class com.umeng.scrshot.**  
-keep public class com.tencent.** {*;}  
-keep class com.umeng.socialize.sensor.**  
  
-keep class com.tencent.mm.sdk.openapi.WXMediaMessage {*;}  
  
-keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*;}  
  
-keep class im.yixin.sdk.api.YXMessage {*;}  
-keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}  
  
-keep public class [your_pkg].R$*{  
    public static final int *;  
}  
[java] view plaincopy在CODE上查看代码片派生到我的代码片
2015-05-25更新  
[java] view plaincopy在CODE上查看代码片派生到我的代码片
1. 依赖工程的jar 申明:  
[java] view plaincopy在CODE上查看代码片派生到我的代码片
以下是邮件发送的实例  
[java] view plaincopy在CODE上查看代码片派生到我的代码片
-libraryjars ../KlowerBase/libs/mail-activation.jar  
-libraryjars ../KlowerBase/libs/mail-additionnal.jar  
-libraryjars ../KlowerBase/libs/mail.jar  
[java] view plaincopy在CODE上查看代码片派生到我的代码片
2. 解决邮件发送时报的以异常  
[java] view plaincopy在CODE上查看代码片派生到我的代码片
 -keep class javax.mail.**{*;}  
 -keep class com.sun.mail.**{*;}  
-keep class javax.activation.**{*;}  
-keep class org.apache.harmony.**{*;}  
-keep class java.security.**{*;}  
[java] view plaincopy在CODE上查看代码片派生到我的代码片
#解决:can't find referenced class java.beans.Beans  
-dontwarn org.apache.commons.collections.BeanMap  
-dontwarn java.beans.**  
#解决:can't find referenced class javax.security.sasl.Sasl  
-dontwarn com.sun.mail.imap.protocol.**  
[java] view plaincopy在CODE上查看代码片派生到我的代码片
   

OK,That's all.
--Thank you!
  

 

分享到:
评论

相关推荐

    androidStudio代码混淆插件AndroidProguard

    Android Studio是一款广泛使用的Android应用程序开发集成环境,而代码混淆是其中的一个重要环节,尤其是在发布应用时,为了提高代码的安全性和减少体积,通常会使用到Proguard工具。AndroidProguard插件则是为...

    android 代码混淆_v2.0

    ### Android 代码混淆详解 #### 一、代码混淆概述 代码混淆是软件开发中的一个重要环节,尤其是在移动应用开发领域,如Android应用开发中尤为重要。它通过重命名类名、方法名以及变量名等来使源代码变得难以阅读...

    Android代码混淆的写法总结

    Android 代码混淆写法总结 Android 代码混淆是指在 Android 应用程序中对代码进行混淆处理,以保护代码的安全和 prevents 反编译。混淆可以将代码压缩,混淆文件,预检,优化等多种作用。 使用混淆的方式是通过在 ...

    Android混淆技术

    因此,Android混淆技术应运而生,它通过一系列手段来提高代码的复杂性,使得反编译者难以阅读或理解原始代码。 首先,混淆技术涉及到类名和方法名的混淆。Dalvik字节码中包含了丰富的调试信息,如类名、方法名等,...

    如何混淆Android项目代码(ProGuard)防止反编译.rar

    它能够减小APK大小,优化字节码,混淆代码,使其难以阅读,同时验证处理后的字节码,确保其与Java虚拟机兼容。 二、安装与配置 1. 在Android Studio中,打开项目的`build.gradle`(Module)文件,确保依赖项已经...

    Android 资源混淆工具

    总结,资源混淆是Android应用安全保护的重要一环,而这款“资源混淆工具”则为开发者提供了便捷的方式来实现资源混淆。通过理解混淆工具的工作原理和使用方法,开发者可以更好地保护自己的应用,防止未经授权的访问...

    Android 混淆配置

    总结,Android混淆配置是提升应用安全性和性能的关键步骤,开发者需要根据项目需求精心编写混淆规则,并进行充分测试,以确保混淆后的代码既能保护信息安全,又能保持正常功能。同时,理解和掌握混淆配置的细节,有...

    介绍了Android代码混淆的三种方法及可能出现的问题

    Android 代码混淆三种方法详解 Android 代码混淆是指在将 Java 代码编译为.class 文件或将.apk 文件签名时,对代码进行混淆处理,以保护代码的安全性和知识产权。下面将介绍三种常见的 Android 代码混淆方法。 一...

    Android混淆编译Demo

    总结来说,Android混淆编译是一个关键的步骤,它涉及到ProGuard配置、保留规则设定以及最终的构建流程。在`Android Studio 3.1.2`中,开发者可以方便地进行混淆设置,确保应用的安全性和性能。通过对`proguard-rules...

    Android Java代码混淆工具:ProGuard简介及使用.docx

    在Android开发中,ProGuard是最广泛使用的Java代码混淆工具之一,它不仅能够混淆代码,还能够对代码进行优化,减少APK的大小,提高运行效率。 #### ProGuard的工作原理 ProGuard通过对类、方法和字段的名称进行...

    Android 签名混淆打包文档

    ### Android签名混淆打包详解 #### 一、签名与混淆打包的重要性 在Android应用开发过程中,签名与混淆打包是非常重要的步骤。签名确保了应用的身份唯一性和后续版本更新的一致性,而混淆则增强了应用的安全性,保护...

    Android 混淆代码详解及实例

    为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译,下面来总结以下混淆代码的步骤: 1. 大家也许都注意到新建一个工程会看到项目下边有这样proguard-project.txt一个文件,这个对混淆代码很重要,...

    代码混淆Eclipse插件Jocky

    总结来说,Jocky插件是Eclipse开发环境中的一个重要工具,它帮助开发者实现代码混淆,以保护软件源代码,防止恶意分析。通过集成ProGuard,Jocky提供了一种便捷的方式来管理混淆规则,并在Eclipse的界面内直接执行...

    android library文件混淆

    Android Library 文件混淆是指对 Android 项目中使用的 Library 文件进行混淆处理,以保护代码的安全和不可逆性。本文将详细介绍 Android Library 文件混淆的步骤和注意事项。 一、准备 jar 文件 在开始混淆之前,...

    android高级混淆字典

    总结,"android高级混淆字典"是为了提高代码混淆的效果,增加反编译的难度。在实际开发中,我们需要根据项目的特性和需求,合理设置混淆规则,平衡代码安全和可维护性。通过Gradle与ProGuard的配合,可以实现自动化...

    android activity,java打包架包混淆经验.docx

    在Android应用开发中,对项目进行打包和混淆是非常重要的步骤,可以有效保护代码安全,减少体积,提升性能。本文将详细介绍如何使用ProGuard 5.1进行打包混淆,特别是涉及到Activity、JNI、方法以及第三方库的处理。...

    jar代码混淆器最新版5.3.3

    虽然存在其他混淆工具,如DexGuard(专为Android优化的ProGuard版本)和R8(Google推荐的Android代码混淆工具),但ProGuard因其开源、稳定和强大的功能而备受青睐。R8是ProGuard的替代品,速度更快,但配置语法类似...

    dictionary.txt,自定义混淆

    在Android开发中,混淆技术通常用于减少APK文件大小、保护源代码不被轻易反编译等场景。 #### 二、自定义混淆的重要性 对于Android应用而言,自定义混淆能够根据开发者的需求定制混淆规则,更加灵活地控制哪些类、...

    对java jar包实现混淆加密

    总结,Java jar包的混淆加密是提升代码安全的重要手段,通过ProGuard等混淆工具和加密技术,可以有效降低源代码被逆向工程分析的风险。然而,安全是一个持续的过程,开发者应始终保持警惕,及时更新和优化保护策略。

Global site tag (gtag.js) - Google Analytics