Mobile Devices

Войдите в свой аккаунт

Как декомпилировать apk файл?

  • Старый 08.02.2014, 00:26
    Как декомпилировать, а затем скомпилировать и подписать apk файл.


    1. Установка JAVA

    Перейдите по ссылке, скачайте и установите JDK и JRE. Выбирайте файлы в зависимости от вашей версии Windows (x64, x86).


    2. Установка Android SDK

    Перейдите по ссылке выше и скачайте Android SDK. Далее скопируйте распакованные из архива файлы на диск C (желательно создать папку Android и скопировать туда, для удобства).


    3. Установка Apktool

    Перейдите по ссылке выше, скачайте apktool1.5.2 и apktool-install-windows-r05-ibot. Далее создайте папку Apktool (диск C или D, не важно) и скопируйте в неё содержимое этих двух архивов. А затем скопируйте в эту же папку и сам apk файл, который вы будете декомпилировать (для примера android.apk). В папке должно получиться четыре файла:
    • apktool.jar
    • aapt.exe
    • apktool.bat
    • android.apk


    4. Декомпиляция apk

    1. Найдите папку Apktool, которую вы создали ранее. Зажмите шифт и сделайте правый клик по папке. В появившемся меню выберите "Открыть командную строку". В появившейся командной строке наберите следующую команду (android.apk - название взято для примера).
      Код:
      apktool if android.apk
      Если команда выполнена успешно, то вы увидите в командной строке сообщение "Framework installed to:" и далее адрес установки

    2. Далее выполните следующую команду
      Код:
      apktool d android.apk
      Если команда будет выполнена успешно, то в папке Apktool появится новая папка, которая будет иметь такое же название как и приложение которое мы декомпилируем (в данном примере название "android"). Эта папка содержит все файлы приложения которые можно модифицировать, а потом скомпилировать обратно.

    3. После того как вы завершили модифицировать декомпилированный apk файл в новопоявившейся папке, надо собрать (скомпилировать приложение обратно). Для этого выполните следующую команду (в данном примере "android" это название папки которая создалась когда мы декомпилировали наше приложение)
      Код:
      apktool b android
      Скомпилированное приложение вы сможете найти в папке "dist", которая находится во всё той же папке "android", которая содержит все файлы декомпилированного приложения. Это и будет собранный заново apk файл.


    5. Подпись скомпилированного apk файла (ВАЖНО)

    Скачайте mdforum.ru+sign+apk.zip. Создайте папку SignApk и скопируйте туда все три файла из архива, плюс скопируйте туда скомпилированное apk приложение (android.apk в нашем примере). В папке должно получиться четыре файла:
    • certificate.pem
    • key.pk8
    • signapk.jar
    • android.apk
    Далее для запуска командной строки в папке SignApk, зажмите шифт, сделайте правый клик по папке и выберите "Открыть командную строку". В появившемся окне командной строки введите следующую команду
    Код:
    java -jar signapk.jar certificate.pem key.pk8 android.apk android-signed.apk
    В данном примере "android.apk" это название приложения которое мы подписываем, а "android-signed.apk" это уже получившееся в результате подписанное приложение. Вы можете называть apk файлы как хотите.
    Если команда выполнена успешно, то в той же папке SignApk появится файл "android-signed.apk". Это и есть наш финальный apk файл, который можно устанавливать как приложение.

    Если есть вопросы, пишите здесь.


    Дополнительно:

  • Старый 09.02.2014, 03:07
    не получается декомпилировать Settings.apk по этому туториалу пробую другие apk, всё получается, а settings.apk не хочет зараза
    хотел добавить в настройки меню автозапуска приложений при старте системы, как здесь написано http://forum.xda-developers.com/show....php?t=2626333
  • Старый 10.02.2014, 06:50
    Сообщение от Brick Top
    не получается декомпилировать Settings.apk по этому туториалу пробую другие apk, всё получается, а settings.apk не хочет зараза
    хотел добавить в настройки меню автозапуска приложений при старте системы, как здесь написано http://forum.xda-developers.com/show....php?t=2626333
    получилось таки декомпилировать. просто для того чтобы декомпилировать settings.apk, надо сначала установить framework-res.apk командой apktool if framework-res.apk, а потом уже можно сам settings.apk декомпилировать, редактировать, компилировать обратно и подписывать.
  • Старый 06.03.2014, 14:12
    Ещё как вариант. Можно воспользоваться APKmanager'ом. Функции на скриншоте:



    Для работы с приложением просто закиньте файл *.apk по пути: APKmanager/place-apk-here-for-modding. После модификации (чего нам там было нужно), компилируем, подписываем и находим модифицированный apk всё в той же папке под таким названием signed*(название вашего приложения).apk

    Совет: Для редактирования используйте Notepad++ с кодировкой UTF 8 (без BOM) тогда будет меньше проблем

    Скачать APKmanager:

    Cкачать:



    <phrase 1= mdforum.ru_APKmanager_5.1.zip
  • Старый 22.03.2014, 18:03
    Подскажите пожалуйста, где искать причину при моей задаче.
    Мне нужно на базе одного .apk приложения создать несколько приложений с изменениями и установить их все на одно устройство (лично для себя).
    Декомпиляция, изменения и новая компиляция с подписью сделаны по описанию автора этой темы.
    Отдельно новое приложение работает, но если на устройстве остаётся 1-й вариант программы, то следующие не устанавливаются, идут сообщения об ошибках подписи, что приложение уже установлено и т.д.
    Название программы в декомпелируемых файлах правилось, менялись графические файлы, также изменены названия установочных файлов и цифровая подпись.
    Устройство всё равно видит эту изменённую программу как предыдущую.
    Какая может быть причина, кроме как в названиях? На что обратить внимание.
  • Старый 22.03.2014, 19:51
    Сообщение от motofoto
    Подскажите пожалуйста, где искать причину при моей задаче.
    Мне нужно на базе одного .apk приложения создать несколько приложений с изменениями и установить их все на одно устройство (лично для себя).
    Декомпиляция, изменения и новая компиляция с подписью сделаны по описанию автора этой темы.
    Отдельно новое приложение работает, но если на устройстве остаётся 1-й вариант программы, то следующие не устанавливаются, идут сообщения об ошибках подписи, что приложение уже установлено и т.д.
    Название программы в декомпелируемых файлах правилось, менялись графические файлы, также изменены названия установочных файлов и цифровая подпись.
    Устройство всё равно видит эту изменённую программу как предыдущую.
    Какая может быть причина, кроме как в названиях? На что обратить внимание.
    даже не знаю. похоже что надо править еще что-то в каждом отдельном apk чтобы оно не распознавалось системой как уже установленное. что конкретно я не знаю.
    или может эти приложения все используют один путь для хранения данных, или как-то так. и поэтому конфликт.
    затрудняюсь ответить

    если разберётесь, пожалуйста отпишитесь здесь. интересно.
  • Старый 22.03.2014, 20:40
    motofoto, а попробуй в файле AndroidManifest.xml в поле package=com.xxxxx.xxxfgd добавь пару символов, мб получится так, или ты уже так пробовал?
  • Старый 22.03.2014, 21:58
    Brick Top, Fish спасибо!

    Сообщение от Fish
    а попробуй в файле AndroidManifest.xml в поле package=com.xxxxx.xxxfgd добавь пару символов, мб получится так, или ты уже так пробовал?
    Попробовал и появились обнадеживающие изменения.
    Теперь у программы происходит процесс установки. Устройство сообщает, что "Приложение установлено", задаёт вопрос: "Открыть?".
    По итогу получаю: "В приложении "made_by_me" произошла ошибка.
    В установленных программах приложение не обнаружено. При установке от другого пользователя этого устройства происходит всё тоже самое.
    В общем, уже лучше и где то очень рядом : )
    Поиск решения продолжается
  • Старый 22.03.2014, 22:14
    Сообщение от motofoto
    Попробовал и появились обнадеживающие изменения.
    Теперь у программы происходит процесс установки. Устройство сообщает, что "Приложение установлено", задаёт вопрос: "Открыть?".
    По итогу получаю: "В приложении "made_by_me" произошла ошибка.
    В установленных программах приложение не обнаружено. При установке от другого пользователя этого устройства происходит всё тоже самое.
    В общем, уже лучше и где то очень рядом : )
    Поиск решения продолжается
    нашел кое-что вроде

    Спойлер

    Каждое приложение должно быть подписано подписью. Подпись содержит в себе контрольные суммы всех файлов, находящихся в составе APK. Если изменить какой-либо файл в APK без его переподписывания, то он не установится из-за несовпадения контрольной суммы файла с нужной. Примерно тоже самое происходит и при попытке Play Маркета обновить изменённое приложение.
    Подписывается APK с помощью ключа, который создаётся один раз. Этот ключ содержит в себе информацию о разработчике, а также некоторые другие данные (например, дата и время создания), которые пресекают возможность создания 'дубликата' ключа.
    Из-за особенностей Android'а, подписанное разными ключами одно и тоже приложение нельзя установить поверх друг друга. Именно поэтому в описаниях к модам обычно пишут "Удалите оригинал перед установкой мода".
    При наличии root-прав, это ограничение можно обойти с помощью использования третьего патча системы в Lucky Patcher .
  • Старый 22.03.2014, 23:06
    Fish, спасибо!

    Жестоко от Гугла, но наверное правильно.
    Но не хочется лезть в этот патчер и к тому же с root правами...

    С другой стороны, моя задача не претендует на уникальное название программы, другие уникальные вещи, которые должны соответствовать первоисточнику.
    Главное, чтобы функциональность частично соответстовала первоисточнику.
    Теоретически может быть вариант удаления такой подписи/ключа, а практически?
  • Старый 22.03.2014, 23:17
    Сообщение от motofoto
    Предположительно может быть вариант удаления такой подписи/ключа?
    хз честно, я особо этим не занимался, чтобы конкретно тебе что-то ответить, знаю, что подпись находится в папке META-INF (там три файла), мб там чего-то поправить/исправить можно...
  • Старый 06.04.2014, 18:32
    Подскажите кто-нибудь. Пытаюсь сделать
    <uses-permission android:name="android.permission.REBOOT"/>

    PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    powerManager.reboot(null);

    Пишет java.lang.SecurityException: Neither user 10076 nor current process has android.permission.REBOOT. Написано что нужно подпись файла apk поставить с помощью signapk.jar чтобы права на перезагрузку получить. Файл apk я подписал с помощью signapk.jar. Но прав на перезагрузку по видимому все равно нет.

    Такая штука в манифесте есть
    android:sharedUserId="android.uid.system"
  • Старый 06.04.2014, 21:35
    Сообщение от alex_m106
    Подскажите кто-нибудь. Пытаюсь сделать
    <uses-permission android:name="android.permission.REBOOT"/>
    PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    powerManager.reboot(null);
    Пишет java.lang.SecurityException: Neither user 10076 nor current process has android.permission.REBOOT. Написано что нужно подпись файла apk поставить с помощью signapk.jar чтобы права на перезагрузку получить. Файл apk я подписал с помощью signapk.jar. Но прав на перезагрузку по видимому все равно нет.
    Такая штука в манифесте есть
    android:sharedUserId="android.uid.system"
    а посмотрите тут: http://stackoverflow.com/questions/3...urityexception Там вроде есть решение... типа дать права суперюзера и все, но нужно будет, чтобы телефон был с рутом. Я если честно не очень понимаю о чем здесь идет речь т.к. не занимался этим всем никогда и не являюсь разрабом, но ошибка там похожая
  • Старый 07.04.2014, 12:32
    Сообщение от Fish
    а посмотрите тут: http://stackoverflow.com/questions/3...urityexception Там вроде есть решение... типа дать права суперюзера и все, но нужно будет, чтобы телефон был с рутом. Я если честно не очень понимаю о чем здесь идет речь т.к. не занимался этим всем никогда и не являюсь разрабом, но ошибка там похожая
    Там как раз написано что нужно подписать свою апликуху системным сертификатом. Либо дать ей рут права и использовать su -c reboot. Рут не удалось дать, пробовал разными прогами. Апликуху подписал вроде, да не работает получается. Прав на перезагрузку так и нет. Либо ключ не тот с которым подписал.
  • Старый 13.08.2014, 21:55
    При установке jdk-8u11-windows-i586.exe и jre-8u11-windows-i586.tar.gz выпадает меню:
    Точка входа в процедуру RegDeleteKeyExA не найдена в библиотеке DLL ADVAPI32.dll
    Что может быть?
  • Старый 13.08.2014, 22:06
    Сообщение от NiKNvo
    Что может быть?
    ОС windows какая?
  • Старый 14.08.2014, 09:38
    Сообщение от Fish
    ОС windows какая?
    Windows XP (Zver 2013) Слаб в програмировании. Есть мысль на базе Dark-birthday создать ежедневник-напоминатель. Но не могу разобрать арк, изменить и вновь собрать. Может поможите, спасибо за внимание.
  • Старый 14.08.2014, 14:06
    Сообщение от NiKNvo
    Windows XP (Zver 2013) Слаб в програмировании. Есть мысль на базе Dark-birthday создать ежедневник-напоминатель. Но не могу разобрать арк, изменить и вновь собрать. Может поможите, спасибо за внимание.
    погуглил чуть, и сразу на поверхности нашел. похоже инсталлятор может быть не совместим с некоторыми версиями Windows XP
    есть установка в ручную, погугли сразу найдешь.
  • Старый 14.08.2014, 16:06
    Сообщение от Brick Top
    погуглил чуть, и сразу на поверхности нашел. похоже инсталлятор может быть не совместим с некоторыми версиями Windows XP
    есть установка в ручную, погугли сразу найдешь.
    тоже самое вчера видел, проблема в XP т.к. Java 8 особо не оптимизировали под хрюшу, никто этим особо не занимался
  • Старый 14.08.2014, 18:39
    Сообщение от Fish
    motofoto, а попробуй в файле AndroidManifest.xml в поле package=com.xxxxx.xxxfgd добавь пару символов, мб получится так, или ты уже так пробовал?
    Установил Windows 7 Max все ОК. Как установить JDK (Сколько packages) и как JRE.
    Извините, не разу не занимался этим.
  • Чтобы скачивать фаилы и оставлять сообщения на форуме зарегистрируйтесь



Powered by vBulletin® Version 3.8.8 Beta 1
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot