java.lang.VerifyError 在 Android N 中使用 jsoup 下载数据时

java.lang.VerifyError when downloading data with jsoup in Android N

我为新的 Android N 版本编译了我的 Android 应用程序,然后尝试在模拟器上对其进行测试。它运行正常,直到我尝试使用 "jsoup" 库下载和解析一些网站数据。然后我得到这个 java.lang.VerifyError:

E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
                                                                 Process: com.masrepus.vplanapp, PID: 6584
                                                                 java.lang.RuntimeException: An error occurred while executing doInBackground()
                                                                     at android.os.AsyncTask.done(AsyncTask.java:318)
                                                                     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
                                                                     at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
                                                                     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                                                                     at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:243)
                                                                     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
                                                                     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
                                                                     at java.lang.Thread.run(Thread.java:761)
                                                                  Caused by: java.lang.VerifyError: Verifier rejected class org.jsoup.parser.HtmlTreeBuilderState: boolean org.jsoup.parser.HtmlTreeBuilderState.process(org.jsoup.parser.Token, org.jsoup.parser.HtmlTreeBuilder) failed to verify: boolean org.jsoup.parser.HtmlTreeBuilderState.process(org.jsoup.parser.Token, org.jsoup.parser.HtmlTreeBuilder): [0x140B] Invalid reg type for array index (Reference: org.jsoup.nodes.Node[]) (declaration of 'org.jsoup.parser.HtmlTreeBuilderState' appears in /data/app/com.masrepus.vplanapp-2/base.apk)
                                                                     at org.jsoup.parser.HtmlTreeBuilderState.<clinit>(HtmlTreeBuilderState.java:246)
                                                                     at org.jsoup.parser.HtmlTreeBuilder.parse(HtmlTreeBuilder.java:53)
                                                                     at org.jsoup.parser.Parser.parseInput(Parser.java:30)
                                                                     at org.jsoup.helper.DataUtil.parseByteData(DataUtil.java:81)
                                                                     at org.jsoup.helper.HttpConnection$Response.parse(HttpConnection.java:517)
                                                                     at org.jsoup.helper.HttpConnection.post(HttpConnection.java:174)
                                                                     at com.masrepus.vplanapp.network.AsyncDownloader.updateAvailableFilesList(AsyncDownloader.java:961)
                                                                     at com.masrepus.vplanapp.network.AsyncDownloader.downloadVplan(AsyncDownloader.java:237)
                                                                     at com.masrepus.vplanapp.network.AsyncDownloader.doInBackground(AsyncDownloader.java:135)
                                                                     at com.masrepus.vplanapp.network.AsyncDownloader.doInBackground(AsyncDownloader.java:113)
                                                                     at android.os.AsyncTask.call(AsyncTask.java:304)
                                                                     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                     at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:243) 
                                                                     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
                                                                     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
                                                                     at java.lang.Thread.run(Thread.java:761) 

在研究 VerifyErrors 时,我遇到了一些解决方案,比如清理项目构建文件夹。但这些解决方案没有帮助。 我想知道的是 [0x140B] Invalid reg type for array index 是什么意思。这可能是我必须解决的问题,但我不知道如何解决。

编辑: 因此,我更深入地研究了这个问题,并在第 244-759 行的 org.jsoup.parser.HtmlTreeBuilderState 中找到了名为 "InBody" 的块内的崩溃。我不知道为什么,但是当我在那里设置断点时,程序永远不会在那里停止,所以我不知道崩溃发生在这个块内的确切位置。但是由于错误消息谈到某种数组索引,我认为它可能是 6 for 循环之一,我发现它与数据类型 "Element":它们在第305、388、561、582、602和640行

禁用插孔。

启用插孔时出现同样的错误。我禁用了 jack 并编译,没有错误。然后我将jsoup源码复制到我的项目文件夹,启用jack并编译,没有报错。所以我认为这是将*.class转换为*.jack.

的工具jill的一个bug