LD_LIBRARY_PATH иногда игнорируется на Android
У меня есть приложение для Android, которое порождает много собственных исполняемых файлов, динамически связанных с библиотеками, которые я распространяю с пакетом. Чтобы запустить эти двоичные файлы, я использую переменную среды LD_LIBRARY_PATH, чтобы они знали о месте загрузки библиотек, но на некоторых устройствах это невообще не работает, LD_LIBRARY_PATH корректно обновляется, но двоичный файл все равно не может найти библиотеку. Это не то, что я могу воспроизвести, потому что на моих двух устройствах (Galaxy Nexus & Nexus 7 со стоковыми ромами) он просто отлично работает.
Я пробовал много способов, например, я порождаю:
LD_LIBRARY_PATH=/my/package/custom/libs:$LD_LIBRARY_PATH && cd /binary/directory && ./binary
А также :
String[] envp = { "LD_LIBRARY_PATH=" + libPath + ":$LD_LIBRARY_PATH" };
Process process = Runtime.getRuntime().exec( "su", envp );
writer = new DataOutputStream( process.getOutputStream() );
reader = new BufferedReader( new InputStreamReader( process.getInputStream() ) );
writer.writeBytes( "export LD_LIBRARY_PATH=" + libPath + ":$LD_LIBRARY_PATH\n" );
writer.flush();
Но на этих устройствах ничего не работало ... так что яЯ начинаю думать, что это проблема, связанная с ядром, некоторые ядра (например, мое) используют LD_LIBRARY_PATH, другие ядра нет (просто игнорируйте это, или онииспользовать только LD_LIBRARY_PATH, который был установлен при запуске приложения, поэтомунет способа изменить его во время выполнения).
Я также пытался использовать System.load, но это невозможно, потому что эти библиотеки не являются JNI ... Есть ли что-то, что я мог бы попробовать, прежде чем начать думать об использовании статически связанных двоичных файлов? >>