LD_LIBRARY_PATH ignorado no Android algumas vezes
Eu tenho um aplicativo Android que gera muitos executáveis nativos dinamicamente vinculados com bibliotecas que eu distribuo com o pacote. Para iniciar esses binários, eu uso a variável de ambiente LD_LIBRARY_PATH para torná-los cientes do local para carregar as bibliotecas, mas em alguns dispositivos isso não funciona, o LD_LIBRARY_PATH é atualizado corretamente, mas o binário não consegue encontrar a biblioteca de qualquer maneira . Isso não é algo que eu possa reproduzir porque nos meus dois dispositivos (Galaxy Nexus e Nexus 7 com roms de estoque) ele simplesmente funciona bem.
Eu tentei muitas maneiras, por exemplo eu desovar:
LD_LIBRARY_PATH=/my/package/custom/libs:$LD_LIBRARY_PATH && cd /binary/directory && ./binary
E:
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();
Mas nesses dispositivos nada parecia funcionar ... então eu estou começando a pensar que este é um problema relacionado ao kernel, alguns kernels (como o meu) usam o LD_LIBRARY_PATH, outros kernels não (simplesmente ignorá-lo, ou eles são usando apenas o LD_LIBRARY_PATH que foi definido na inicialização do aplicativo, portanto não há como alterá-lo em tempo de execução).
Eu também tentei usar System.load, mas não funcionou, provavelmente porque essas bibliotecas não são JNI ... existe algo que eu poderia tentar antes de começar a pensar em usar binários vinculados estaticamente?