一个关于 Java 反编译的问题

28次阅读

共计 1074 个字符,预计需要花费 3 分钟才能阅读完成。

对一个 jar 进行反编译,发现有些代码并没有生成 java 代码,而是这样的结果:

        /* JADX WARNING: Code restructure failed: missing block: B:4:0x0007, code lost:
            r2 = Companion.getClipDataUris$activity_release(r3);
         */
        /* Code decompiled incorrectly, please refer to instructions dump. */
        public final java.util.List parseResult(int r2, android.content.Intent r3) {
            /*
                r1 = this;
                r0 = -1
                if (r2 != r0) goto L_0x0004
                goto L_0x0005
            L_0x0004:
                r3 = 0
            L_0x0005:
                if (r3 == 0) goto L_0x0010
                androidx.activity.result.contract.ActivityResultContracts$GetMultipleContents$Companion r2 = Companion
                java.util.List r2 = r2.getClipDataUris$activity_release(r3)
                if (r2 == 0) goto L_0x0010
                goto L_0x0014
            L_0x0010:
                java.util.List r2 = kotlin.collections.CollectionsKt.emptyList()
            L_0x0014:
                return r2
            */
            throw new UnsupportedOperationException("Method not decompiled: androidx.activity.result.contract.ActivityResultContracts.GetMultipleContents.parseResult(int, android.content.Intent):java.util.List");
        }

两个问题:

  1. 什么情况下会出现这种问题,比如注释中写明了 Code restructure failed: misseing block,那是不是我们估计构造这样的代码可以增加反编译难度;
  2. 经常发现代码反编译不成功的额时候,会用一段注释将其描述出来,这段描述也不是标准的字节码,那重新对这个 java 文件直接进行编译能够得到原来的 class 文件么?
  3. 有没有办法指定给反编译器,当反编译为 java 不成功的时候,直接使用字节码反编译,方便后续再次编译为 class?
    感谢
正文完
 0