So mischen Sie 32- und 64-Bit-SO-Dateien in einer App

Carmelo M 09/15/2017. 1 answers, 84 views
java android android linux android-ndk android-ndk ndk-build

Erstens, ich weiß, dass in einer App keine gemischte Verwendung verschiedener Architekturen der .so-Datei erlaubt (Teil verwendet nur 32, der andere Teil verwendet nur 64)

Also, ich habe versucht, einen neuen Prozess zu öffnen, um 64 und 32-Bit-Dateien dynamisch zu laden, aber System.load() wirft den Fehler und die App stürzte ab! Wie kann dieses Problem durch mehrere Prozesse gelöst werden? Oder gibt es einen anderen Weg, dies zu lösen?

5 Comments
Markus 07/27/2017
Willkommen bei SO! Bitte nehmen Sie sich etwas Zeit, um die Hilfeseiten zu lesen, insbesondere die Abschnitte "Welche Themen kann ich hier fragen?" und "Welche Art von Fragen sollte ich vermeiden zu fragen?" . Bitte nehmen Sie auch die Tour und lesen Sie, wie Sie gute Fragen stellen können . Zuletzt erfahren Sie, wie Sie ein minimales, vollständiges und überprüfbares Beispiel erstellen können. Details über Fehler würden viel helfen.
Alex Cohn 07/27/2017
Das ist eine coole Idee! Aber welche Art von Kinderprozess möchten Sie starten? Ein Dienst? Ich glaube nicht, dass dies funktionieren könnte, da das System basierend auf der Analyse Ihrer APK entscheidet, ob der 32-Bit-Modus aktiviert werden soll, und die JVM entsprechend eingerichtet ist.
Alex Cohn 07/27/2017
Siehe stackoverflow.com/a/31879900/192373 : Der pm kann den ABI während der Installation der App erzwingen.
Carmelo M 07/28/2017
@AlexCohn Danke! Ich stimme dir zu, ein Child-Prozess (Activity) kann dieses Problem nicht lösen. [Stackoverflow.com/a/31879900/192373] funktioniert nicht, weil ich will, dass ein Teil der Funktion 32-Bit .so verwendet und Teil des Funktion verwendet 64-Bit .so, in der gleichen App.
Carmelo M 07/28/2017
@AlexCohn Hast du noch andere Ideen? Meister

1 Answers


Alex Cohn 07/30/2017.

Nun, ich habe es versucht. Auf den ersten armeabi funktioniert das: armeabi gemeinsame libs 'in gewohnter Weise' und arm64-v8a ausführbare Datei arm64-v8a aus Java mit Runtime.exec () oder aus C mit system () aus .

Sie können die ausführbare Datei in Assets einfügen und sie manuell entpacken, oder Sie können sie betrügen und umbenennen, so dass sie mit lib beginnt und mit .so endet; Jetzt können Sie diese Datei in das jniLibs/armeabi .

Der umgekehrte Weg funktioniert auch: 32-Bit-Programm starten (nicht vergessen, -fPIE ) von 64-Bit-App.

Stellen Sie sicher, dass die Bibliothekssuchpfade nicht miteinander kollidieren.

2 comments
Carmelo M 08/04/2017
Das ist eine coole Idee !!! Mein Projekt ist nicht mit der Videotranscodierungs-Hintergrundoperation vergleichbar, muss aber die dreidimensionalen Grafiken über die SurfaceView laden, um mit den Benutzergesten zu interagieren. Der Umgang mit diesen UI-Interaktionen ist ein großes Problem, ich hoffe, Sie können mir ein paar Ideen geben, danke
Alex Cohn 08/04/2017
Ich glaube nicht, dass Sie mit der Benutzeroberfläche umgehen oder Live-Grafiken über Interprozesskommunikation ausführen können

Related questions

Hot questions

Language

Popular Tags