Die native, gemeinsam genutzte Bibliothek kann nicht mit Abhängigkeiten in einer nativen Aktivitäts-App geladen werden

8

In meiner Android App habe ich 4 Bibliotheken:

%Vor%

Wenn ich eine kleine Befehlszeilen-ausführbare Datei schreibe, die mit libTemplate verknüpft und ANativeActivity_onCreate manuell aufruft, verlinkt sie und läuft gut (wenn ich LD_LIBRARY_PATH auf /data/data/com.mycompany.Template/lib zeige)

Wenn ich meine App starte, bekomme ich diese sehr nützliche Fehlermeldung:

%Vor%

Es gibt nicht einmal ANativeActivity_onCreate ein, also ist meine einzige Vermutung, dass es etwas mit dem Verknüpfen von

zu tun hat

Ich sollte wahrscheinlich erwähnen, dass ich CMake mit diesem Skript verwende: Ссылка , um die Bibliotheken selbst zu erstellen (ohne ndk-build) Ich habe es geschafft, das native-activity-Beispiel damit zu kompilieren, also weiß ich, dass es funktioniert.

Außerdem habe ich sichergestellt, dass keine Bibliothek eine Versionsnummer in ihrem Soname enthält

Mein Manifest:

%Vor%     
da_petcu21 21.09.2012, 05:20
quelle

4 Antworten

10

Da Android offensichtlich nicht schlau genug ist, einen LD_LIBRARY_PATH korrekt zu setzen, konnte ich mein Problem lösen, indem ich eine kleine Bootstrapper-Bibliothek erstellte, die die eigentliche Aktivität manuell lädt. Hier ist der Code:

%Vor%     
da_petcu21 22.09.2012, 14:53
quelle
5

Ich glaube nicht, dass Android automatisch Bibliotheken lädt, die nicht im Manifest angegeben sind. Daher sollten Sie eine "Dummy" Java-Klasse zum Laden externer Abhängigkeiten erstellen:

%Vor%

Da dieser Abschnitt statisch ist, wird er beim Laden der Klasse ausgeführt, auch wenn seine Methoden nicht aufgerufen werden.

    
Sdra 21.09.2012 12:29
quelle
1

Dies wirkt sich nicht mehr auf API 24+ aus (siehe hier ). Wenn Sie jedoch ältere Versionen unterstützen müssen, erweitern Sie NativeActivity , beziehen Sie sich stattdessen auf Ihre Erweiterung in der Manifestdatei und fügen Sie den in Sdras Antwort als Workaround.

    
Flávio Faria 15.11.2017 20:15
quelle
0

Ihre Aktivität hat wahrscheinlich einen statischen Konstruktor, der System.Load ("libTemplate.so") aufruft. Es sollte die anderen Bibliotheken entsprechend der Abhängigkeitsreihenfolge laden.

    
Alex Cohn 21.09.2012 09:22
quelle