【发布时间】:2021-11-14 17:06:09
【问题描述】:
原因:java.lang.AssertionError 在 com.android.tools.r8.ir.code.IntSwitch.valid(IntSwitch.java:67) 在 com.android.tools.r8.ir.code.IntSwitch.(IntSwitch.java:35) 在 com.android.tools.r8.ir.conversion.IRBuilder.createSwitch(IRBuilder.java:1922) 在 com.android.tools.r8.ir.conversion.IRBuilder.addSwitch(IRBuilder.java:1886) 在 com.android.tools.r8.cf.code.CfSwitch.buildIR(CfSwitch.java:101) 在 com.android.tools.r8.ir.conversion.CfSourceCode.build(CfSourceCode.java:581) 原因:com.android.builder.dexing.DexArchiveBuilderException: dexing 时出错。
java 示例
public IFactory getInjectMap(String var1) {
byte var2 = -1;
switch(var1.hashCode()) {
case 2011670744:
if (var1.equals("xxx.xxx.xxx.xxx")) {
var2 = 0;
}
break;
case -1047643106:
if (var1.equals("xxx.xxx.xxx.xxx")) {
var2 = 1;
}
break;
}
switch(var2) {
case 0:
var2 = (byte)(new xxxxFactory());
break;
case 1:
var2 = (byte)(new xxxxFactory());
break;
default:
var2 = (byte)null;
}
return var2;
}
}
【问题讨论】:
-
分享你的代码
-
@YaqoobBhatti 我只是修复它谢谢
-
您使用的反编译器似乎存在根本缺陷,因为它无法识别在第二个
switch中初始化的变量必须具有与第一个甚至插入中使用的变量不同的类型基于这个错误的假设,从引用类型到byte的无意义强制转换。除此之外,这似乎是对字符串的切换,反编译器无法识别。结论是你应该显示实际的字节码,而不是这个反编译器的结果。
标签: android dex java-bytecode-asm android-r8