StatusRetryVerificationAtRuntime:在Andorid 8.1.0中使用javac编译框架/ base时出错

时间:2018-06-11 15:56:24

标签: javac android-source dex android-8.1-oreo dx

我正在尝试在编译时对框架/ base进行一些代码注入,以获得Oreo(8.1.0)的分支。我的第一步是使用javac(最终,我想使用aspectj编译器...)将框架/ base编译到jar中,然后使用jack将生成的jar转换为类* .dex。我以前在M上做过这个,但是我遇到了一个合并我的变化的问题。类* .dex看起来是正确生成的(它们与没有我更改的那些大小差不多,dexdump表明我的新类没有丢失旧的类,除了package-info.java? ),但生成boot.art时生成失败(有时这会在Context而不是AlarmManager上出错):

  

检查失败:klass-> IsVerified()引导类路径类   java.lang.Class失败了   完全验证:state = StatusRetryVerificationAtRuntime

我尝试使用dx而不是jack来从我的jar创建类* .dex,但是我得到了同样的错误。作为一个完整性检查,我尝试删除我的更改,只是添加

  

LOCAL_JACK_ENABLED:= javac_frontend

到frameworks / base / Android.mk中的框架模块,因为build / core / java.mk似乎表明这是使用javac而不是jack的支持方式,但我仍然得到同样的错误。

art / runtime / mirror / classes.h包含有关StatusRetryVerificationAtRuntime的注释:

// kStatusRetryVerificationAtRuntime: The verifier sets a class to
// this state if it encounters a soft failure at compile time. This
// often happens when there are unresolved classes in other dex
// files, and this status marks a class as needing to be verified
// again at runtime.

这似乎表明我的dex文件中引用了一个类或方法,但没有定义?我已经确认我的输入java文件是相同的。似乎缺少的唯一类是package-info类,似乎不重要?

是否有人遇到此错误之前/可以提供一些有关它意味着什么以及如何调试它的见解?

0 个答案:

没有答案