Download presentation
Presentation is loading. Please wait.
1
Using Java interop in your Xamarin.Android apps @WMeints
2
Agenda Java interop… wait what!? Beyond basic interop Building your own interop components
3
JAVA INTEROP, WAIT WHAT?!
4
Java interop, what what?! Building an Android app in C# namespace TaskTracker.Client.Android { [Activity(Label = "TaskTracker.Client.Android", MainLauncher = true, Icon = "@drawable/icon")] public class Activity1 : ListActivity { private TasksOfflineContext _context; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); _context = new TasksOfflineContext("sync", new Uri("http://10.0.2.2:15314/taskssyncservice.svc/")); _context.CacheController.ControllerBehavior.SerializationFormat = SerializationFormat.ODataJSON; _context.CacheController.RefreshCompleted += OnRefreshCompleted; _context.CacheController.RefreshAsync(); }
5
Java interop, what what?! Meanwhile in Java country… Cross Platform Mobile Development - Android public class Activity1 extends android.app.ListActivity implements mono.android.IGCUserPeer { static final String __md_methods; static { __md_methods = "n_onCreate:(Landroid/os/Bundle;)V:GetOnCreate_Landroid_os_Bundle_Handler\n" + ""; mono.android.Runtime.register ("TaskTracker.Client.Android.Activity1, “ + “TaskTracker.Client.Android, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", Activity1.class, __md_methods); } public Activity1 () { super (); if (getClass () == Activity1.class) mono.android.TypeManager.Activate ("TaskTracker.Client.Android.Activity1, “ + “TaskTracker.Client.Android, Version=1.0.0.0, Culture=neutral, “ …
6
Java interop, what what?! Linux Kernel Mono (.NET Runtime) Dalvik (Java Runtime).NET APIs Android Bindings Android.* Java.* MCW ACW Android callable wrappers Mono callable wrappers
7
Java interop, wait what?! What you are essentially doing is building apps that rely heavily upon interop. In fact: Everything you build on Android will at some point talk to a piece Java code. Cross Platform Mobile Development - Android
8
Java interop, wait what?! So why not take advantage of the situation? – You can extend your app with Java code – Found a cool Android library? Bind it! Cross Platform Mobile Development - Android
9
BEYOND BASIC INTEROP
10
Beyond basic interop The two-way traffic between Android and Mono is done through two endpoints: – Mono Java Mono Callable Wrappers – Java Mono Android Callable Wrappers Cross Platform Mobile Development - Android
11
Beyond basic interop - MCWs Linux Kernel Mono (.NET Runtime) Dalvik (Java Runtime).NET APIs Android Bindings Android.* Java.* MCW ACW
12
Beyond basic interop – MCWs Talking to Java from.NET is done through the Java Native Interface – The next bit is going to get pointy or pointerific depending on what you like… Cross Platform Mobile Development - Android
13
MCW INTERNALS Demo Cross Platform Mobile Development - Android
14
Beyond basic interop – MCWs Steps to create an instance of a Java class – Find the handle to the type – Marshal constructor arguments – Invoke the constructor – Safe the instance pointer! Cross Platform Mobile Development - Android
15
Beyond basic interop – MCWs Steps to invoke a Java method: – Find the handle to the method – Marshal the arguments – Invoke the method Cross Platform Mobile Development - Android
16
Beyond basic interop – MCWs Notice the TransferOwnership settings – Important, who is the owner of the handle? – Care must be taken when transferring handles – If two objects own a handle, the app will be unstable! Cross Platform Mobile Development - Android
17
Beyond basic interop – MCWs Important to know: – When invoking JNI, native handles are used – Has effect on garbage collection, so clean it up! – Please, Reduce the amount of memory copy actions, it will improve the performance. Cross Platform Mobile Development - Android
18
Beyond basic interop - ACWs Linux Kernel Mono (.NET Runtime) Dalvik (Java Runtime).NET APIs Android Bindings Android.* Java.* MCW ACW
19
ACW INTERNALS Demo Cross Platform Mobile Development - Android
20
Beyond basic interop - ACWs Android callable wrappers are the least of your problems. – Generated by the Mono compiler – Don’t touch or you will break them! Cross Platform Mobile Development - Android
21
Performance considerations A few things you need to know: – Value types are copied between Java and Mono – For reference types pointers are exchanged – 4 bytes in.NET != 4 bytes in Java, sometimes Cross Platform Mobile Development - Android Beware Bitmap users!
22
BUILDING YOUR OWN INTEROP
23
Building your own interop Explicit use of interop is possible from your own app through these methods: – Add Java source files to your project – Create bindings for an existing library Cross Platform Mobile Development - Android
24
Adding Java sources Add a.java file to your project for – You found an activity or service that you don’t want to translate to.NET code – You have a single component, but not enough to create a library (Please keep it to one file). Cross Platform Mobile Development - Android
25
ADDING JAVA SOURCES Demo Cross Platform Mobile Development - Android
26
Binding Java libraries This is the real stuff, the big one, the goodest. – Allows you to use existing libraries – Automatically generates wrappers for Java classes based on the settings you provide. Cross Platform Mobile Development - Android
27
Binding Java libraries The steps for binding a Java library: 1.Add the Java library to the binding project 2.Customize the transformations 3.Extend the library with your own goodies Cross Platform Mobile Development - Android
28
Binding Java libraries The steps for binding a Java library: 1.Add the Java library to the binding project 2.Customize the transformations 3.Extend the library with your own goodies Cross Platform Mobile Development - Android
29
BINDING A JAVA LIBRARY Demo Cross Platform Mobile Development - Android
30
Binding Java libraries The steps for binding a Java library: 1.Add the Java library to the binding project 2.Customize the transformations 3.Extend the library with your own goodies Cross Platform Mobile Development - Android
31
CUSTOMIZING TRANSFORMATIONS Demo Cross Platform Mobile Development - Android
32
Binding Java libraries The steps for binding a Java library: 1.Add the Java library to the binding project 2.Customize the transformations 3.Extend the library with your own goodies Cross Platform Mobile Development - Android
33
EXTENDING BINDINGS Demo Cross Platform Mobile Development - Android
34
Final thoughts Java interop is all around you in Xamarin.Android – Don’t worry too much about it in your day-to-day Android development. – Use it when you need it, to get more power! Cross Platform Mobile Development - Android
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.