LD_LIBRARY_PATH wird unter Android manchmal ignoriert

Ich habe eine Android-App, die viele native ausführbare Dateien hervorbringt, die dinamisch mit Bibliotheken verknüpft sind, die ich mit dem Paket verteile. Um diese Binärdateien zu starten, verwende ich die Umgebungsvariable LD_LIBRARY_PATH, um sie auf den Ort aufmerksam zu machen, von dem die Bibliotheken geladen werden sollen. Auf einigen Geräten funktioniert dies jedoch überhaupt nicht. Die LD_LIBRARY_PATH wird korrekt aktualisiert, aber die Binärdatei findet die Bibliothek trotzdem nicht . Dies kann ich nicht reproduzieren, da es auf meinen beiden Geräten (Galaxy Nexus & Nexus 7 mit Standard-ROMs) einwandfrei funktioniert.

Ich habe viele Möglichkeiten ausprobiert, zum Beispiel:

LD_LIBRARY_PATH=/my/package/custom/libs:$LD_LIBRARY_PATH && cd /binary/directory && ./binary

Und :

    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();

Aber auf diesen Geräten schien nichts zu funktionieren ... also denke ich, dass dies ein Kernel-Problem ist. Einige Kernel (wie meine) verwenden den LD_LIBRARY_PATH, andere nicht (ignorieren ihn einfach oder sie sind es) Verwenden Sie nur den LD_LIBRARY_PATH, der beim Start der Anwendung festgelegt wurde. Daher besteht keine Möglichkeit, ihn zur Laufzeit zu ändern.

Ich habe auch versucht, System.load zu verwenden, aber es hat nicht funktioniert, wahrscheinlich, weil diese Bibliotheken nicht JNI sind ... gibt es etwas, das ich versuchen könnte, bevor ich anfange, über die Verwendung statisch verknüpfter Binärdateien nachzudenken?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage