testwhat/SmaliEx

Unresolved INVOKE_VIRTUAL_QUICK_ART mIdx=16 objReg=3, use Ljava/lang/String; to invoke (it may have exception but is expected)

mmhobi7 opened this issue · 11 comments

While deodexing hammerhead M preview 1.

07-13 12:47:03:224 Preparing bootclasspath from /home/aaahh/deodex/system/framework/arm/odex
07-13 12:47:03:501 De-optimizing /system/framework/core-libart.jar
07-13 12:47:05:818 Analysis info of Landroid/icu/impl/PluralRulesLoader; : :
Unresolved INVOKE_VIRTUAL_QUICK_ART mIdx=16 objReg=3, use Ljava/lang/String; to invoke (it may have exception but is expected)

07-13 12:47:26:445 Output to /home/aaahh/deodex/system/framework/arm/dex/core-libart.dex

Used command:
java -jar oat2dex.jar boot system/framework/arm/boot.oat

It's causing me problems... Framework.jar is trash.
Is there anything I can do to help you fix this faster? Is there anything I can do on my end?
If not can you show me what to do or point me to anything?

Tried M preview 2 (android-m-preview-1)

08-05 21:35:46:650 Analysis info of Landroid/icu/impl/PluralRulesLoader; : :
Unresolved INVOKE_VIRTUAL_QUICK_ART mIdx=16 objReg=3, use Ljava/lang/String; to invoke (it may have exception but is expected)

08-05 21:35:54:433 Output to /home/aaahh/d/tmp/framework/arm/dex/core-libart.dex
08-05 21:35:54:434 De-optimizing /system/framework/conscrypt.jar

So I did research, found out about this:
https://android.googlesource.com/platform/art/+/master/runtime/dex_instruction_list.h

Yeah so I understand what now, but is there anything I can still do?

I found it in your code and you added it support M preview oat, I really am confused.
I'm going to try java 6 tomorrow, although I remember oar2dex erroring out about java 8
Maybe it's the api being detected incorrectly?

Okay so it looks cosmetic, but I was getting an error while booting, I'll test some more.

Well it seems to have fixed outputs during deodexing but I still get this:

01-07 23:42:21.310 1597 1597 F art : art/runtime/runtime.cc:360] (no managed stack frames)
01-07 23:42:21.310 1597 1597 F art : art/runtime/runtime.cc:360] Pending exception java.lang.NoSuchMethodError: no static or non-static method "Landroid/text/StaticLayout;.nLineBreakOpportunities(Ljava/lang/String;[CI[I)[I"
01-07 23:42:21.310 1597 1597 F art : art/runtime/runtime.cc:360](Throwable with empty stack trace)Dumping all threads without appropriate locks held: thread list lock mutator lock

and

01-07 23:42:25.659 1721 1721 E art : Failed to register native method android.text.StaticLayout.nLineBreakOpportunities(Ljava/lang/String;[CI[I)[I in /system/framework/framework.jar:classes2.dex
01-07 23:42:25.659 1721 1721 E art : ----- class 'Landroid/text/StaticLayout;' cl=0x0 -----

Here is the framework folder, just to make it easier for you.
https://drive.google.com/file/d/0B9uqk9InEzCYRGQ5TkdtRmR5TlE/view?usp=sharing

Tried again with the new Marshmallow preview:

08-17 17:57:07:560 Preparing bootclasspath from /home/aaahh/marshmellow/tmp/framework/arm/odex
08-17 17:57:07:921 De-optimizing /system/framework/core-libart.jar
08-17 17:57:09:479 Analysis info of Landroid/icu/impl/PluralRulesLoader; : :
Risky resolved invocation target from debug info. type=Landroid/icu/text/PluralRanges; mIdx=16 objReg=3

  1. nLineBreakOpportunities should be only existed in Lollipop. It named nComputeLineBreaks in Marshmallow. So the error should not relate to deodex.
  2. "Risky resolved..." is a hint to debug, usually it will not cause problem, and for PluralRulesLoader case, it seems to work well as expected.

Please try if there is still run-time exception with latest version.