При запуске файла .dex (написанного на smali) в Dalvik vm возникает ошибка проверки.

Этот HelloWorld складывает два числа и выводит ответ.

.class public LHelloWorld;
.super Ljava/lang/Object;
.method public static main([Ljava/lang/String;)V
  .registers 5
  .parameter
  .prologue
  const v0, 0x2
  const v1, 0x4
  add-int/2addr v0, v1
  new-instance v3, Ljava/lang/StringBuilder;
  invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V
  const-string v3, "The result is : "
  sget-object v2, Ljava/lang/System;->out:Ljava/io/PrintStream;
  invoke-virtual {v2, v3}, Ljava/lang/PrintStream;->print(Ljava/lang/String;)V
  invoke-virtual {v2, v0}, Ljava/lang/PrintStream;->println(Ljava/lang/Integer;)V
  return-void
.end method

И когда я запускаю classes.dex на своем устройстве Android, оболочка adb выдает мне информацию об ошибке

Unable to find static main(String[]) in 'HelloWorld'
java.lang.VerifyError: Verifier rejected class HelloWorld due to bad method void HelloWorld.main(java.lang.String[]) (declaration of 'HelloW
orld' appears in /storage/extSdCard/HelloWorld.zip)

Я действительно не понимаю, почему это оказалось ошибкой.

Пожалуйста, помогите, спасибо.


person walter    schedule 08.12.2015    source источник
comment
Вы хотите найти журналы проверки art / dalvik, которые появляются раньше, когда он запускает dexopt или dex2oat. Они укажут на конкретную инструкцию, которая не проходит проверку, и укажут, почему она не выполняется.   -  person JesusFreke    schedule 08.12.2015
comment
@JesusFreke Как я могу получить этот журнал, как вы сказали? Не могли бы вы объяснить мне это подробно, спасибо.   -  person walter    schedule 09.12.2015
comment
Журнал должен быть в logcat. adb logcat   -  person JesusFreke    schedule 09.12.2015
comment
@JesusFreke, спасибо! ????   -  person walter    schedule 09.12.2015


Ответы (1)


Я обнаружил, в чем проблема: при печати числа типа int (не объекта Integer) тип параметра должен быть «I» вместо «Java / lang / Integer».

person walter    schedule 08.12.2015