Oll*_*e C 1 java obfuscation android proguard
我使用下面的Proguard配置进行了Ant构建,这是由"android"命令行工具生成的,看起来非常直接.但是当我使用这个脚本构建应用程序时,应用程序会在设备上执行时爆炸,并带有一系列空指针异常(混淆过程会以某种方式向代码添加错误).要修复应用程序,我只需重新构建它,而无需通过Proguard运行它.
您会对使用Proguard和Android应用程序的人提出什么建议,以便a)应用程序在合理程度上进行优化和混淆,但b)没有功能完整性被破坏?
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-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>;
}
-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 *;
}
Run Code Online (Sandbox Code Playgroud)
我找到了我遇到的具体案例的解决方案.我会记录解决方案,因为我怀疑其他人可能觉得它很有用.
我有两个专门用于保存有效负载到JSON API调用的类.我没有从混淆中排除这些类,因此GSON解析器无法正确创建对象,因为类成员名称与JSON参数名称不匹配.
因此,如果在使用GSON或其他将JSON参数名称与类成员名称匹配的工具反序列化JSON数据来创建对象时,请确保Proguard不重命名它们.我看到的空引用异常是因为所有deseralised对象都是空白的.
我应该说我没有遇到ClassNotFoundException,这是一个不同的问题,而最初看起来非常难以理解的运行时错误,只是一个有趣的假设组合.
| 归档时间: |
|
| 查看次数: |
8859 次 |
| 最近记录: |