Usar bibliotecas nativas
Xamarin.Android suporta o uso de bibliotecas nativas através do mecanismo PInvoke padrão. Você também pode agrupar bibliotecas nativas adicionais que não fazem parte do sistema operacional em seu .apk.
Para implantar uma biblioteca nativa com um aplicativo Xamarin.Android, adicione o binário da biblioteca ao projeto e defina sua Ação de compilação como AndroidNativeLibrary.
Para implantar uma biblioteca nativa com um projeto de biblioteca Xamarin.Android, adicione o binário da biblioteca ao projeto e defina sua Ação de Criação como EmbeddedNativeLibrary.
Observe que, como o Android suporta várias interfaces binárias de aplicativos (ABIs), o Xamarin.Android deve saber para qual ABI a biblioteca nativa foi criada. Há duas maneiras de fazer isso:
- Caminho "farejando"
- Usando um
AndroidNativeLibrary/Abi
elemento dentro do arquivo de projeto
Com a detecção de caminho, o nome do diretório pai da biblioteca nativa é usado para especificar a ABI usada como destino pela biblioteca. Assim, se você adicionar lib/armeabi/libfoo.so
ao projeto, então o ABI será "cheirado" como armeabi
.
Como alternativa, você pode editar o arquivo de projeto para especificar explicitamente a ABI a ser usada:
<ItemGroup>
<AndroidNativeLibrary Include="path/to/libfoo.so">
<Abi>armeabi</Abi>
</AndroidNativeLibrary>
</ItemGroup>
Para obter mais informações sobre como usar bibliotecas nativas, consulte Interoperabilidade com bibliotecas nativas.
Depurando código nativo com o Visual Studio
Se você estiver usando o Visual Studio 2019 ou o Visual Studio 2017, não será necessário modificar seus arquivos de projeto conforme descrito acima. Você pode criar e depurar C++ dentro de sua solução Xamarin.Android adicionando uma referência de projeto a um projeto C++ Dynamic Shared Library (Android).
Para depurar código C++ nativo em seu projeto, execute estas etapas:
- Clique duas vezes em Propriedades do projeto e selecione a página Opções do Android.
- Role para baixo até Opções de depuração.
- No menu suspenso Depurador, selecione C++ (em vez do .NET padrão (Xamarin)).