Навіщо використовувати код Armeabi-v7a над кодом Armeabi?


141

У своєму поточному проекті я використовую декілька файлів .so. Вони розміщені в папці Armeabi та Armeabi-v7a. На жаль, один із .so файлів - це 6 Мб, і мені потрібно зменшити розмір файлу. Замість того, щоб мати жирний файл APK, я хотів би використовувати лише файли Armeabi та видалити папку Armeabi-v7a.

Відповідно до документації NDK, код Armeabi-v7a є розширеним кодом Armeabi, який може містити додаткові інструкції щодо процесора. Це все виходить за рамки мого досвіду, але я сумніваюся, чому б хотілося мати як Armeabi-v7a, так і Armeabi-код. Має бути вагомий привід мати і те, і інше?

На моїх тестових пристроях це, здається, працює нормально. Вони мають процесор ARM v7. Чи безпечно припустити, що все працює зараз?


2
Можливо, ви хочете прочитати цей допис для блогу зараз. Це ретельно та актуально: androidbycode.wordpress.com/tag/armeabi-v7a
IgorGanapolsky

2
А тепер доктор каже:armeabi is deprecated in NDK r16. Removed in NDK r17. No hard float.
Амір Резазаде

1
Для тих, хто прийде пізніше, подивіться тут .
Амір Резазаде

Відповіді:


163

Залежить від того, що робить ваш рідний код, але v7a має підтримку апаратних операцій з плаваючою комою, що робить величезну різницю. Armeabi буде працювати нормально на всіх пристроях, але буде набагато повільніше, і не скористається можливостями нових процесорів нових пристроїв. Візьміть деякі орієнтири для вашої конкретної програми, але видалення бінарних файлів Armeabi-v7a, як правило, не є хорошою ідеєю. Якщо вам потрібно зменшити розмір, ви можете мати дві окремі програми для старих (Armeabi) та новіших (Armeabi-v7a) пристроїв.


1
Де я можу знайти різницю між обома ABI? Я дуже наполегливо розумію реальні відмінності ...
webshaker


1
будь-яка ідея про елегантне рішення для отримання google Play, щоб ви могли завантажувати ці два різні APK-файли? У маніфесті немає можливості розрізнити, що вони різні, тому Google Play просто хоче замінити одне на інше (у них різні коди версій)
Дін Уайлд

11
@DeanWild Google тепер додав підтримку націлювання на різні архітектури процесора в кількох APK-функціях Play Store: developer.android.com/guide/google/play/publishing/…
Чарльз Харлі

1
@IgorGanapolsky, дякую, що вказав на це. Це правильне посилання: developer.android.com/google/play/publishing/…
Чарльз Харлі

60

EABI = Бінарний інтерфейс вбудованого додатка. Це такі специфікації, яким повинен відповідати виконуваний файл для виконання у конкретному середовищі виконання. Він також визначає різні аспекти компіляції та зв'язку, необхідних для взаємодії між ланцюжками інструментів, що використовуються для ARM Architecture. У цьому контексті, коли ми говоримо про Armeabi, ми говоримо про архітектуру ARM та GNU / Linux OS. Android слідкує за малоінтенсивним ARM GNU / Linux ABI.

Додаток Armeabi запускається на ARMv5 (наприклад, ARM9) та ARMv6 (наприклад, ARM11). Ви можете використовувати апаратне забезпечення з плаваючою точкою, якщо ви створюєте свою програму, використовуючи належні параметри GCC, наприклад -mfpu = vfpv3 -mfloat-abi = softfp, який повідомляє компілятору генерувати інструкції з плаваючою точкою для апаратного забезпечення VFP та дає змогу виклику з плавким плаванням. Armeabi не підтримує жорсткі плаваючі умовні виклики (це означає, що регістри FP не використовуються, щоб містити аргументи для функції), але операції FP в HW все ще підтримуються.

Додаток Armeabi-v7a працюватиме на таких пристроях Cortex A #, як Cortex A8, A9 та A15. Він підтримує багатоядерні процесори і підтримує -mfloat-abi = hard . Отже, якщо ви будуєте додаток за допомогою -mfloat-abi = hard , багато ваших функціональних дзвінків будуть швидшими.


1
За developer.android.com/ndk/guides/abis.html : The armeabi-v7a ABI uses the -mfloat-abi=softfp switch. То що ви маєте на увазі під підтримкою -mfloat-abi = hard ?
ІгорГанапольський

8

Замість того, щоб мати жирний файл APK, я хотів би використовувати лише файли Armeabi та видалити папку Armeabi-v7a.

Протилежне - набагато краща стратегія. Якщо у вас є minSdkVersion14 і завантажте apk в ігровий магазин, ви помітите, що ви підтримуєте однакову кількість пристроїв, підтримуєте ви armeabiчи ні. Тому немає пристроїв з Android 4 або новішої версії, які мали б користь armeabiвзагалі.

Це, мабуть, тому Android NDK навіть armeabiбільше не підтримує згідно з версією r17b. [ джерело ]

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.