Integration of Android Native module with existing Xamarin Native Project - android

We have teams which are working on different different technologies. Currently struggling with integration of android native module (Developed in android native language) with existing Xamarin android project.
Actually I got one way that we can convert android native project as a library. This library can integrate to Xamarin project.
I had gone through below links
Convert existing project to library project in Android Studio
https://developer.xamarin.com/guides/android/advanced_topics/using_native_libraries/ ( Integration of android library in xamarin project)
Is this the correct way or do we have any alternate way to achieve it?

Is this the correct way or do we have any alternate way to achieve it?
The document Using Native Libraries is talking about how to use .so file (native libraries) in Xamarin.Android, here is the example.
It is recommended that using Binding Java Library. You could convert your android native project to a .jar or .arr file, then you could refer to Binding a .JAR or Binding an .AAR.
If there is any problem when you trying binding Java Library, you could refer to Troubleshooting Bindings.

Related

How do I include required aar and jar files in a Xamarin Android app? What is the AndroidLibrary build action for?

We use Xamarin Forms and I have been tasked with integrating a 3rd party AAR library from a business partner and I don't have control over the library or its dependencies. This library itself is distributed using Maven, which works great in Android Studio but is a pain in Xamarin, and it has many dependencies on both libraries that are standard in Android as well as other proprietary libraries.
Since I only need to interact with a small portion of the public API of the main library, I've created an Android library (AAR) wrapper project in Android Studio that only exposes the functionality I need and does not use any types that do not already have bindings.
I have created an Android binding project against the AAR wrapper library, and it compiles in Visual Studio without any warnings or errors.
I've created bindings for other libraries in the past and have the Xamarin binding documentation multiple times and searched online, but the part I'm missing is how to include the required/reference JAR/AAR files in the compilation process and the final Android application. Most of the standard libraries that I need already have NuGet packages (Androidx, Google Play Services, etc)., but the binding library compiles without complaint - so how do I include the other required libraries?
Do I really have to create a binding project for each required AAR/JAR and add as a reference? I don't need to interact with the types or resources in these libraries directly from Xamarin since I only interact with the the types/methods exposed in the wrapper AAR (e.g. I don't think I really need a Xamarin binding). Is there a way to simply have Xamarin process the required AARs and JARs without creating a Xamarin binding project for every library that doesn't already have a NuGet package? There are many many dependencies which makes this theoretically possible, but not in practice. There must be an easier way...
I noticed there is an AndroidLibrary build action that the documentation says can be used to directly reference an AAR/JAR file in a Android application, but I can find no examples of how to use this in practice. What does this build action do? How is it supposed to be used? https://learn.microsoft.com/en-us/xamarin/android/deploy-test/building-apps/build-items#androidaarlibrary
Thanks in advance for any help or direction on the best way to do this.

Xamarin Forms using Android Library created in Android Studio

I have an android app using android libraries (dependencies in build.gradle), that I want to use in Xamarin Forms app.
I have prepared android class library with dependencies that I need, add it to Android app and it works as should. Now I want to extract library (not app) - .aar file or other type. Then in Visual Studio create android binding library project, add android library (f.e. aar) under "Jars" folder, compile .dll file and in Xamarin Forms project, add reference to .dll and get needed functionality.
Xamarin app accept binding library, it knows android studio library package, tries to execute method, but then problem occurs "Java.Lang.NoClassDefFoundError". Aar is very light about 40KB, seems like it does not include the library I need, but just reference. Is there a way, that I can have those methods in dll library? I have tried exporting .jar file (weight about 2 MB) but it is also missing classes.

How to integrate android aar in xamarin project

I am working on xamarin application,i want to integrate native android aar in xamarin project.I tried by converting android aar into dll to xamarin project but i am getting so many errors while building.In my android aar so many third party libraries(dagger,rxjava) are there.Is there any way to fix these errors in this project
we are using Android AIDL
sample does not implement inherited abstract member ‘Callable.sData(HttpURLConnection)' (CS0534) (AarBinding)
Error CS0534: ‘Callback' does not implement inherited abstract member '(CS0534) (AarBinding)
Error CS0115: ‘apiRequestContents()': no suitable method found to override (CS0115) (AarBinding)
How to integrate android aar in xamarin project
You could refer to: Binding an .AAR, this walkthrough provides step-by-step instructions for creating a Xamarin.Android Java Bindings Library from an Android .aar file.
If there is some error when you using the binding library, you could refer to the following link:
Approaching a Xamarin.Android Bindings Case.
Customizing Bindings
Troubleshooting Bindings
is xamarin supports android aidl
The answer is Yes. To use them add aidl files into your project and set Build Action to AndroidInterfaceDefinition. Xamarin.Android will generate .cs files, that are compiled together with your source code, so you can use aidl interfaces in your C# code.
Here is the official demo about how to use AIDL in Xamarin.Android.

Linking dependencies between PCL and Xamarin app

While working on my Xamarin cross-platform app I am using native apps and a PCL for shared code.
Unfortunately it does not seem possible for me to link the dependencies properly in my PCL.
For example: I use a bouncycastle DLL / dependency in my PCL. When I reference the PCL to my android / iOS app it requires me to link the same dependency / dll again, just inside the native project.
So now I have two dependencies in my native app which seems redundant:
NativeApp:
PCL
BouncyCastle
Is it possible that I only need the BC reference in the PCL?
Thanks.
PCLs use .NET portable (a subset of the whole .NET library) while standard libraries use the full .NET library Becaue of that PCLs cannot reference standard .NET Libraries because they use two different sets of .NET.
On top of that PCLs define the target platforms it is going to support. You can see this in the properties > Library > Targeting of your PCL.
PCLs can only reference libraries that are also PCLs that contain a collection of targets that contain ALL of the targets the PCL has itself.
If you want to make another library for your PCL to reference, make it a PCL itself and make sure it has all the same targets than the PCL that is going to reference it.

Does Android Library project support native libraries?

I have read the overview for Android Library project. I have in mind to develop an Android project library containing native libraries and JNI wrapper which would be included into the Android project. However, the doc does not explicitly mention if Android library project can include native libraries.
Can anyone confirm/infirm support for native libraries in Android library projects ?
As Android Document said:
An Android library project is a development project that holds shared
Android source code and resources.
An Android Library Project, in fact, isn't so different from normal Android project. You can make a normal android project as library project, except asset folder. They're just different when you declare in Eclipse Buid Path or something similar in other IDEs.
Native support simply, just a call to native layer (as in your post, Native Library) such as C/C++ library file (*.so file). This function is not specific to Android, but in normal Java project also support this feature: Calling functions from another language inside Java.
So, in short answer, yes :)

Categories

Resources