Talk I did on Java interop on the Mono for Android platform. Shows what Mono Callable Wrappers are and what you can do with them. Also demonstrates the use of Java Binding Libraries.
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
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
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
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
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
Beware Bitmap users!
Cross Platform Mobile Development - Android
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
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
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
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
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