ProGuard causing Jackson crash, “Conflicting property name definitions”


#1

I am finishing up an application and just built and installed the release version of my APK for the first time. Interestingly, it crashes on start. The debug version of the application works fine. I am using ProGuard in the release version.

The crash occurs once I authenticate with the Nest API. How can I get past this?

Here is the stack trace:

09-06 23:49:32.807 15229-15229/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: <my_package>, PID: 15229
java.lang.IllegalStateException: Conflicting property name definitions: 'locale' (for [field com.nestlabs.sdk.Device#b]) vs 'name' (for [method com.nestlabs.sdk.Device#b(0 params)])
at com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.findRenamed(Unknown Source)
at com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.findNewName(Unknown Source)
at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector._renameProperties(Unknown Source)
at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.collect(Unknown Source)
at com.fasterxml.jackson.databind.introspect.BasicClassIntrospector.collectProperties(Unknown Source)
at com.fasterxml.jackson.databind.introspect.BasicClassIntrospector.forDeserialization(Unknown Source)
at com.fasterxml.jackson.databind.introspect.BasicClassIntrospector.forDeserialization(Unknown Source)
at com.fasterxml.jackson.databind.DeserializationConfig.introspect(Unknown Source)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(Unknown Source)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(Unknown Source)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(Unknown Source)
at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(Unknown Source)
at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(Unknown Source)
at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(Unknown Source)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(Unknown Source)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(Unknown Source)
at com.firebase.client.d.a(Unknown Source)
at com.nestlabs.sdk.aa.a(Unknown Source)
at com.firebase.client.c.ba.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

I can reproduce this on the Android Nest SDK sample app by simply enabling ProGuard, and logging in with my account that I use with Nest Home Simulator. I compiled the Nest SDK sample app against 1.1.1. With the sample app, the crash was slightly different, but the same general issue.


#2

I believe we have a fix identified. Working on some updates to the SDK and we didn’t seem to run into this issue in the new builds. Working on an ETA for release but I would expect sometime late September early October.

Update

Couldn’t seem to reproduce it after some maintenance changes, but haven’t explicitly tested for it on the old build. I’ll double check it works before we publish and definitely let you know as soon as it goes up.

Update 2

Well turns out it wasn’t fixed. Will keep trying. It is open source and we welcome all pull requests :stuck_out_tongue:


#3

Unfortunately we’re not sure how to patch this without re-writing. @boltup21 we’re open to someone being able to patch this on their own, but we’re just not sure what to do for it right now.

An option would to be forego using the SDK and setup the firebase connection and subscriptions by hand. It’s a bit more tedious, but will get the job done.


#4

Thank you for taking a look @urman. I think what I am going to try and do in the short term is fork the Nest android-sdk github project, and disable ProGuard on that. That way I will still be able to use ProGuard in my application code.