我有以下内容:
public class A extends B {
static class C {
Object field1;
int field2;
boolean field3;
}
}
Run Code Online (Sandbox Code Playgroud)
我无法通过反射拿到C级!
我尝试过以下方法:
-keep class com.path.to._class.A$** {*;}
-keep class com.path.to._class.A$* {*;}
-keep class com.path.to._class.A$C {*;}
-keep class com.path.to._class.A$C {
<fields>;
}
-keep class com.path.to._class.A$C {
Object field1;
int field2;
boolean field3;
}
Run Code Online (Sandbox Code Playgroud)
以上都没有奏效.我在这里做错了吗?
也许值得一提的是B扩展了View ......
用户错误报告显示Gson().toJson(obj)偶尔返回,{}但对于大多数用户来说它工作正常。
我访问了一个用户,他在手机上遇到了错误并调试了应用程序,我制作Toast了显示发送到服务器的内容,我看到了 Toast 显示{},并且记录和ID也没有显示null。
这是我所做的。
private class ClassA{
String ID;
ArrayList<ClassB> Records;
ClassA(String ID, ArrayList<ClassB> Records) {
this.ID= ID;
this.Records= Records;
}
}
private class ClassB {
int T;
int F;
String D;
ClassB (int T, int F, String D) {
this.T= T;
this.F = F;
this.D= D;
}
}
Run Code Online (Sandbox Code Playgroud)
在这里我做序列化对象
ClassA obj = new ClassA(ID,Records);
String json = new Gson().toJson(obj);
Run Code Online (Sandbox Code Playgroud)
但是new Gson().toJson(obj)对于某些用户来说是正确的,但对于某些回报{} …
我的问题是内部类的内部类
我的android项目中的一个SDK有一个类A,它有两个静态内部类。应用proguard后发现它们被剥离了。
public class A{
....
static class B{
...
static class D {
....
}
}
static class C{
...
}
}
Run Code Online (Sandbox Code Playgroud)
我的 proguard 看起来像这样
-keepattributes Exceptions, InnerClasses
-keep class com.xxx.A
-keep class com.xxx.A$*
Run Code Online (Sandbox Code Playgroud)
这可以防止 B、C 类受到 proguard 的影响。但D级没有运气。我-keep class com.xxx.A$**也尝试过。
在创建启用了proguard的APK时,使用Firebase-UI库(com.firebaseui:firebase-ui:0.3.0)中的FirebaseRecyclerAdapter时会引发以下异常:
java.lang.RuntimeException: java.lang.NoSuchMethodException: <init> [class android.view.View]
at com.firebase.ui.FirebaseRecyclerAdapter.onCreateViewHolder(FirebaseRecyclerAdapter.java:168)
Run Code Online (Sandbox Code Playgroud)
调试版本(没有proguard)工作正常.谁有Firebase-UI的工作程序配置?
我当前的proguard配置看起来像这样(只有Firebase相关部分):
-optimizationpasses 5
-keepattributes SourceFile,LineNumberTable,Exceptions, Signature, InnerClasses,*Annotation*
-keepnames class ** { *; }
-keep class com.firebase.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
Run Code Online (Sandbox Code Playgroud) android firebase firebase-realtime-database android-proguard firebaseui