Собственные библиотеки не найдены в ApplicationInfo.nativeLibraryDir при создании пакета приложений для телефона Android arm64 - PullRequest
2 голосов
/ 11 июня 2019

Я пытаюсь перенести мое приложение из монолитного APK в формат пакета приложения.Мне нужно установить переменную окружения LD_LIBRARY_PATH для вызова exec(), поэтому мне нужно расположение моих собственных библиотек.С оригинальным APK я бы назвал getApplicationInfo().nativeLibDir и библиотеки были там.

С комплектом приложений их нет. Я вижу правильный установленный abi split APK , но библиотеки по какой-то причине не извлекаются.

Я пытался установить с bundletool и через Google Play,

Пытался запустить 'ls -alR', и я ясно вижу, что каталог существует, как и разделенный apk, но библиотеки просто не извлекаются.Я думаю, что я мог бы извлечь их вручную как обходной путь, но это казалось бы ненужным ..?

Вот вывод ls в родительской папке из nativeLibPath

genLibraryPath: Dir Contents: /data/app/com.unseenonline-raAFLhJMQpjqWkVdG1Vocg==:
        total 16704
        drwxr-xr-x   4 system system      4096 2019-06-11 12:41 .
        drwxrwx--x 114 system system     12288 2019-06-11 12:41 ..
        -rw-r--r--   1 system system   5688352 2019-06-11 12:41 base.apk
        drwxr-xr-x   3 system system      4096 2019-06-11 12:41 lib
        drwxrwx--x   3 system install     4096 2019-06-11 12:41 oat
        -rw-r--r--   1 system system  11226112 2019-06-11 12:41 split_config.arm64_v8a.apk
        -rw-r--r--   1 system system     35636 2019-06-11 12:41 split_config.en.apk
        -rw-r--r--   1 system system     90443 2019-06-11 12:41 split_config.xxhdpi.apk

        /data/app/com.unseenonline-raAFLhJMQpjqWkVdG1Vocg==/lib:
        total 24
        drwxr-xr-x 3 system system 4096 2019-06-11 12:41 .
        drwxr-xr-x 4 system system 4096 2019-06-11 12:41 ..
        drwxr-xr-x 2 system system 4096 2019-06-11 12:41 arm64

        /data/app/com.unseenonline-raAFLhJMQpjqWkVdG1Vocg==/lib/arm64:
        total 16
        drwxr-xr-x 2 system system 4096 2019-06-11 12:41 .
        drwxr-xr-x 3 system system 4096 2019-06-11 12:41 ..

Как вы можете видеть, разделенные apk существуют, но библиотеки не извлекаются.

Библиотеки должны быть извлечены в то же место, в котором они находились с исходным apk

1 Ответ

3 голосов
/ 11 июня 2019

По умолчанию APK, созданные с помощью Android App Bundle, имеют собственные библиотеки, несжатые на устройствах на Android M +.Это не только часто уменьшает размер загружаемого файла, но и значительно уменьшает размер приложения на устройствах, поскольку платформа Android может напрямую считывать собственные библиотеки из APK вместо необходимости извлекать их в отдельное место.В конце концов был разговор о том, как уменьшить размер вашего приложения и как это влияет на число установок, и они подробно рассказали, как это работает, если вы заинтересованы в лучшем понимании этого.

Итак, теперьчто вы знаете, почему Google Play делает это, у вас есть следующие варианты:

  • Вы можете вернуться к исходному поведению APK, и это можно сделать, добавив флаг android.bundle.enableUncompressedNativeLibs=false в вашем файле gradle.properties.Это эффективно отключит эту оптимизацию, что приведет к увеличению размера вашего приложения для всех ваших пользователей на M +.

  • Вы можете убедиться, что нативная библиотека загружена платформой Android (например, используяSystem.loadLibrary) или вы, если по какой-то причине вы читаете библиотеку напрямую, также читайте ее непосредственно из APK.

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

Надеюсь, это поможет,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...