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 ... Есть ли что-то, что я мог бы попробовать, прежде чем начать думать об использовании статически связанных двоичных файлов?