VerifyError: Rejecting class android.support.g.b because it failed compile-time verification
VerifyError: Rejecting class android.support.g.b because it failed compile-time verification
这与 and 类似,但我的问题的根源仍然未知,所有建议的解决方案都无济于事。
手动安装带有 MultiDex 支持并启用 ProGuard 的签名版本 apk 会在启动时抛出此异常:
475-475/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: ..., PID: 475
java.lang.VerifyError: Verifier rejected class android.support.g.b due to bad method void android.support.g.b.<init>() (declaration of 'android.support.g.b' appears in /data/app/...-2/base.apk)
at ...MyApp.attachBaseContext(Unknown Source)
at android.app.Application.attach(Application.java:181)
-dontoptimize
不会发生这种情况。当前最小优化设置:
-optimizations "code/*"
我在没有 -optimizations
或限制较少的选项时遇到同样的错误。添加 -keep class android.*
也无济于事。 "code/removal/*,code/simplification/*"
没有错误,但这会忽略 -assumenosideeffects
android.support.g.b是混淆后的android.support.multidex.MultiDexclass本身,调用重写的attachBaseContext(Context)
时报错:
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
使用字节码查看器解码此方法(默认构造函数)会导致:
private b() { // <init> //()V
return
}
- 根据 class 规范禁用优化会很有用。
- 备选方案:知道考虑
-assumenosideeffects
的最小 -optimizations
选项
不要在 -assumenosideeffects
中使用成员通配符,因为这会 "spill over" 为其他 类 对象。参见 https://sourceforge.net/p/proguard/bugs/716/#98d4
任何带有接口的规则都可能会出现类似的问题。示例:
-assumenosideeffects class * implements Interface {
public <init>();
public Object interfacemethod(); # May concern methods with same signature in other Objects
}
这与
手动安装带有 MultiDex 支持并启用 ProGuard 的签名版本 apk 会在启动时抛出此异常:
475-475/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: ..., PID: 475
java.lang.VerifyError: Verifier rejected class android.support.g.b due to bad method void android.support.g.b.<init>() (declaration of 'android.support.g.b' appears in /data/app/...-2/base.apk)
at ...MyApp.attachBaseContext(Unknown Source)
at android.app.Application.attach(Application.java:181)
-dontoptimize
不会发生这种情况。当前最小优化设置:
-optimizations "code/*"
我在没有 -optimizations
或限制较少的选项时遇到同样的错误。添加 -keep class android.*
也无济于事。 "code/removal/*,code/simplification/*"
没有错误,但这会忽略 -assumenosideeffects
android.support.g.b是混淆后的android.support.multidex.MultiDexclass本身,调用重写的attachBaseContext(Context)
时报错:
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
使用字节码查看器解码此方法(默认构造函数)会导致:
private b() { // <init> //()V
return
}
- 根据 class 规范禁用优化会很有用。
- 备选方案:知道考虑
-assumenosideeffects
的最小
-optimizations
选项
不要在 -assumenosideeffects
中使用成员通配符,因为这会 "spill over" 为其他 类 对象。参见 https://sourceforge.net/p/proguard/bugs/716/#98d4
任何带有接口的规则都可能会出现类似的问题。示例:
-assumenosideeffects class * implements Interface {
public <init>();
public Object interfacemethod(); # May concern methods with same signature in other Objects
}