Salve a tutti.
Sto riscontrando un problema con l'utilizzo dell'android-ndk-r9d
Ho un progetto con la seguente architettura.
1) Componente compilata con android-ndk-r9d usata per creare una libreria di codice nativo in C da usare in un progetto Android.
In Android.mk ho specificato le seguenti opzioni:
e in Application.mk le seguenti:codice:TARGET_ABI = android-16-armeabi-v7a TARGET_PLATFORM = android-16 TARGET_ARCH_ABI = armeabi-v7a LOCAL_CFLAGS += -march=armv7-a -mfloat-abi=softfp LOCAL_LDLIBS += -Wl,--fix-cortex-a8
per forzare l'utilizzo della platform android-16 invece di quella di default che dovrebbe essere la android-3codice:APP_ABI := armeabi-v7a APP_PLATFORM := android-16
Nei files C è presente il seguente codice
effettuando ndk-build noto che alla fine mi scrive:codice:device = open(pathFileSmartIO, O_RDWR | O_DIRECT);
[armeadi-v7a] install : nomeLib.so => libs/armeabi/nomeProgetto.so e già questo mi stona, non dovrebbe creare il .so in libs/armeabi-v7a/ ?
2) Una libreria java in cui faccio il load del .so tramite in seguente codice
Da questo progetto ricavo un .jarcodice:static { System.loadLibrary("SmartIO"); }
3) Un'app Android che importa il .jar generato nel punto 2 e ha il .so generato nel .1 nel path libs/armeabi-v7a
Se nell'AndroidManifest non specifico il tag <uses-sdk> il tutto funziona.
Se invece inserisco il tag funziona solo se specifico mindSdk="3", se ne specifico una superiore fallisce la chiamata alla funzione open sopra citata.
Quello che io non riesco a capire è se l'errore è dovuto a problemi della funzione open a partire dalla versione 4 oppure se, in qualche modo, la libreria .so che utilizzo è in qualche modo ancora compilata con la versione android-3 nonostante tutti i settings fatti nei .mk e quindi se cambio sdk sbarrella (e lo fa proprio su quella funzione).
L'app android la faccio puntare alla target android-16 nelle properties del progetto.
Ciao a tutti
Sandro

Rispondi quotando