Пару недель назад я столкнулся с проблемой отсутствия у игры поддержки архитектуры моего процессора в телефоне. Конечно, я знал, что ARMv7 устареет, но не ожидал, что это случится так быстро. В сети особо информации по downgrade приложения не было, поэтому пришлось немного импровизировать, вспоминая времена, когда пропала поддержка ARMv6. Так что, в данной статье речь пойдёт о переносе приложений с архитектуры ARMv8 на ARMv7, на основе моего опыта.
Тема с портированием андроид игр с одной архитектуры на другую весьма неновая. Изначально я столкнулся с этим ещё в 2015 году, только речь шла о портировании под ARMv6. С тех пор принцип переноса не поменялся, и перенести игру с одной архитектуры на другую может любой, если имеет необходимые библиотеки.
Разбор apk
Итак, что такое .apk? APK файл представляет из себя немного модифицированный ZIP архив, который содержит ресурсы игры и игровой движок. Выглядит он примерно так:
НЕДЕЛЯ с Redmi 7A ОБЗОР за 5 ТЫСЯЧ рублей
Папка lib — ключевая точка при переносе между архитектурами. Она содержит библиотеки движка нашей игры.
* armeabi — armv6 библиотеки (не актуально)
* armeabi-v7a — armv7 библиотеки (при отсутствии папки — отсутствует и поддержка архитектуры)
* arm64-v8a — armv8 x64 библиотеки
Перенос
Шаг #1
Первым делом нам нужно узнать, возможно ли портировать игру. Для этого нужно определить движок игры. К примеру, файл lib/libunity.so — принадлежит Unity Engine, а по наличию папки assets/x-renpy можно догадаться, что игра разработана на RenPy Engine. Если у игры движок не является собственным, то переходим к шагу два.
Шаг #2
Итак, мы определили движок игры. Теперь нам нужно найти подходящего донора. Если эта игра раньше поддерживалась вашим аппаратом, а после обновления перестала — то можно попробовать вскрыть ресурсы прошлых версий. Если этот вариант не подошёл, то можно поискать игры, базирующиеся на этом же движке. Иногда разработчики просто не добавляют поддержку armv7, так что есть вероятность найти нужные компоненты.
Шаг #3
Мы нашли подходящего донора, теперь нам нужно добавить папку lib/armeabi-v7a в наш (name).apk. Добавляем и видим следующее:
В самом начале, как я уже сказал, APK файл представляет из себя немного модифицированный ZIP архив, а после изменения его содержимого он становится обычным ZIP’ом.
Шаг #4
Для того, чтобы ваше устройство могло установить ваш (name).apk файл, его нужно «подписать». Для этого есть несколько различных утилит, к примеру apk-signer.
Устанавливаем утилиту на свой девайс, открываем, переходим в раздел Signing, нажимаем на карандаш снизу и выбираем наш (name).apk. После чего программа предложит вам выбрать, куда сохранить «подписанный файл». Выбираем и ждём. . PROFIT.
ТОП-7 МИНУСОВ ПОСЛЕ КОТОРЫХ ТЫ НЕ КУПИШЬ XIAOMI REDMI 7A!
Шаг #5
Будь добрым человеком, выложи свой порт для общего пользования, к примеру, в топик игры на том же 4PDA. 😉
Источник: habr.com
В чем разница между armeabi-v7a, arm64-v8a, x86?
Я работаю над приложением для Android на Kivy. Я использую Buildozer для компиляции файла APK. В файле спецификации Buildozer есть настройка android.arch = armeabi-v7a , я этого не понял.
Кроме того, когда я сгенерировал файл APK с помощью команды buildozer -v android debug и установил его с помощью команды adb install bin/.apk , он не открылся на моем телефоне Android.
Chitkaran Singh 30 Июн 2019 в 14:38
2 ответа
Это наборы инструкций процессора. В основном вам не нужно об этом беспокоиться, по умолчанию все в порядке, но я хотел добавить что-то об этом в документы из-за некоторых недавних изменений.
По сути, данное Android-устройство может иметь руку или процессор x86 (или даже что-то еще, но это не важно), это просто разные типы архитектуры от разных производителей. Процессоры Arm наиболее распространены, но x86 не является чем-то необычным. Когда вы компилируете код, результат зависит от целевой архитектуры. Когда вы создаете приложение Kivy, вы указываете одну из архитектур, и тогда приложение будет работать только на этом типе устройства. Если вы хотите поддерживать все устройства, вы можете скомпилировать несколько APK для распространения — магазин Play позволит вам загрузить более одного и отправит каждому устройству нужный.
В рамках данного типа архитектуры существует несколько версий. armeabi-v7a — старая цель, для 32-битных процессоров рук почти все устройства рук поддерживают эту цель. arm64-v8a — более поздняя 64-битная цель (аналогично переходу 32-бит -> 64-бит в настольных компьютерах). Я думаю, что большинство новых устройств 64-битные, но не уверен. Устройства arm64-v8a могут запускать код, скомпилированный для armeabi-v7a, он обратно совместим.
Начиная с конца этого года, магазин Play потребует от вас загрузки как минимум APK-файла arm64-v8a, потому что это обеспечивает наилучшую поддержку для новых устройств. Вы также сможете загружать другие APK для поддержки других типов устройств.
Это еще не все: некоторые x86-устройства имеют специальную библиотеку, позволяющую запускать код, скомпилированный для ARM-устройств. Я не уверен, насколько это распространено, но кажется довольно распространенным.
При возникновении проблемы с приложением используйте adb logcat, чтобы узнать, что не так.
inclement 30 Июн 2019 в 15:23
adb install просто устанавливает ваш apk , но не запускает его. Вы можете запустить его так же, как любое другое установленное приложение.
John Anderson
30 Июн 2019 в 16:00
: спасибо за информацию дружище. Я новичок в разработке Android и немного знаю о adb logcat. Не могли бы вы рассказать мне немного об этом, пожалуйста.
Chitkaran Singh
30 Июн 2019 в 20:18
Андерсон: Да, я сделал это. Приложение устанавливается без проблем, но когда я пытаюсь его открыть, оно просто резко закрывается.
Chitkaran Singh
30 Июн 2019 в 20:22
Следуйте инструкциям, которые я связал. Если у вас есть проблема с ними, задайте конкретный вопрос об этом, возможно, в новом вопросе SO.
30 Июн 2019 в 20:28
Вам также может оказаться более полезным задать вопрос на канале Kivy в дискорде.
30 Июн 2019 в 20:29
Чтобы было ясно, это не наборы инструкций. Это ABI, которые компилируются в наборы инструкций. Большинство современных устройств — arm64-v8a , самые дешевые устройства — armeabi-v7a для экономии средств, и почти нет x86 или x86_64 .
Например armeabi-v7a ABI компилируется в набор инструкций armeabi , thumb-2 и VFPv3-D16 , но arm64-v8a ABI компилируется в набор инструкций AArch64 .
Каждая комбинация процессора и набора инструкций имеет свой собственный двоичный интерфейс приложений (ABI). ABI включает в себя следующую информацию:
Набор инструкций ЦП (и расширения), которые можно использовать. То порядок следования порядков хранения и загрузки памяти во время выполнения. Андроид всегда с прямым порядком байтов.
Соглашения о передаче данных между приложениями и системы, включая ограничения выравнивания и то, как система использует стек и регистрируется при вызове функций. Формат исполняемые двоичные файлы, такие как программы и разделяемые библиотеки, а также типы контента, которые они поддерживают. Android всегда использует ELF. Для большего информацию см. в разделе Бинарный интерфейс приложения ELF System V. Как С++ имена искажены. Дополнительные сведения см. в разделе Generic/Itanium C++ ABI. источник
Источник: question-it.com
Armeabi v7a что это
Недавно мы рассказывали вам о том, как узнать DPI дисплея вашего Android устройства, которое необходимо знать для выбора правильного APK файла приложения, которое вы хотите установить на него вручную. Однако, при этом зачастую нужно знать еще и тип процессора: ARM, ARM64 или x86, который используется в вашем смартфоне или планшете.
Как оказалось, многие владельцы Android устройств не имеют никакого представления об этом. Поэтому сегодня речь пойдет о том, как можно получить эти сведения.
Самым простым способом узнать тип процессора на базе которого выполнен ваш смартфон, планшет или другое Android устройство будет установить на него приложение Droid Hardware Info.
Это приложение доступно для скачивания с этой страницы Google Play Маркет совершенно бесплатно и после его запуска вы увидите на экране смартфона следующую информацию (слева — данные о смартфоне Nexus 5, справа — информация о Nexus 6):
В самой первой строке с наименованием «CPU architecture» вы увидите одно из значений: ARMv7, AArch64 или x86, а в строке «Insructions Set»: armeabi, arm64 или x86abi.
Соответствие этих значений типу вашего процессора приведено ниже:
ARM: ARMv7 или armeabi
ARM64: AArch64 или arm64
x86: x86 или x86abi
Есть еще один достаточно простой способ узнать тип процессора вашего смартфона, планшета или другого устройства, который знаком пользователям Linux
Для этого вам нужно установить на свое устройство из Google Play Маркет приложение Terminal Emulator, запустить его и выполнить следующую команду:
На экране при этом отобразится информация о процессоре в следующей форме:
Как вы уже, наверняка поняли, нам нужна информация из самой первой строки «Processor:»
Xamarin. Android поддерживает несколько архитектур ЦП, включая 32-разрядные и 64-разрядные устройства. В этой статье объясняется, как выбрать для приложения одну или несколько архитектур ЦП, поддерживаемых Android. Xamarin.Android supports several CPU architectures, including 32-bit and 64-bit devices. This article explains how to target an app to one or more Android-supported CPU architectures.
Обзор архитектуры ЦП CPU Architectures Overview
При подготовке приложения к выпуску необходимо указать архитектуру ЦП платформы, которую поддерживает ваше приложение. When you prepare your app for release, you must specify which platform CPU architectures your app supports. Один APK-файл может содержать код для нескольких различных архитектур. A single APK can contain machine code to support multiple, different architectures.
Каждая коллекция кода, зависящего от архитектуры, связана с двоичным интерфейсом приложения (ABI). Each collection of architecture-specific code is associated with an Application Binary Interface (ABI). Каждый интерфейс ABI определяет, как должен взаимодействовать этот машинный код с Android во время выполнения. Each ABI defines how this machine code is expected to interact with Android at run time.
Дополнительные сведения о том, как это работает, см. в статье многоядерные устройства Xamarin.Android.
Указание поддерживаемых архитектур How to Specify Supported Architectures
Как правило, при настройке приложения для выпускавы явно выбрали архитектуру (или архитектуры). Typically, you explicitly select an architecture (or architectures) when your app is configured for Release. Если приложение настроено для отладки, для параметра использовать общую среду выполнения и используются параметры быстрого развертывания , что отключает явный выбор архитектуры. When your app is configured for Debug, the Use Shared Runtime and Use Fast Deployment options are enabled, which disable explicit architecture selection.
В Visual Studio щелкните правой кнопкой мыши проект в Обозреватель решений и выберите пункт свойства. In Visual Studio, right-click on your project under the Solution Explorer and select Properties. На странице Параметры Android проверьте раздел Свойства упаковки и убедитесь, что параметр использовать общую среду выполнения отключен (отключение позволяет явно выбрать, для какой ABI требуется поддержка). Under the Android Options page check the Packaging properties section and verify that Use Shared Runtime is disabled (turning this off allows you to explicitly select which ABIs to support). Нажмите кнопку Дополнительно и в разделе Поддерживаемые архитектурыпроверьте архитектуры, которые требуется поддерживать. Click the Advanced button and, under Supported architectures, check the architectures that you want to support:
Как правило, при настройке приложения для выпускавы явно выбрали архитектуру (или архитектуры). Typically, you explicitly select an architecture (or architectures) when your app is configured for Release. Если приложение настроено для отладки, включаются параметры использовать совместное использование среды выполнения Mono и быстрое развертывание сборок , что предотвращает выбор явной архитектуры. When your app is configured for Debug, the Use shared Mono runtime and Fast assembly deployment options are enabled, which prevent explicit architecture selection.
В Visual Studio для Mac выберите проект на панели решения , щелкните значок шестеренки рядом с проектом и выберите Параметры. In Visual Studio for Mac, locate your project in the Solution pad, click the gear icon next to your project and select Options. В диалоговом окне Параметры проекта щелкните Сборка Android. In the Project Options dialog, click Android Build.
Перейдите на вкладку Общие и убедитесь, что параметр использовать общую среду выполнения Mono отключен (отключить этот параметр позволяет явно выбрать, для какой ABI поддерживать). Click the General tab and verify that Use shared Mono runtime is disabled (turning this off allows you to explicitly select which ABIs to support). Перейдите на вкладку Дополнительно и в разделе Поддерживаемые ABIпроверьте ABI для архитектур, которые требуется поддерживать. Click the Advanced tab and, under Supported ABIs, check the ABIs for the architectures that you want to support:
Xamarin.Android поддерживает следующие варианты архитектуры: Xamarin.Android supports the following architectures:
- armeabi – процессоры на базе ARM, поддерживающие по меньшей мере набор инструкций ARMv5TE. armeabi – ARM-based CPUs that support at least the ARMv5TE instruction set. Обратите внимание, что armeabi не является потокобезопасным и не следует использовать на многопроцессорных устройствах. Note that armeabi is not thread-safe and should not be used on multi-CPU devices.
Начиная с Xamarin. Android 9,2, armeabi больше не поддерживается. As of Xamarin.Android 9.2, armeabi is no longer supported.
ARMEABI-v7a – процессоры на базе ARM с аппаратными операциями с плавающей запятой и устройствами с несколькими ЦП (SMP). armeabi-v7a – ARM-based CPUs with hardware floating-point operations and multiple CPU (SMP) devices. Обратите внимание, что armeabi-v7a машинный код не будет выполняться на устройствах ARMv5. Note that armeabi-v7a machine code will not run on ARMv5 devices.
arm64-v8a – процессоры на основе архитектуры 64-bit ARMv8. arm64-v8a – CPUs based on the 64-bit ARMv8 architecture.
Процессоры x86 –, поддерживающие набор инструкций x86 (или IA-32). x86 – CPUs that support the x86 (or IA-32) instruction set. Этот набор инструкций эквивалентен инструкциям Pentium Pro, включая MMX, SSE, SSE2 и SSE3. This instruction set is equivalent to that of the Pentium Pro, including MMX, SSE, SSE2, and SSE3 instructions.
x86_64 Процессоры, поддерживающие 64-разрядный x86 (также называемый x64 и AMD64). x86_64 CPUs that support the 64-bit x86 (also referred as x64 and AMD64) instruction set.
Для Xamarin. Android по умолчанию используется armeabi-v7a для сборок выпуска . Xamarin.Android defaults to armeabi-v7a for Release builds. Этот параметр обеспечивает значительно большую производительность, чем armeabi . This setting provides significantly better performance than armeabi . Если вы нацелены на платформу 64-разрядной ARM (например, в табличное размещение 9), выберите arm64-v8a . If you are targeting a 64-bit ARM platform (such as the Nexus 9), select arm64-v8a . Если вы развертываете приложение на устройстве x86, выберите x86 . If you are deploying your app to an x86 device, select x86 . Если целевое устройство x86 использует архитектуру с 64-разрядным ПРОЦЕССОРом, выберите x86_64 . If the target x86 device uses a 64-bit CPU architecture, select x86_64 .
Нацеливание на несколько платформ Targeting Multiple Platforms
Чтобы ориентироваться на несколько архитектур ЦП, можно выбрать несколько интерфейсов ABI (за счет увеличения размера файла APK). To target multiple CPU architectures, you can select more than one ABI (at the expense of larger APK file size). Можно использовать параметр создать один пакет (. apk) для каждого выбранного параметра ABI (см. описание в разделе Установка свойств упаковки), чтобы создать отдельный APK для каждой поддерживаемой архитектуры. You can use the Generate one package (.apk) per selected ABI option (described in Set Packaging Properties) to create a separate APK for each supported architecture.
Вам не нужно выбирать arm64-v8a или x86_64 для целевых 64-разрядных устройств. 64-разрядная поддержка не требуется для запуска приложения на 64-разрядном оборудовании. You do not have to select arm64-v8a or x86_64 to target 64-bit devices; 64-bit support is not required to run your app on 64-bit hardware. Например, 64-разрядные устройства ARM (например, в виде хранилища 9) могут запускать приложения, настроенные для armeabi-v7a . For example, 64-bit ARM devices (such as the Nexus 9) can run apps configured for armeabi-v7a . Основное преимущество поддержки 64-разрядной версии заключается в том, чтобы предоставить приложению возможность обращаться к большему объему памяти. The primary advantage of enabling 64-bit support is to make it possible for your app to address more memory.
Начиная с августа 2018 г. новые приложения должны будут использовать API уровня 26, а с августа 2019 г. будет необходимо выпускать 64-разрядные версии приложений в дополнение к 32-разрядным. From August 2018 new apps will be required to target API level 26, and from August 2019 apps will be required to provide 64-bit versions in addition to the 32-bit version.
Дополнительные сведения Additional Information
В некоторых ситуациях может потребоваться создать отдельный APK для каждой архитектуры (чтобы уменьшить размер APK, или потому, что приложение имеет общие библиотеки, характерные для конкретной архитектуры ЦП). In some situations, you may need to create a separate APK for each architecture (to reduce the size of your APK, or because your app has shared libraries that are specific to a particular CPU architecture). Дополнительные сведения об этом подходе см. в разделе Build ABI-пакетов apk. For more information about this approach, see Build ABI-Specific APKs.
armeabi – понятно. Эта архитектура на всех (или почти на всех) реальных гаджетах.
x86 – вроде тоже понятно. Это прежде всего для Genymotion и прочих эмуляторов, где Android x86.
А mips и armeabi-v7a используются где-нибудь?
Вангую, что v7a это просто версия armeabi, почему не ограничиваться простым armeabi?
Источник: 4systems.ru