2013-04-09 15 views
11

Ho fatto due semplici funzioni (imposta e restituisci un int) su eclipse (progetto Android) in C. Ho usato ndk-build per produrre un .so. Come posso usare questo .so su Xamarin e consumare queste due funzioni sul mio progetto Xamarin.Android?Xamarin: uso NDK-costruito .so

Grazie!

risposta

13

Supponiamo di avere una libreria condivisa denominata MyTest.so e vogliamo utilizzarla nel progetto Xamarin.Android. MyTest.so è costituito da una funzione

int MyTest_GetValue();

Ora, abbiamo bisogno di utilizzare questa funzione sul progetto Xamarin.Android. Ecco i passaggi per il successo:

Passaggio 1: creare una nuova cartella all'interno del progetto Xamarin.Android denominato lib e sottocartella armeabi. Copiato la mia libreria .so da utilizzare all'interno della cartella armeabi come indicato here

Passaggio 2: Impostare le proprietà della libreria.so (libreria importata) Creare l'azione su "AndroidNativeLibrary" e copiare su "Copia sempre".

Fase 3: (Lavorare in Xamarin.Android Classe ad esempio: MainActivity.cs)

  • Includere le InteropServices namespace da “using System.Runtime.InteropServices;”

  • Utilizzare il DllImport di serie nel progetto per importare la libreria nativa come di seguito: [DllImport ("MyTest.so")] public extern static int MyTest_GetValue(); // con esatto nome Functtion, tipo & Params in .so Lib.

Passaggio 4: Consuma la funzione sopra riportata (MyTest_GetValue()) nell'applicazione.

Per esempio:

valore int = MyTest_GetValue();

Console.Writeline (value.ToString());

Missione compiuta!: D

+0

Puoi mostrare una funzione di esempio con un argomento [out]? Come bool MyTest_GetValue (stringa * retVal); Grazie – hrz

+0

Per quanto posso pensare, non dovrebbe essere diverso usando gli argomenti [out]. Esecuzione dei passaggi 1 e 2, quindi del passaggio 3 che include la funzione con gli argomenti [out] e infine il passaggio 4 per il consumo di tale funzione dovrebbe funzionare correttamente. Nota: Xamarin è cambiato molto dal 2013 (questa domanda). –