monkeyfest.io
Java Binding Tips and Tricks 2017
View Slide
Agenda▪▪▪
Java BindingsLibraries in Xamarin.Android EcosystemXamarin.Android(Mono.Android.dll)other Java LibsFrameworkLibraries(System*)OpenTKother .NET Libs (PCL, netstandard, XA libs)Android Framework &Java Framework Subset
What are Java Bindings?▪▪▪
Why use Java Bindings?▪▫▪▫▫
Which are Java Bindings, for example?▪▪▪▪github:xamarin/XamarinComponents
Discover Java Android Experience▪github:wasabeef/awesome-android-ui▪▪
How Java Bindings work▪▪ JNI▪▪
How Java Bindings work▪▪▫▫▪▫▪new
Project StructureTips and Tricks
Java Binding Project: general steps
How Java Bindings are Built.jar api.xml *.cs*.dll*.cs*.csGenerateBindings CSCompileMetadata.xmladditional*.csreference *.dllreference *.dllExportJarToXmljavadoc.jar
Migrate to new Class parser (if old)▪▪▪▫▪▫▫new
Jar/Aar and Build Actions▪▫▫
Xamarin.Build.Download package▪▫▫▪▪▫new
▪Library Dependency Tipsb.jarclass C2 extends a.C1 { ... }ABinding.dllpublic class C1 { ... }a.jarapi.xmlBBinding.dllpublic class C2 : A.C1 { ...}a.jarclass C1 { ... }b.jar
Library Dependency Tips▪▫▫▪▫▫
Give meaningful Parameter Names▪▫▫▪▫new
Importing API Documentation▪▫
Metadata FixupTips and Tricks
▪▪▪▪Build Bindings without Metadata fixup
Metadata fixup: why is it required?▪▫▫▪▫▫
▪▪▫▫▫▪▪ [Java Bindings Metadata]Metadata.xml
Find the causes of unexpected results▪▪▫
Easiest build fix▪▫▪
Individual Metadata fixup Tips▪▪▪▪▪▪▪▪▪TroubleshootingBindings
Namespace / Type Name conflicts
Fix Inconsistent Member AccessJava C#
Dealing with Variants and GenericsJava C#
Dealing with Variants and Generics
Name Collision on EventArgsJava C#
Name Collision on EventArgs
Beautifying Managed API▪▫▫▫▪▫→▪▫→
Knowing Limitations...
Future Topics
Java8 Default Interface Methods▪▫▪▫▫▪▫
Java8 Default Interface Methods▪▪▪
Android Architecture Components▪▫▪▫▫
Android Architecture Components▪▫▫▪▫▫
Thanks▪▫▫▫▫▫