2016-07-30 3 views
1

ist hoffe, Sie können mir hier helfen. Ich habe es geschafft, mein eigenes Aktivitätsprojekt zu erstellen und es zu verpacken. Im Ordner libs habe ich eine gemeinsam genutzte Bibliothek, die innerhalb der nativen Aktivität dynamisch geladen wird (dlopen). Ich weiß, dass die Paket-Bibliotheken in kopiert werden: /data/data/packagename/lib aber wie kann ich mit dlopen darauf zugreifen? Ist das möglich? Ich dachte, ich kann nur mit dem lokalen Ordnernamen darauf zugreifen, wie: ./libMySharedLibrary, weil sie alle im Unterordner APK/libs sind. Wie kann man zum richtigen Ordnernamen gelangen oder Zugang zu diesen freigegebenen Bibliotheken erhalten?Shared-Objekt dynamisch geladen, die im Ordner APK-Bibliotheken

Antwort

0

Dynamische Linker kennt bereits über Ihr Paket privaten Bibliotheken - nur passieren Basisnamen und alle sollten in Ordnung sein:

dlopen("libawesome.so", RTLD_LAZY); 

P. S. Um Überraschungen zu vermeiden, sollten Sie sicherstellen, dass Ihr Bibliotheksname eindeutig ist und nicht mit den System-Namen übereinstimmt (diese befinden sich unter /system/lib und /vendor/lib, überprüfen Sie auch lib64 Verzeichnisse auf 64-Bit-Geräten).

+0

Angenommen, mein Paketname lautet: ** com.android.example **. Wenn ich das tue: ** adb shell run-as com.android.example ** und schaue in den **/lib ** Ordner Ich kann meine shared library nicht sehen. Ich kann die gemeinsam genutzte Bibliothek in der .apk-Datei sehen, aber nach der Installation mit ** ant installd ** ist sie nicht in diesem Ordner. Soll die gemeinsame Bibliothek in diesen Ordner kopiert werden? – yaakuro

+0

@yaakuro AFAIK-native Bibliotheken werden nach ['nativeLibraryDir'] kopiert (https://developer.android.com/reference/android/content/pm/ApplicationInfo.html#nativeLibraryDir). Und es scheint, als wäre es nicht immer das Paket 'lib'-Verzeichnis. Wie auch immer, die Frage bezog sich nicht auf den Speicherort der Bibliothek, sondern auf den richtigen Weg, sie in nativem Code zu laden. Haben Sie versucht, 'dlopen()' nur mit dem Basisnamen der Bibliothek zu verwenden? – Sergio

Verwandte Themen