Восстановить потерянный код из скомпилированного apk - PullRequest
3 голосов
/ 25 ноября 2011

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

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

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

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

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

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

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

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

1 Ответ

5 голосов
/ 25 ноября 2011

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

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

...