Мои 32-разрядные приложения для Android ARM поставляются с .so файлами, которые я dlopen() в моем родном коде. Это работает отлично, и я могу их разложить на /data/data/com.domain.app/lib/libX.so
.lib/каталог отсутствует после установки 64-битного приложения для Android
Если я добавлю 64-битные двоичные файлы в свой пакет (arm64-v8a) и установлю его на 64-битном Android-устройстве, тогда не будет каталога /data/data/com.domain.app/lib
.
После некоторого исследования, я обнаружил, что .so файлы на 64-битном Android устройства в конечном итоге в другом каталоге:
/data/app/com.domain.app-1/lib/arm64
И что еще хуже, «-1» суффикс меняется и может быть «-2» или что-то еще.
Это способ, чтобы проверить, что был установлен в домашней директории приложения:
$ adb shell run-as com.steenriver.biplane '/system/bin/sh -c "pwd"' /data/data/com.steenriver.biplane
$ adb shell run-as com.steenriver.biplane '/system/bin/sh -c "ls -al"' drwxrwx--x u0_a108 u0_a108 2017-01-17 15:04 app_.gpg.classloader drwxrwx--x u0_a108 u0_a108 2017-01-17 15:04 cache drwxrwx--x u0_a108 u0_a108 2017-01-17 15:04 code_cache drwxrwx--x u0_a108 u0_a108 2017-01-17 15:04 files
32-битное устройство будет иметь lib/
запись, перечисленные здесь.
Есть ли какой-либо Android-вызов, который я могу сделать (либо в Java, либо в собственном коде), который скажет мне, где закончились файлы .so, так что я могу dlopen() их?