Я проверяю разрешающий и принудительный механизм selinux (SE Linux) в Android 5.0. Я поместил файл .so в /data/data/packageName/files/libtestcalc.so.
когда устройство находится в разрешительном режиме, System.load("/data/data/packageName/files/libtestcalc.so"); - отлично работает, и я могу получить доступ к методам файла .so без каких-либо исключений.
То же, System.load("/data/data/packageName/files/libtestcalc.so"); не работает, когда устройство находится в принудительном режиме, и я получаю следующее исключение.
java.lang.UnsatisfiedLinkError: ошибка dlopen: не удалось сопоставить сегмент «/data/data/packageName/files/libtestcalc.so» 1: в доступе отказано
Я предполагаю, что в обоих режимах будет происходить один и тот же поток вызовов. Я имею в виду System.load(..)->Runtime.getRuntime().load(..)->Runtime.getRuntime(..).doload(..)->Runtime.getRuntime().nativeLoad(..)
Документация @Runtime.java->doLoad(..), упомянутая как «nativeLoad, должна быть синхронизирована, чтобы независимо от использования использовался только один LD_LIBRARY_PATH...»
Когда этот LD_LIBRARY_PATH будет обновлен?
Как Android различает загрузочные файлы по режимам? Хотите узнать другие способы загрузки файла .so из «/data/data/packageName/files/».