# -------------------------------------
# android 原始混淆模板
# -------------------------------------
# ----------------------------------
# 通过指定数量的优化能执行
# -optimizationpasses n
# ----------------------------------
-optimizationpasses 5
# ----------------------------------
# 混淆时不会产生形形色色的类名
# -dontusemixedcaseclassnames
# ----------------------------------
#-dontusemixedcaseclassnames
# ----------------------------------
# 指定不去忽略非公共的库类
# -dontskipnonpubliclibraryclasses
# ----------------------------------
#-dontskipnonpubliclibraryclasses
# ----------------------------------
# 不预校验
# -dontpreverify
# ----------------------------------
# -dontpreverify
# ----------------------------------
# 输出生成信息
# -verbose
# ----------------------------------
-verbose
# ----------------------------------
# 优化选项
# optimizations {optimization_filter}
# ----------------------------------
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-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 com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;
}
# -----------------
# modify 修改合并
# -----------------
-keep public class * extends android.view.View {
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
public void set*(...);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
#--------------------------
# 保护类型 -keepattributes 说明
# Exceptions, Signature, Deprecated, SourceFile, SourceDir, LineNumberTable, LocalVariableTable,
# LocalVariableTypeTable, Synthetic, EnclosingMethod, RuntimeVisibleAnnotations, RuntimeInvisibleAnnotations,
# RuntimeVisibleParameterAnnotations, RuntimeInvisibleParameterAnnotations, and AnnotationDefault
# --------------------
-keepattributes **
-libraryjars <java.home>/lib/rt.jar
# ----------------------
# 不压缩指定的文件
# -dontshrink
# ----------------------
-dontshrink
# ----------------------
# 不优化指定的文件
# -dontoptimize
# -----------------------
-dontoptimize
# -----------------------
# 不混淆指定的文件
# -dontobfuscate
# -----------------------
# ----- 混淆包路径 -------
-repackageclasses ''
-flattenpackagehierarchy ''
-target 1.6
# -------- 以下是使用了 roboguice-1.1.2.jar 以及 guice-2.0-no_app.jar 功能需要保护的字段及类相关 --------
-keep class com.google.inject.Binder
-keepclassmembers class * {
@com.google.inject.Inject <init>(...);
}
-keepclassmembers class * {
void *(**On*Event);
}
-keepclassmembers class **.R$* {
public static <fields>;
}
# ------ 编译时需要用到的 jar 包
-libraryjars D:/dev_rc/android-sdk-windows/add-ons/addon_google_apis_google_inc_11/libs/maps.jar
# ------ 保护 谷歌第三方 jar 包,界面特效 ----------
-keep class android.support.v4.**
-dontwarn android.support.v4.**
# ------ 保护百度地址jar包 --------
-keep class com.baidu.mapapi.** { *; }
-dontwarn com.baidu.mapapi.**
# --- 打包时忽略以下类的警告 --
-dontwarn com.classpackage.AA
#-keepnames class * implements java.io.Serializable
# ---------保护所有实体中的字段名称----------
-keepclassmembers class * implements java.io.Serializable {
<fields>;
}
# --------- 保护类中的所有方法名 ------------
-keepclassmembers class * {
public <methods>;
}
总结:
无非就是要保护一些反射实现的逻辑,还有如果调用到外部接口(如hessian实现的)时方法名需要保护。
分享到:
相关推荐
**五、使用ProGuard注意事项** 1. 混淆可能会导致依赖库的问题,确保库已适配混淆或者添加相应的保持规则。 2. 对于依赖的第三方库,部分库可能已经处理了混淆问题,避免重复混淆。 3. 检查混淆规则,防止关键代码...
4. **使用Proguard的注意事项:** - 混淆可能会导致依赖库的问题,需要添加相应的`-keep`规则来保留关键类和方法。 - 测试混淆后的代码是非常重要的,因为混淆可能导致一些未预见的错误,如反射调用失败、序列化...
总之,通过Proguard在Android项目中进行混淆,可以显著提升应用的安全性,减少体积,但同时需要注意正确配置和测试,以确保混淆过程不会破坏原有的功能。在这个实例中,我们将了解到如何在旧版的Android SDK和...
在实际使用ProGuard 4.4时,需要注意以下几点: - **保留关键类和方法**:必须明确标记那些不能混淆或需要保留的类和方法,比如接口、公共API、错误处理类等。 - **处理依赖库**:如果项目依赖了第三方库,需要检查...
**五、注意事项** 1. **混淆冲突**:避免库之间或库与应用的混淆规则冲突,可能导致运行时异常。 2. **混淆日志**:开启`-verbose`选项输出详细的混淆日志,便于分析和调试。 3. **混淆性能**:混淆虽然提高了...
**注意事项**: - 混淆可能会影响第三方库的正常工作,因此需要谨慎处理依赖项。 - 在发布前,应始终对混淆后的代码进行测试,确保所有功能的正常运行。 - 配置文件的编写需要一定的学习和实践,不正确的设置可能...
**三、Android 中使用 ProGuard** 在 Android 项目中,ProGuard 配置通常在 `app/build.gradle` 文件中设置。例如: ```groovy android { buildTypes { release { minifyEnabled true # 启用混淆 ...
四、注意事项 1. 使用`shrinkResources`可能会误删某些在特定条件下才使用的资源,因此建议在发布前进行充分的测试。 2. 检查`proguard-rules.pro`文件,添加必要的保留规则,防止重要类和方法被混淆或删除。 3. ...
混淆注意事项 不能混淆 * 在AndroidManifest中配置的类,比如四大组件 * JNI调用的方法 * 反射用到的类 * WebView中JavaScript调用的方法 * Layout文件引用到的自定义View * 一些引入的第三方库(一般都会有混淆说明...
ProGuard是Android开发中不可或缺的工具,特别是在发布应用到生产环境时,为了保护代码安全、减少内存占用和提高性能,开发者通常会使用ProGuard进行代码混淆。标题中的"proguard5.0"指的是该版本的ProGuard工具,它...
本教程将深入探讨如何使用ProGuard来混淆Android项目代码,以防止反编译。 一、ProGuard介绍 ProGuard是一款免费的Java类文件 shrinker、optimizer、obfuscator 和 preverifier。它能够减小APK大小,优化字节码,...
**六、注意事项** 1. 混淆后可能会导致一些第三方库或自定义组件功能失效,需要仔细测试混淆后的应用。 2. 记录并保存好混淆规则,以便在出现问题时进行调试。 3. 对于重要的类和方法,可以使用`-keepnames`或`-...
9. 注意事项:配置文件中的通配符使用应该谨慎,以免引入了不应被混淆的代码。此外,一些框架或库可能需要特别注意,比如Android V4、V7包在某些情况下可以不用添加到支持库中。 10. 保存配置:混淆结束后,应该将...
使用ProGuard时,有几点最佳实践需要注意: 1. **保留公共API**:确保所有公开的API类和方法不被混淆,以保持对外接口的稳定性。 2. **测试混淆后代码**:混淆可能会导致运行时错误,因此在发布前务必全面测试混淆...
**ProGuard5.2.1资源使用教程** 在Java开发中,为了保护代码不被轻易反编译和理解,开发者通常会使用代码混淆工具。ProGuard是一款强大的Java字节码混淆、优化、压缩和预检查工具,它能够帮助开发者将应用代码转化...
六、注意事项 1. **库依赖**:混淆时需确保第三方库的公开API不受影响,可能需要添加对应的保留规则。 2. **调试混淆问题**:启用`-printmapping`和`-whyareyoukeeping`选项,可以帮助调试混淆问题。 3. **性能考虑*...
在Android开发中,ProGuard通常在构建release版本时启用。开发者需要特别注意对第三方库的处理,因为混淆可能会导致库的功能失效。通过添加适当的`-keep`规则,可以确保关键类和方法不被混淆。 ### 5. ProGuard与...
**注意事项**: - 混淆可能会导致第三方库或插件的问题,因此需要检查其是否兼容混淆,并可能需要添加特定的排除规则。 - 对于依赖于反射或序列化的代码,混淆可能导致运行时错误,因为类名和方法名已被改变。在...
**使用ProGuard的注意事项:** 1. **配置文件**:ProGuard的配置文件(proguard.cfg或proguard-rules.pro)是至关重要的,开发者需要在这个文件中指定哪些类、方法和库需要保留,以防止混淆过程中破坏代码的正确性...
在使用ProGuard时,还需要注意的是,混淆可能会导致一些意想不到的问题,如错误的引用或丢失的类。因此,每次修改配置后,都应进行充分的测试以确保应用的正确运行。ProGuard生成的日志文件可以帮助开发者分析和解决...