Hello folks! Did you ever think about how cool it would be to re-use an already working and tested Java library to save a couple of months of development time? Well, you’re not alone. The third-party library ecosystem for Android is vast and had the potential to save app developers a lot of time. Most essential features for an Android application have almost certainly already been coded. Because of this, it is appealing to try and reuse these existing libraries when creating a Xamarin.Android application.
Using JAR Files in Xamarin.Forms
Today, we will be showing you a quick example of how to use a native .jar library in your Xamarin.Forms application! For example, what would you do if you needed to use some methods from the old Joda Time Library in a Xamarin.Forms app? Below are the steps to make that work:
- Start by create a small Xamarin.Forms project (the default one is perfect). Add an Android Bindings Library to the Solution. Just like this:
- You will see 3 directories in the new project. Download the Joda .jar file from GitHub here. Go to the Jars directory and paste the jar file into it. Then add it to the project. You can have multiple .jar files here, but only a single .aar (you can check this page for more info)
- Change the jar file Build Action property to EmbeddedJar. This is important. (If you are binding a .aar file, use the LibraryProjectZip Build Action instead)
- Build it!
- Whoops! Something went wrong. As you might have expected, there are some differences between both programming languages that need to be resolved manually. If you click on each error, they will show you the objects in the library are missing an implementation, a method, or a whole class. The easiest approach is to remove the properties and methods you know you won’t be using. So, for now, let’s hide them under the rug ;). Each generated object has a “Path” you can use to make the compiler handle that object however you want.
- Go to the Metadata.xml file inside the Transforms directory and add a <remove-node path=”<path string generated by the compiler here>”/> for each class that is giving you trouble and rebuild your binding project. Just like this:
- Success! Now we’re ready to use our library! Go to your Xamarin.Android project and add a reference to the BindingLibrary project
- For simplicity, we will use the library in the OnCreate method of the MainActivity class, but you’re free to create your own helper class to let Xamarin.Forms access your methods. From the Xamarin.Android app we can access the Joda Time Library methods
- But, what if we want to use a property that we had to remove in step 6? Well, you need to have some knowledge about the library and the programming language used to build it. Let’s assume we would like to use the DateTime class within the Joda library. Let’s remove the <remove-node> tag for it and try to build it.
- In this scenario, the compiler is telling you it can’t build the DLL, because it can’t find any GetValue method to override. Let’s get rid of that method because we won’t be using it. Copy the path right above the error and use it to add a <remove-node> tag in the Metadata.xml file:
- Rebuild your BindingLibrary project and go back to the MainActivity in Xamarin.Android. This time, you should be able to access the DateTime class and it’s methods.
And that’s all, folks! You’ve now referenced a Java JAR library in your Xamarin.Forms app.
If you need further guidance about how to deal with bindings in Android, you can check JonDouglas’s Github here and here for some useful information.