相关疑难解决方法(0)

使用Proguard Obfuscation时,Gson EnumTypeAdapter中的AssertionError

我的项目在序列化/反序列化期间实现了一个TypeAdapterin Gson来保留对象的多态性状态.无论如何,该项目在开发测试期间工作正常,但是当它通过proguard混淆和测试发布时,它只会崩溃.

03-21 10:06:53.632: E/AndroidRuntime(12441): FATAL EXCEPTION: main
03-21 10:06:53.632: E/AndroidRuntime(12441): java.lang.AssertionError
03-21 10:06:53.632: E/AndroidRuntime(12441):    at com.google.gson.internal.bind.TypeAdapters$EnumTypeAdapter.<init>(SourceFile:724)
03-21 10:06:53.632: E/AndroidRuntime(12441):    at com.google.gson.internal.bind.TypeAdapters$26.create(SourceFile:753)
03-21 10:06:53.632: E/AndroidRuntime(12441):    at com.google.gson.Gson.getAdapter(SourceFile:353)
03-21 10:06:53.632: E/AndroidRuntime(12441):    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(SourceFile:82)
03-21 10:06:53.632: E/AndroidRuntime(12441):    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(SourceFile:81)
03-21 10:06:53.632: E/AndroidRuntime(12441):    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(SourceFile:118)
03-21 10:06:53.632: E/AndroidRuntime(12441):    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(SourceFile:72)
03-21 10:06:53.632: E/AndroidRuntime(12441):    at com.google.gson.Gson.getAdapter(SourceFile:353)
03-21 10:06:53.632: E/AndroidRuntime(12441):    at com.google.gson.Gson.toJson(SourceFile:578)
03-21 10:06:53.632: E/AndroidRuntime(12441):    at com.google.gson.Gson.toJsonTree(SourceFile:479)
03-21 10:06:53.632: E/AndroidRuntime(12441):    at com.google.gson.Gson.toJsonTree(SourceFile:458)
03-21 10:06:53.632: E/AndroidRuntime(12441):    at com.google.gson.Gson$3.serialize(SourceFile:137)
Run Code Online (Sandbox Code Playgroud)

我的Gson特定的proguard配置是:

##---------------Begin: proguard …
Run Code Online (Sandbox Code Playgroud)

android proguard gson

65
推荐指数
5
解决办法
1万
查看次数

Firebase.setAndroidContext()上的NoSuchMethodException

我的申请是无法启动的.Firebase.setAndroidContext()在我的onCreate()方法中导致NoSuchMethodException.见下文:

protected Firebase ref;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    String firebaseUrl = getResources().getString(R.string.firebase_url);
    Firebase.setAndroidContext(getApplicationContext());
    ref = new Firebase(firebaseUrl);

} 
Run Code Online (Sandbox Code Playgroud)

我还设置了一个应用程序:

public class FirebaseApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Firebase.setAndroidContext(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

这导致来自logcat的以下堆栈跟踪:

I/sf_frame_dur(   60): [com.android.launcher/com.android.launcher2.Launcher,0,0,0,20,42,40,20]
D/AndroidRuntime(14165): Shutting down VM
E/AndroidRuntime(14165): FATAL EXCEPTION: main
E/AndroidRuntime(14165): Process: com.github.r351574nc3.earshot, PID: 14165
E/AndroidRuntime(14165): java.lang.AssertionError: impossible
E/AndroidRuntime(14165):    at java.lang.Enum$1.create(Enum.java:45)
E/AndroidRuntime(14165):    at java.lang.Enum$1.create(Enum.java:35)
E/AndroidRuntime(14165):    at libcore.util.BasicLruCache.get(BasicLruCache.java:54)
E/AndroidRuntime(14165):    at java.lang.Enum.getSharedConstants(Enum.java:211)
E/AndroidRuntime(14165):    at java.lang.Class.getEnumConstants(Class.java:1029)
E/AndroidRuntime(14165):    at com.fasterxml.jackson.databind.cfg.MapperConfig.collectFeatureDefaults(MapperConfig.java:73) …
Run Code Online (Sandbox Code Playgroud)

java android firebase

1
推荐指数
1
解决办法
1088
查看次数

标签 统计

android ×2

firebase ×1

gson ×1

java ×1

proguard ×1