LINUX.ORG.RU

Опции компилятора

 , ,


0

1

Если опции что бы отключить проверку существования классов?

Суть есть apk приложение. Исходников нет. Есть только smali код. Допустим есть класс smali A.smali Создаю класс Main и внутри использую класс A.

public class Main {

public static void main(String[] arg){
   A a = new A();
   a.todo(); 
}
}

Если это скомпилировать выдаст ошибку что класса A нет. Можно ли это отключить? Или как то другим способом решить. Кроме как в smali коде писать.

★★

Положи в classpath, для этого исходник не нужен

anonymous
()

Представь что у тебя есть такой класс:

public class Main {
  public static void main(String[] args) {
    int i = 1;
    A.todo(i);
  }
}

если метод todo который ты вызываешь, имеет сигнатуру вида public static void todo(int n), то по нему сгенерятся следующие инструкции:

public static void main(java.lang.String[]);
  Code:
   0:   iconst_1
   1:   istore_1
   2:   iload_1
   3:   invokestatic    #16; //Method A.todo:(I)V
   6:   return

если же сигнатура будет немного другая, public static void todo(long n), то int должен быть расширен до long ещё до вызова метода

public static void main(java.lang.String[]);
  Code:
   0:   iconst_1
   1:   istore_1
   2:   iload_1
   3:   i2l
   4:   invokestatic    #16; //Method A.todo:(J)V
   7:   return

Если же у тебя класс A отсутствует, то просто невозможно сгенерировать правильные инструкции вызова, или наполнить структуру CONSTANT_Methodref_info, на которую цифрой #16 ссылается константный пул. (пробнее про это есть в спецификации виртуальной машины Java)

tl;dr: то что ты хочешь - невозможно даже теоретически. Нельзя каким-то простым способом изменить код JVM чтобы отключить эти проверки (потому что это не проверки).

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

Примерно понял.

Получается нужны либо исходники класса A.java или A.class с указанием пути при компиляции?

Тогда в моём случае надо получить .class файлы?

tyamur ★★
() автор топика
Ответ на: комментарий от maloi

А есть онлайн dex2jar? Искал не нашёл.

tyamur ★★
() автор топика
Ответ на: комментарий от bbk123

Думал в начале так. Был бы простой класс. Но там много зависимостей.

tyamur ★★
() автор топика
Ответ на: комментарий от tyamur

Всё так.

Если у тебя даже class-файла нету, то можешь сам его попробовать написать, форма классов и сигнатура методов - первичны, а внутри уже может ничего не быть. Придется тебе серьезно повозиться.

stevejobs ★★★★☆
()
Последнее исправление: stevejobs (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.