Конец эпохи ARMv7 или же немного о портировании игр

Вступление


Пару недель назад я столкнулся с проблемой отсутствия у игры поддержки архитектуры моего процессора в телефоне. Конечно, я знал, что ARMv7 устареет, но не ожидал, что это случиться так быстро. В сети особо информации по downgrade приложения не было, поэтому пришлось немного импровизировать, вспоминая времена, когда пропала поддержка ARMv6. Так что, в данной статье речь пойдёт о переносе приложений с архитектуры ARMv8 на ARMv7, на основе моего опыта.
Тема с портированием андроид игр с одной архитектуры на другую весьма неновая. Изначально я столкнулся с этим ещё в 2015 году, только речь шла о портировании под ARMv6. С тех пор принцип переноса не поменялся, и перенести игру с одной архитектуры на другую может любой, если имеет необходимые библиотеки.

Разбор apk


Итак, что такое .apk? APK файл представляет из себя немного модифицированный ZIP архив, который содержит ресурсы игры и игровой движок. Выглядит он примерно так:

image

Папка lib — ключевая точка при переносе между архитектурами. Она содержит библиотеки движка нашей игры.
* armeabi — armv6 библиотеки (не актуально)
* armeabi-v7a — armv7 библиотеки (при отсутствии папки — отсутствует и поддержка архитектуры)
* arm64-v8a — armv8×64 библиотеки

Перенос


Шаг #1


Первым делом нам нужно узнать, возможно ли портировать игру. Для этого нужно определить движок игры. К примеру, файл lib/libunity.so — принадлежит Unity Engine, а по наличию папки assets/x-renpy можно догадаться, что игра разработана на RenPy Engine. Если у игры движок не является собственным, то переходим к шагу два.

Шаг #2


Итак, мы определили движок игры. Теперь нам нужно найти подходящего донора. Если эта игра раньше поддерживалась вашим аппаратом, а после обновления перестала — то можно попробовать вскрыть ресурсы прошлых версий. Если этот вариант не подошёл, то можно поискать игры, базирующиеся на этом же движке. Иногда разработчики просто не добавляют поддержку armv7, так что есть вероятность найти нужные компоненты.

Шаг #3


Мы нашли подходящего донора, теперь нам нужно добавить папку lib/armeabi-v7a в наш (name).apk. Добавляем и видим следующее:

image

В самом начале, как я уже сказал, APK файл представляет из себя немного модифицированный ZIP архив, а после изменения его содержимого он становится обычным ZIP’ом.

Шаг #4


Для того, чтобы ваше устройство могло установить ваш (name).apk файл, его нужно «подписать». Для этого есть несколько различных утилит, к примеру apk-signer.

Устанавливаем утилиту на свой девайс, открываем, переходим в раздел Signing, нажимаем на карандаш снизу и выбираем наш (name).apk. После чего программа предложит вам выбрать, куда сохранить «подписанный файл». Выбираем и ждём. ??? PROFIT!!!

image

Шаг #5


Будь добрым человеком, выложи свой порт для общего пользования, к примеру, в топик игры на том же 4PDA. ;-)

Некоторые lib’ы


Unity 3.* for ARMv6: yadi.sk/d/XGHn309ORuPgeg


RenPy ARMv7: yadi.sk/d/_U-hnz8D-J7D-Q

© Habrahabr.ru