Mapping and GIS Solutions Community

 View Only
Expand all | Collapse all

Catalyst Integration issue - uable to load BlueBottle$WetDrySubscription

  • 1.  Catalyst Integration issue - uable to load BlueBottle$WetDrySubscription

    Posted 03-11-2019 23:20
      |   view attached
    I am trying to use catalyst in one of our survey projects. While building the APK, I've had issues with NDK .so files. I've downloaded them from your PENMAP application and used in my android application.
    I am able to load the subscription properly. But when trying to connect to catalyst, I am getting following error as depicted in the screenshot. Am I missing some libraries?
    NullPointerException: ClassLoader.loadClass returned null for com.trimble.bluebottle.remoteapi.protocolbuffers.BlueBottle$WetDrySubscription
    I am using the CatalystFacade library from the sample application shipped along with the SDK, and building the application using Kotlin, Yoga, Dagger2. Please let me know if you want me to share more details.
    I was not able to find 
    // glue layer
    System.loadLibrary("Trimble.Ssi.Wrapped.Common");
    System.loadLibrary("Trimble.Ssi.Wrapped.GNSS");
    Hence used following from the PenMap application APK:
    // glue layer
    System.loadLibrary("Trimble.Ssi.CSWrapped.Common");
    System.loadLibrary("Trimble.Ssi.CSWrapped.GNSS");
    Also, couldn't find the mock so files, hence commented them out:
    //        System.loadLibrary("Trimble.Ssi.Driver.Mock.Common");
    //        System.loadLibrary("Trimble.Ssi.Driver.Mock.GNSS"); 
     
    Kindly help, We are in a very tight timelines and I couldn't find the said class anywhere!


  • 2.  Re: Catalyst Integration issue - uable to load BlueBottle$WetDrySubscription

    Posted 03-12-2019 03:35

    Hi,

     

    this is tricky. 

    So first of all you don't need the NDK at all. TPSDK/ the Trimble Catalyst SDK has different layers - at the very bottom the native .so files you mentioned.

    Those are all wrapped either to Java or Xamarin C#; the drivers you load via the API like shown in the facade are proxy drivers that essentially link to the corresponding .so files.

    I guess you have updated the Google Protobuffer stuff?

    So we use Google.Protobuf 3.0.0-beta3. 

    Unfortunately this version is not compatible with the currently released v3.7 - or anything above 3.0.0-beta3. Plus its a none-trivial change for us to update as we would need to update all components in one  step. 

    Could you please have a look at the version of your ProtoBuf stuff. I'm not sure how this looks in Kotlin - but my guess is the versions are consistent with Java and Xamarin.

    Also ensure that Google.ProtoBuf is added as reference/ package to your solution. 

     

    I don't think its related to the NDK or a missing .so - if you stick to the facade stuff and don't mix with other things (depending on the Penmap version you might get different driver versions - which MIGHT result in a changed interface on the low level) it should be good.

     

    I hope at least

    Regards

    Nico



  • 3.  Re: Catalyst Integration issue - uable to load BlueBottle$WetDrySubscription

    Posted 04-24-2019 03:09

    Hi Nico,

    Do you have any planned date to support the latest version of Google.Protobuf?

     

    Regards

    Dinesh Mathur



  • 4.  Re: Catalyst Integration issue - uable to load BlueBottle$WetDrySubscription

    Posted 04-25-2019 03:01

    Hi Dinesh,

     

    we are currently investigating how to handle this without breaking backwards compatibility.

    So we have this on our radar but have not defined a date as we still look for the most graceful solution.

     

    Regards

    Nico



  • 5.  Re: Catalyst Integration issue - uable to load BlueBottle$WetDrySubscription
    Best Answer

    Posted 03-13-2019 01:33

    Thank you Nico,

    I was able to resolve the issue. 
    The problem was in tpsdk_ssi.jar in the CatalystFacade has google.protobuf was also included. And this was causing duplicate classes because the android build is complaining that the protobuf classes are coming from two different jar files one from this spsdk_ssi.jar and other set from google protobuf package. Hence I've removed the package com inside the JAR initially. This has removed the trimble.bluebottle.remoteapi as well, and that caused all the confusion.
    Now I've just removed the com.google.protobuf . After removing this, the application is working just fine and I am able to get the satellite counts and lat longs. Attached the sample screenshot.