`
folie2006
  • 浏览: 34507 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android使用了ProGuard时注意的事项

阅读更多

# -------------------------------------
# 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实现的)时方法名需要保护。

分享到:
评论
3 楼 malaya 2012-11-14  
非常感谢,按您说的已经搞定
2 楼 folie2006 2012-06-25  
malaya 写道
您好,我使用hessian并混淆后出错,能否告知如何保护hessian,谢谢

我也使用了hessian,需要保护的是定义的接口类以及对象的成员变量。
1 楼 malaya 2012-05-10  
您好,我使用hessian并混淆后出错,能否告知如何保护hessian,谢谢

相关推荐

    android-sdk目录下tools文件夹下的proguard文件夹

    **五、使用ProGuard注意事项** 1. 混淆可能会导致依赖库的问题,确保库已适配混淆或者添加相应的保持规则。 2. 对于依赖的第三方库,部分库可能已经处理了混淆问题,避免重复混淆。 3. 检查混淆规则,防止关键代码...

    Android混淆 各个版本proguard文件

    4. **使用Proguard的注意事项:** - 混淆可能会导致依赖库的问题,需要添加相应的`-keep`规则来保留关键类和方法。 - 测试混淆后的代码是非常重要的,因为混淆可能导致一些未预见的错误,如反射调用失败、序列化...

    Android添加Proguard混淆支持完整实例

    总之,通过Proguard在Android项目中进行混淆,可以显著提升应用的安全性,减少体积,但同时需要注意正确配置和测试,以确保混淆过程不会破坏原有的功能。在这个实例中,我们将了解到如何在旧版的Android SDK和...

    proguard4.4混淆器

    在实际使用ProGuard 4.4时,需要注意以下几点: - **保留关键类和方法**:必须明确标记那些不能混淆或需要保留的类和方法,比如接口、公共API、错误处理类等。 - **处理依赖库**:如果项目依赖了第三方库,需要检查...

    Android proguard4.5.1.rar

    **五、注意事项** 1. **混淆冲突**:避免库之间或库与应用的混淆规则冲突,可能导致运行时异常。 2. **混淆日志**:开启`-verbose`选项输出详细的混淆日志,便于分析和调试。 3. **混淆性能**:混淆虽然提高了...

    混淆加密 proguard 5.3.3

    **注意事项**: - 混淆可能会影响第三方库的正常工作,因此需要谨慎处理依赖项。 - 在发布前,应始终对混淆后的代码进行测试,确保所有功能的正常运行。 - 配置文件的编写需要一定的学习和实践,不正确的设置可能...

    proguard使用

    **三、Android 中使用 ProGuard** 在 Android 项目中,ProGuard 配置通常在 `app/build.gradle` 文件中设置。例如: ```groovy android { buildTypes { release { minifyEnabled true # 启用混淆 ...

    AndroidStudio清理无用冗余资源文件工具使用方法

    四、注意事项 1. 使用`shrinkResources`可能会误删某些在特定条件下才使用的资源,因此建议在发布前进行充分的测试。 2. 检查`proguard-rules.pro`文件,添加必要的保留规则,防止重要类和方法被混淆或删除。 3. ...

    开源bbs源码java-Android-ProGuard:Android分享:代码混淆那些事

    混淆注意事项 不能混淆 * 在AndroidManifest中配置的类,比如四大组件 * JNI调用的方法 * 反射用到的类 * WebView中JavaScript调用的方法 * Layout文件引用到的自定义View * 一些引入的第三方库(一般都会有混淆说明...

    proguard5.0

    ProGuard是Android开发中不可或缺的工具,特别是在发布应用到生产环境时,为了保护代码安全、减少内存占用和提高性能,开发者通常会使用ProGuard进行代码混淆。标题中的"proguard5.0"指的是该版本的ProGuard工具,它...

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

    本教程将深入探讨如何使用ProGuard来混淆Android项目代码,以防止反编译。 一、ProGuard介绍 ProGuard是一款免费的Java类文件 shrinker、optimizer、obfuscator 和 preverifier。它能够减小APK大小,优化字节码,...

    Proguard5.2.1资源&使用教程

    **六、注意事项** 1. 混淆后可能会导致一些第三方库或自定义组件功能失效,需要仔细测试混淆后的应用。 2. 记录并保存好混淆规则,以便在出现问题时进行调试。 3. 对于重要的类和方法,可以使用`-keepnames`或`-...

    Proguard混淆Android/Java源代码

    9. 注意事项:配置文件中的通配符使用应该谨慎,以免引入了不应被混淆的代码。此外,一些框架或库可能需要特别注意,比如Android V4、V7包在某些情况下可以不用添加到支持库中。 10. 保存配置:混淆结束后,应该将...

    ProGuard_java_proguard_

    使用ProGuard时,有几点最佳实践需要注意: 1. **保留公共API**:确保所有公开的API类和方法不被混淆,以保持对外接口的稳定性。 2. **测试混淆后代码**:混淆可能会导致运行时错误,因此在发布前务必全面测试混淆...

    Proguard5.2.1 资源 使用教程

    **ProGuard5.2.1资源使用教程** 在Java开发中,为了保护代码不被轻易反编译和理解,开发者通常会使用代码混淆工具。ProGuard是一款强大的Java字节码混淆、优化、压缩和预检查工具,它能够帮助开发者将应用代码转化...

    【android开发】混淆打包proguard模板

    六、注意事项 1. **库依赖**:混淆时需确保第三方库的公开API不受影响,可能需要添加对应的保留规则。 2. **调试混淆问题**:启用`-printmapping`和`-whyareyoukeeping`选项,可以帮助调试混淆问题。 3. **性能考虑*...

    ProGuard工具包,Java代码混淆

    在Android开发中,ProGuard通常在构建release版本时启用。开发者需要特别注意对第三方库的处理,因为混淆可能会导致库的功能失效。通过添加适当的`-keep`规则,可以确保关键类和方法不被混淆。 ### 5. ProGuard与...

    proguard-7.0.0.tar.gz

    **注意事项**: - 混淆可能会导致第三方库或插件的问题,因此需要检查其是否兼容混淆,并可能需要添加特定的排除规则。 - 对于依赖于反射或序列化的代码,混淆可能导致运行时错误,因为类名和方法名已被改变。在...

    PROGUARD程序exe

    **使用ProGuard的注意事项:** 1. **配置文件**:ProGuard的配置文件(proguard.cfg或proguard-rules.pro)是至关重要的,开发者需要在这个文件中指定哪些类、方法和库需要保留,以防止混淆过程中破坏代码的正确性...

    proguard-v5.3.3

    在使用ProGuard时,还需要注意的是,混淆可能会导致一些意想不到的问题,如错误的引用或丢失的类。因此,每次修改配置后,都应进行充分的测试以确保应用的正确运行。ProGuard生成的日志文件可以帮助开发者分析和解决...

Global site tag (gtag.js) - Google Analytics