Восстановить утерянный код из скомпилированного apk

У меня есть проблема здесь... и это заставляет меня очень нервничать.

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

Короче говоря, сбой жесткого диска + плохое резервное копирование привели к тому, что я потерял очень важный класс.

Есть ли способ декомпилировать apk, чтобы восстановить потерянный фрагмент кода? Это не слишком сложно или изощренно, просто невозможно переписать его, не прочитав каждый. Один. линия. из. код. во всем приложении, поскольку оно инициализирует МНОЖЕСТВО классов и загружает множество вещей определенным образом.

С помощью быстрого поиска в Google я смог найти apktool, который декомпилирует его в кучу файлов .smali, которые, как я думаю, не предназначены для чтения человеком.

Все, что мне нужно для восстановления, — это один очень большой метод в классе. Я нашел smali-файл, содержащий его, и, кажется, нашел строку, с которой он начинается. что-то типа

.method публично объявлено-синхронизированная загрузка(Lcom/X/X/game/X;)I

Любая помощь будет оценена по достоинству, так как без этого метода мне пришлось бы отказаться от всей игры.


person AlexRamallo    schedule 25.11.2011    source источник
comment
Вот почему вы используете систему контроля версий (вне сайта, очевидно).   -  person Femaref    schedule 25.11.2011


Ответы (1)


Быстрое гугление привело к способу декомпиляции apks (декомпилировать apk в исходный код java). Однако, несмотря на то, что это приводит к коду Java, у вас, вероятно, не будет никаких имен переменных (только имена по умолчанию, такие как param1), поскольку они безвозвратно удаляются при компиляции исходного кода в байтовый код, а также, в зависимости от декомпилятора, для/ вместо этого циклы foreach будут циклами while, если блоки if/else могут не представлять исходный поток управления из-за оптимизации компилятора.

В качестве общего совета: используйте какой-нибудь источник контроля. На собственном сервере платный аккаунт с github неважно какой, но используйте систему контроля версий. Даже если вы всего лишь один человек, разрабатывающий проект. Это помогает в этой ситуации, помогает вернуться к предыдущей версии, помогает найти ошибку, которую вы внесли. Когда инструменты доступны, используйте их.

person Femaref    schedule 25.11.2011