Где разместить библиотеку c ++ .so, необходимую для моего приложения android - PullRequest
0 голосов
/ 02 августа 2020

Я создал приложение android на основе ndk, и когда я запустил его, нажав кнопку запуска в Android Studio, я обнаружил, что приложение установлено и работает на моем подключенном android устройстве. Но он жалуется, что не может загрузить некоторые файлы .so, такие как libc++_shared.so и libomp.so, я провел небольшое исследование и создал jniLibs в своей папке app\src\main и скопировал эти два файла .so в него, теперь все работает нормально.

Однако мне до сих пор неясно, что именно произошло:

  1. когда я нажимаю кнопку запуска, где приложение устанавливается / сохраняется на устройстве, и скопированы ли файлы .so в одно и то же место?
  2. Я подозреваю, что если копирование файлов .so в jniLibs является хорошей практикой, такие файлы .so могут использоваться многими приложениями, обновляя их становится сложно, если у каждого приложения есть собственная копия. Есть ли способ хранить их в общем месте для совместного использования приложениями?
  3. Могу ли я также поделиться файлами .so на устройстве android с разными приложениями?

1 Ответ

0 голосов
/ 04 августа 2020
  1. , когда я нажимаю кнопку запуска, указывается, где приложение установлено / сохранено на устройстве, и копируются ли файлы .so в то же место?

Приложение сохраняется в /data/app/your.app.name-cert-hash==, а библиотеки .so хранятся в одном месте, например, /data/app/your.app.name-cert-hash==/lib/x86 (если android:extractNativeLibs="true" в AndroidManifest.xml / application, в противном случае библиотеки напрямую сжимаются в .apk).

Для обнаружения Android файловой системы вы можете использовать ADB (также с эмулятором):

  1. Запустите приложение из AS

  2. Запустите adb оболочка в режиме su:

    adb shell
    su
    ls -als /data/app
    
Я подозреваю, что если копирование файлов .so в jniLib является хорошей практикой, такие файлы .so могут использоваться многими приложениями, и их обновление становится затруднительным, если у каждого приложения есть собственная копия. Есть ли способ хранить их в общем месте для совместного использования приложениями?

Это невозможно из-за Android подхода к безопасности.

Могу ли я также поделиться файлами .so на устройстве android в разных приложениях?

Нет.

...