Android NDK Caricamento di una biblioteca - insoddisfatti diplinkerror
-
29-10-2019 - |
Domanda
Sto sviluppando un gioco Android che utilizza il motore LiBGDX e Bullet Physics. Posso compilare il gioco senza problemi, ma quando aggiungo proiettile al gioco si blocca con questo errore:
.... insoddisfatti diplinkerror: Impossibile caricare il proiettile: findlibrary restituito null ...
Posso compilare bene la libreria di proiettili, ma quando provo a usarla nel mio codice si blocca .. La cosa divertente è che ho un altro progetto che usa il proiettile ma senza libgdx e funziona senza problemi. Qualcuno sa quale potrebbe essere il problema? Da quello che so che NDK-Build genera solo file e cartelle OBJ.
Sembra che il file proiettile .SO non sia incluso in .apk, quindi l'incidente. Come potrei verificare se lo è? Qualcuno ha avuto problemi simili?
Grazie per l'aiuto!
Soluzione
Ho risolto il mio problema. Il problema era che LiBGDX ha cartelle armeabi e armeabi-v7a nella cartella LIBS e il proiettile ha solo armeabi. Quindi ho rimosso l'Armeabi-V7A e ha funzionato magico!
Altri suggerimenti
Controlla quel nome che viene passato a System.loadLibrary è lo stesso del nome .so nel file .Apk. Il file APK in realtà è un file zip, quindi è possibile rinominarlo in estensione .zip, decomprimere ed esaminare la cartella LIBS all'interno.
Quindi, se hai un file denominato libfoobar.so nella cartella libs nel file APK, è necessario passare uno dei seguenti nomi a Loadlibary - "Foobar", "libfoobar" o "libfoobar.so".
Ho fatto apparire questo problema quando ho iniziato a utilizzare i file nativi .cpp anziché i file nativi .c. Il problema era che non mi consideravo name-mangling Negli strumenti di costruzione .cpp. Prova ad aggiungere quanto segue che circonda le definizioni del metodo nativo:
#ifdef __cplusplus
extern "C" {
#endif
/* ... */
#ifdef __cplusplus
}
#endif
Sto avendo un problema simile
Il post di cui sopra è stato utile, però, ho controllato il mio gioco. APK e la biblioteca SO è sotto lib/armeabi, ma quando lo costruisco in eclissi è in libs/armeabi.
Penso che dovrebbe essere sotto i libri normalmente e se qualcuno può aiutarmi a cambiare lib in libs quando la costruzione sarà davvero utile.