RuCore.NET

Портирование и модификация APK для Андроид





Доброго времени суток, уважаемый энтузиаст Android. Я очень долгое время изучал различные языки программирования (в основном HTML, CSS и JavaScript), способы, лазил по американским сайтам профессиональных разработчиков, в том числе XDA, Google developers и т.д., и наконец понял что от чего зависит в этом сложном и ещё не изведанном мире моей любимой  операционной системы. На всю эту работу у меня ушло больше 1.5 года. Теперь, я решил передать свои знания, чтобы вам не тратить лишнего времени. Конечно, благодаря этому уроку вы не научитесь языкам программирования, вы просто узнаете “шаблон” , по которому просто можно портировать игры и приложения с ARMv7 на ARMv6, изменять максимальную поддерживаемую версию Android OS и взламывать игры.

Ведь эти крякнутые и портированные игры не из воздуха берутся в Интернете.



 

Первое о чём я расскажу – просмотр исходного кода *.apk

Для начала установите Java Машину , и зайдите в Apk Manager Multi Tool, при помощи файла Script.bat, что находится в папке APK Manager. Программа рабочая. От нас требуется выбрать файл, который мы будем распаковывать. Пишем в открывшейся консоли 25 и жмём Enter, и выбираем .apk файл (изначально кладите их в папку place-apk-here-for-modding, имя файла делайте коротким, и без всяких знаков, нужно чтоб имя файла не было Horn&^%,q~`.apk, лучший вариант — сократить до Horn.apk)

После того, как мы выбрали файл, с которым будем работать в консоли пишем цифру 9 и жмём Enter. Видим как идёт процесс декомпиляции.

После этого идём в папку Projects (в папке с APK менеджером). Видим папку Horn.apk (Имя Horn я использую как пример). В этой папке и лежат заветные исходники. Точно так же мы заходим в менеджер и нажимаем 11 (компиляция/сборка *.apk). Apk запаковывается. Вот и весь способ распаковки и запаковки приложений. Далее мы будем применять этот способ для портирования и изменения поддерживаемой версии Android OS.

Изменение максимально поддерживаемой версии Android OS.

Допустим, игра требует высокую версию Android, например 4.1, но ведь далеко не все ещё обновились на эту версию, и многие вряд ли когда-нибудь смогут обновиться. Для этого и предназначен следующий способ.

Распаковываем .apk и заходим в файл AndroidManifest.xml и ищем строчку:

<uses-sdk android:minSdkVersion=»число» />

“Число” здесь играет роль поддерживаемой версии Android, но не саму версию, а код этой версии, точнее сказать – уровень API. Все они указаны в этой таблице ниже:

Версия Android OS

Уровень API

Android 4.1, 4.1.1

16

Android 4.0.3, 4.0.4

15

Android 4.0, 4.0.1, 4.0.2

14

Android 3.2

13

Android 3.1x

12

Android 3.0x

11

Android 2.3.4

Android 2.3.3

10

Android 2.3.2

Android 2.3.1

Android 2.3

9

Android 2.2x

8

Android 2.1x

7

Android 2.0.1

6

Android 2.0

5

Android 1.6

4

Android 1.5

3

Android 1.1

2

Android 1.0

1

Подставляем нужное нам число, НО сразу предупреждаю – не ставьте слишком низкое число, например для очень классной игры, иначе приложение не откроется, и вы увидите на экране телефона весёлую надпись  “Приложение не отвечает. Подождать ?” . Чтобы такой ошибки не возникло вполне хватит цифры от 8 до 10.

 

Дополнительно, для тех, кто хоть что-то понимает в HTML.

Если в атрибуты дописать android:maxSdkVersion=»11″, то мы сможем установить максимальную версию Android для этого приложения. Это уменьшит качество приложения, и будет более работоспособнее. В конечном итоге должно быть, например, так :

<uses-sdk android:minSdkVersion=»8″ android:maxSdkVersion=»11″/>

(Тем самым мы установили минимальную версию APi – 8,и максимальную — 11)

Далее сохраняем файл, и компилируем .apk. ГОТОВО ! Одно мы научились делать.

Приступим к изменению Видео ускорителя (Nvidia Tegra, Mali, Adreno, PowerVR)

Таким же способом, что и выше декомпилируем .apk, заходим в AndroidManifest.xml  и ищём строчку

<uses-feature android:glEsVersion=»многозначное число» />

Я в этот раз не стану нагружать Вас разными цифрами, и рассказывать, что к чему. Просто вместо числа напишите слово integer (Поддержка всех видео ускорителей). То есть в конечном результате получается так :

<uses-feature android:glEsVersion=»integer » />

Специально для Adreno 200-205 и слабых устройств – пишем число 65537 или 65536.

Эту тему изучили.

Ещё хотелось бы рассказать о постоянной проблеме – это когда файлы не перемещаются на sdcard.

Заходим в AndroidManifest.xml и находим строку или двустрочную надпись (обычно в самом верху)

<manifest android:versionCode=»1″ android:versionName=»1.0″ android:installLocation=»Куда устанавливать ?!» package=»com.Diman1998.Game»

xmlns:android=»http://Хост/apk/res/android»>

Следует вместо Куда устанавливать ?! прописать одно из следующих значений :

Значение

Объяснение

internalOnly

Приложение будет устанавливать только на внутреннюю память, и не даст разрешения на перенос на внешний носитель

auto

По умолчанию установит на внутреннюю память, но есть возможность перемещения на sdcard

preferExternal

Функция переводится как “предпочитать внешнюю память”. То есть приложение будет устанавливать сразу на внешний носитель, но нет гарантии, что оно будет это выполнять на 100%

То есть, если мы хотим, чтобы приложение установилось на внутреннюю память, но была возможность перемещения на sdcard, то пишем auto. В итоге получается :

<manifest android:versionCode=»1″ android:versionName=»1.0″ android:installLocation=»auto» package=»com.Diman1998.Game»

xmlns:android=»http://Хост/apk/res/android»>

Запаковываем, и вуаля ! Всё переноситься.

Далее самое интересное – как портировать игры с ARMv7 на ARMv6 !

Каждое приложение содержит библиотеки + реестр (в одном, или нескольких файлах) для использовании его на сильных устройствах. Также бывает графические библиотеки, будем называть их “Либы”(от англ. Libs)

В графических библиотеках содержаться только те текстуры, которые должны воспроизводиться только на ARMv7. В основном это mpg текстуры (libmpg.so или что-то похожее). Ещё есть звуковые файлы высокого качества, работают по такому же принципу как и графические. В основном это .vorbis формат (libvorbisidec.so или что-то похожее)

Приступим к делу,

Декомпилируем .apk и заходим в папку lib / libs   ищем папку armeabi-v7a, и просто изменяем её название на armeabi. И просто запаковываем. Это самый ленивый способ и самый малоработоспособный.

Только если ты не опустил руки. Значит ты действительно хочешь узнать как это делается, что даже не поленился пролистать 4 страницы, то вот инструкция

P.S. Я же не корыстный человек, всё только для Вас, чтобы вы продолжили моё дело.

Как написано выше папку armeabi-v7a копируете в текущую папку (lib)

И переименуйте её в armeabi. В итоге у Вас получается две папки – armeabi и armeabi-v7a.

После этого папку lib переименуйте в libs – для тех, кто знает английский – мы поменяли единственное число (библиотека) на множественное (библиотеки).

У Вас должно быть 4 готовых варианта .apk для ARMv6 и все должны быть разные. Сейчас объясню.

Первый .apk – Всё как написано выше и запаковываем. (без доп. действий)

Второй .apk – Если в папке armeabi у Вас есть графический lib, то удалите его и запаковывайте

Третий .apk — Если в папке armeabi у Вас есть звуковой lib, то удалите его и запаковывайте

Четвёртый .apk — Если в папке armeabi у Вас есть графический и звуковой lib, то удалите их обоих и запаковывайте.

Если ни один из них не идёт на 800mhz + ARMv6, то либо вы что-то не правильно сделали, либо игра НЕ портируется на ARMv6.



Поделись статьей с друзьями


114 просмотров



Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: