最近在尝试才从其他sdk里获取数据,研究了一下jar包的混淆,主要是系统自带的proguardgui.bat来进行混淆,做个整理贴:
1.下面部分是混淆一个jar基本的proguard.pro
-optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontskipnonpubliclibraryclassmembers -dontpreverify -verbose -printmapping proguardMapping.txt -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* -keepattributes *Annotation* -keepattributes Signature -keepattributes SourceFile,LineNumberTable # 保留所有的本地native方法不被混淆 -keepclasseswithmembernames class * { native <methods>; } # 保留了继承自Activity、Application这些类的子类 # 因为这些子类,都有可能被外部调用 # 比如说,第一行就保证了所有Activity的子类不要被混淆 -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.view.View -keep public class com.android.vending.licensing.ILicensingService # 如果有引用android-support-v4.jar包,可以添加下面这行 -keep public class com.xxxx.app.ui.fragment.** {*;} # 保留在Activity中的方法参数是view的方法, # 从而我们在layout里面编写onClick就不会被影响 -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } # 枚举类不能被混淆 -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } # 保留自定义控件(继承自View)不被混淆 -keep public class * extends android.view.View { *** get*(); void set*(***); public <init>(android.content.Context); public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); } # 保留Parcelable序列化的类不被混淆 -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } # 保留Serializable序列化的类不被混淆 -keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve(); } # 对于R(资源)下的所有类及其方法,都不能被混淆 -keep class **.R$* { *; } # 对于带有回调函数onXXEvent的,不能被混淆 -keepclassmembers class * { void *(**On*Event); }
2.http://blog.csdn.net/educast/article/details/46672639
这个贴主要是看了下里面关于proguardgui.bat几个主要界面设置的地方,一开始设置有错,混淆一直失败,而且看不到什么有用的信息
3.如果不做处理,自己的写的类也会被改名,里面成员变量也会被改名,所以要做下处理,例如:
-keep public class com.example.confusionlib.SDKDisplay
4.在混淆自己写的类的过程中,发现很多方法本来是public,混淆之后变成了private,后面找到原因,是混淆的过程中优化了,后来我又写了一个类,用到了这个类里的方法,这些public的方法就没有变成private了
参考贴:
http://blog.csdn.net/hongweigg/article/details/54612647
相关推荐
Android混淆打包不混淆第三方jar包Android 混淆打包不混淆第三方jar包
本文将深入探讨如何在Android Studio和Eclipse中生成jar包,并介绍混淆jar包的实践方法。 首先,我们来讨论在Android Studio中生成jar包的步骤: 1. **打开Android Studio项目**:确保你已有一个Android项目,然后...
Android JAR 包混淆详解 Android JAR 包混淆是一种保护 Java 代码的方式,它可以将 JAR 包中的代码混淆,使得攻击者无法轻易地反编译和盗用代码。混淆过程中,需要使用 ProGuard 工具,该工具可以将 JAR 包中的代码...
本文将深入探讨如何对Java jar包进行混淆加密,以及相关工具的使用。 一、代码混淆的重要性 代码混淆的主要目的是使原始的Java代码变得难以理解和反编译。这通过改变类、方法和变量的名称,以及重排和优化代码结构...
AndroidAPK及JAR包的代码混淆.pdf
本示例聚焦于“Gradle混淆_打包Jar包基础DEMO”,它涉及到两个核心概念:Gradle混淆和使用Gradle打包Java应用程序为Jar包。 首先,让我们深入了解一下Gradle混淆。混淆是在Android开发中常用来保护代码安全、减小...
Java的Jar包混淆器ProGuard v3.8是一款强大的代码优化和保护工具,主要用于Java和Android应用程序。在软件开发过程中,源代码的安全性和保密性至关重要,而ProGuard提供了一种有效的解决方案,它能够对编译后的字节...
空白混淆jar包 里面有使用说明 修改了 proguard 5.33的 源码 增加程序 安全性
里面涉及到一个第三方的包,这时候我生成aar/jar包给对方使用的时候,调用不到第三方包的代码,只可以调用我写的类的代码. 问题 我就去网上去寻找,aar/jar包生成包含第三方等问题.网上也有很多答案,我随便发一个别人的...
总的来说,Gradle混淆和打包Jar包是Java和Android开发中必不可少的技能。通过配置Gradle脚本,我们可以实现高效的代码混淆以保护应用安全,同时也能方便地打包出符合需求的Jar文件。无论是简单的Java库还是复杂的...
本文将深入探讨如何实现对jar包的混淆加密,以提高程序的安全性。 首先,我们需要了解混淆(Obfuscation)的概念。混淆是将可读性强的代码转换为难以理解的形式,使得反编译后的代码变得难以阅读和分析。这有助于...
本文将深入讲解如何使用Gradle进行混淆和打包Jar包的基础操作。 首先,让我们了解什么是混淆。混淆是将代码中的类名、方法名和变量名转换为简短、无意义的名称的过程,目的是保护源代码不被轻易理解,同时也能减小...
"jar包混淆工具.zip"就是这样一个工具,它包含了混淆jar包所需的功能。 混淆工具的主要目的是通过重命名类、方法和变量,使得反编译后的代码变得难以理解和分析。这不仅增加了代码的安全性,还能有效减少jar包的...
本篇文章将深入探讨Gradle在混淆和打包Jar包方面的知识,特别是针对测试代码的处理。 首先,我们要了解混淆在Android开发中的意义。混淆是一种优化技术,它主要通过重命名类和方法,缩短代码的名称,以减小最终生成...
### Android工程正确导入jar包的方法 在Android开发过程中,经常需要使用第三方库来实现特定功能或简化开发流程。这些第三方库通常是以jar包的形式提供的。本文将详细介绍如何正确地将jar包导入Android项目中,并...
Android Studio默认集成了ProGuard工具,它是Android混淆的核心。ProGuard不仅可以混淆代码,还能优化、压缩和删除未使用的类和方法。 标题提到的“android 混淆 去除第三方jar”,意味着我们需要处理包含在项目中...
本文主要介绍了Android studio利用gradle打jar包并混淆的方法,下面话不多说,来看看详细的介绍吧。 首先打jar包的配置很简单,使用jar的task,可以参考gradle官方文档,具体代码如下: task buildJar(type: Jar, ...
在本案例中,"android jar包"指的是专为Android平台设计的`.jar`文件,它们通常包含了Android SDK中的API接口或者第三方库的功能。 Android开发中的`jar`包主要分为以下几类: 1. **Android SDK库**:这些`jar`包...
在Android开发过程中,有时我们需要对已有的jar包进行反编译,以便查看其源代码、理解内部实现或者进行二次开发。这个过程涉及到一系列的技术和工具,主要包括dex2jar、JD-GUI、Apktool等。下面将详细介绍这些知识点...
直接 替换 5.3.3版本的 混淆jar包 Mac 路径为 Contents/gradle/m2repository/net/sf/proguard/proguard-base Win gradle/m2repository/net/sf/proguard/proguard-base 为了安全 先备份原来的 jar 将gradle...