Как определить вторичный ABI для моего приложения для Android - PullRequest
1 голос
/ 25 сентября 2019

Как указано в руководстве по Android ABI: https://developer.android.com/ndk/guides/abis

Раздел Автоматическое извлечение собственного кода во время установки гласит:

При установке приложенияслужба менеджера пакетов сканирует APK и ищет все общие библиотеки в форме:

lib/<primary-abi>/lib<name>.so

Если ничего не найдено, и вы определили вторичный ABI, службасканирует общие библиотеки в форме:

lib/<secondary-abi>/lib<name>.so

Справочная информация: Мое приложение зависит от внешней библиотеки, доступ к которой осуществляется через интерфейс JNI, но я былпредоставляется только с файлом, например libLibrary.so для архитектуры armeabi.Мое приложение также использует другую библиотеку, которая поддерживает несколько различных архитектур, таких как arm64-v8a и т. Д. Итак, во время выполнения я получил такую ​​ошибку, потому что не смог найти libLibrary.so:

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[... /system/lib64]]] couldn't find "libLibrary.so"

Edit:

Мне было интересно хорошо ли я скопировал libLibrary.so из папки armeabi в папку armeabi-v7a , когда другие библиотеки, от которых я зависел, имеют .so файлы для armeabi-v7a, но не для armeabi.Я проверил свое приложение, и оно без проблем использует библиотеку, когда я установил в gradle:

ndk.abiFilters "armeabi-v7a"

, чтобы выводить только библиотеки armeabi-v7a в файле apk для использования приложениятолько их.

Итак, мне интересно, так ли это хорошо.Я использую то, что предлагается здесь: https://medium.com/livefront/native-android-libraries-gone-bad-e7ff63f34bb

1 Ответ

1 голос
/ 25 сентября 2019

Как пишет Майкл, вы не можете развернуть приложение с частичной поддержкой arm64-v8a .Пока вы не загружаете приложение в Play Store (например, во время разработки и тестирования), вы должны удалить 64-битные двоичные файлы из вашего APK.На сегодняшний день все устройства по-прежнему будут работать в двоичном формате armeabi , но я ожидаю, что в ближайшие годы будут работать только 64-разрядные устройства.

Если вы собираетесь распространять приложение через Google Play Store, выУбедитесь, что ваше приложение работает без 32-битных двоичных файлов.Иногда, когда исходные библиотеки отсутствуют, проще воспроизвести отсутствующие функции в Java / Kotlin.

...