Ben*_*ben 3 android proguard simple-framework
我在我的应用程序中使用了一个简单的XML序列化程序,似乎已经通过在proguard.cfg中使用以下行成功地将其从Proguard混淆中排除,这要归功于这个SO问题:
-keep public class org.simpleframework.**{ *; }
-keep class org.simpleframework.xml.**{ *; }
-keep class org.simpleframework.xml.core.**{ *; }
-keep class org.simpleframework.xml.util.**{ *; }
Run Code Online (Sandbox Code Playgroud)
我可以签名并导出apk,但是当我尝试运行我的应用程序时,在尝试访问res/raw目录(R.raw.home_screen_menu)中的XML文件时,它会因NullPointerException而崩溃.
我将R.java排除在外:
-keepclassmembers class **.R$* {
public static <fields>;
}
Run Code Online (Sandbox Code Playgroud)
我整天都在玩这个配置文件,但没有任何运气.有没有人遇到过这个问题或类似的问题?我尝试过的最新事情是使用如下所示的"adaptresource"选项:
-adaptresourcefilenames **.xml
-adaptresourcefilecontents **.xml
Run Code Online (Sandbox Code Playgroud)
作为参考,这是我的proguard.cfg的内容:
#Use 5 step of optimization
-optimizationpasses 5
#When not preverifing in a case-insensitive filing system, such as Windows. This tool will unpack your processed jars,(if using windows you should then use):
-dontusemixedcaseclassnames
#Specifies not to ignore non-public library classes. As of version 4.5, this is the default setting
-dontskipnonpubliclibraryclasses
#Preverification is irrelevant for the dex compiler and the Dalvik VM, so we can switch it off with the -dontpreverify option.
-dontpreverify
#Specifies to write out some more information during processing. If the program terminates with an exception, this option will print out the entire stack trace, instead of just the exception message.
-verbose
#The -optimizations option disables some arithmetic simplifications that Dalvik 1.0 and 1.5 can't handle. Note that the Dalvik VM also can't handle aggressive overloading (of static fields).
#To understand or change this check http://proguard.sourceforge.net/index.html#/manual/optimizations.html
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-dump ../bin/class_files.txt
-printseeds ../bin/seeds.txt
-printusage ../bin/unused.txt
-printmapping ../bin/mapping.txt
-dontskipnonpubliclibraryclassmembers
#Ignore warnings for roboguice.activity.RoboAccountAuthenticatorActivity
-dontwarn roboguice.activity.RoboAccountAuthenticatorActivity
-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
-keep class com.google.inject.Binder
# Keep annotations
-keepattributes *Annotation*
-keepattributes Signature
#To remove debug logs:
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** v(...);
public static *** w(...);
}
# Roboguice
-keepclassmembers class * {
@com.google.inject.Inject <init>(...);
}
# SimpleXML
-keep public class org.simpleframework.**{ *; }
-keep class org.simpleframework.xml.**{ *; }
-keep class org.simpleframework.xml.core.**{ *; }
-keep class org.simpleframework.xml.util.**{ *; }
-dontwarn javax.xml.stream.**
-dontwarn javax.xml.namespace.**
-keep public class roboguice.**
# There's no way to keep all @Observes methods, so use the On*Event convention to identify event handlers
-keepclassmembers class * {
void *(**On*Event);
}
-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*(...);
}
-keepclasseswithmembers class * {
native <methods>;
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers 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 *;
}
-keepclassmembers class * implements android.os.Parcelable {
static android.os.Parcelable$Creator CREATOR;
}
-keepclassmembers class **.R$* {
public static <fields>;
}
Run Code Online (Sandbox Code Playgroud)
我有完全一样的问题.最后,由于这个问题和答案,我解决了它.我离开这里最后的配置:
的build.gradle:
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dependencies {
compile('org.simpleframework:simple-xml:2.7.1') {
exclude module: 'stax'
exclude module: 'stax-api'
exclude module: 'xpp3'
}
}
Run Code Online (Sandbox Code Playgroud)
proguard-rules.pro(除了默认的proguard配置)
-dontwarn javax.xml.**
-keep public class org.simpleframework.**{ *; }
-keep class org.simpleframework.xml.**{ *; }
-keep class org.simpleframework.xml.core.**{ *; }
-keep class org.simpleframework.xml.util.**{ *; }
-keepattributes Signature
-keepattributes *Annotation*
# Ignore our XML Serialization classes
-keep public class your.annotated.pojo.models.*{
public protected private *;
}
Run Code Online (Sandbox Code Playgroud)
希望对某人有所帮助
| 归档时间: |
|
| 查看次数: |
1538 次 |
| 最近记录: |