influxdata / influxdb-client-java

InfluxDB 2 JVM Based Clients
https://influxdata.github.io/influxdb-client-java/
MIT License
422 stars 129 forks source link

Enabling minifi on android causes classCast Exeption #731

Open PeterHasse opened 1 month ago

PeterHasse commented 1 month ago

Steps to reproduce: List the minimal actions needed to reproduce the behavior.

I not sure how to reproduce this in a general way. In our android application https://github.com/omnt/OpenMobileNetworkToolkit the issues occures when minifiing is anabled. As a workarround i added

-keep class com.influxdb.**

to the proguard rules. Im not entierly sure if the problem is no caused by our code but at least disabling the minifing for the influx lib solves the isse.

  1. clone omnt git
  2. remove the pro guard rule -keep class com.influxdb.** (if already included in the code version)
  3. run the app and at random strings an url in settings -> logging -> remote influxDB
  4. enable logging
  5. restart the app (probably optional as it probably will crash

altetnativ the 0.2 release APK from the github page results in the same issue but is probably not helpfull for debugging

Expected behavior: Same behavior of normal and minified build

Actual behavior: minfied build causes an exeption

 de....okus.OpenMobileNetworkToolkit  E  FATAL EXCEPTION: main                                                                                                   Process: de.fraunhofer.fokus.OpenMobileNetworkToolkit, PID: 12351
                                                                                                    java.lang.RuntimeException: Unable to start service de.fraunhofer.fokus.OpenMobileNetworkToolkit.LoggingService@f51d1f4 with Intent { cmp=de.fraunhofer.fokus.OpenMobileNetworkToolkit/.LoggingService }: java.lang.ClassCastException
                                                                                                        at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4839)
                                                                                                        at android.app.ActivityThread.-$$Nest$mhandleServiceArgs(Unknown Source:0)
                                                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2289)
                                                                                                        at android.os.Handler.dispatchMessage(Handler.java:106)
                                                                                                        at android.os.Looper.loopOnce(Looper.java:205)
                                                                                                        at android.os.Looper.loop(Looper.java:294)
                                                                                                        at android.app.ActivityThread.main(ActivityThread.java:8177)
                                                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                                                        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
                                                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
                                                                                                    Caused by: java.lang.ClassCastException
                                                                                                        at androidx.appcompat.app.ToolbarActionBar$$ExternalSyntheticThrowCCEIfNotNull0.m(R8$$SyntheticClass:0)
                                                                                                        at com.influxdb.client.internal.AbstractInfluxDBClient.<init>(AbstractInfluxDBClient.java:126)
                                                                                                        at com.influxdb.client.internal.AbstractInfluxDBClient.<init>(AbstractInfluxDBClient.java:79)
                                                                                                        at com.influxdb.client.internal.InfluxDBClientImpl.<init>(InfluxDBClientImpl.java:99)
                                                                                                        at com.influxdb.client.InfluxDBClientFactory.create(InfluxDBClientFactory.java:261)
                                                                                                        at com.influxdb.client.InfluxDBClientFactory.create(InfluxDBClientFactory.java:180)
                                                                                                        at de.fraunhofer.fokus.OpenMobileNetworkToolkit.InfluxDB2x.InfluxdbConnection.<init>(InfluxdbConnection.java:57)
                                                                                                        at de.fraunhofer.fokus.OpenMobileNetworkToolkit.InfluxDB2x.InfluxdbConnections.getRicInstance(InfluxdbConnections.java:43)
                                                                                                        at de.fraunhofer.fokus.OpenMobileNetworkToolkit.LoggingService.setupRemoteInfluxDB(LoggingService.java:513)
                                                                                                        at de.fraunhofer.fokus.OpenMobileNetworkToolkit.LoggingService.onStartCommand(LoggingService.java:314)
                                                                                                        at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4821)
                                                                                                        at android.app.ActivityThread.-$$Nest$mhandleServiceArgs(Unknown Source:0) 
                                                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2289) 
                                                                                                        at android.os.Handler.dispatchMessage(Handler.java:106) 
                                                                                                        at android.os.Looper.loopOnce(Looper.java:205) 
                                                                                                        at android.os.Looper.loop(Looper.java:294) 
                                                                                                        at android.app.ActivityThread.main(ActivityThread.java:8177) 
                                                                                                        at java.lang.reflect.Method.invoke(Native Method) 
                                                                                                        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552) 
                                                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971) 

Specifications:

bednar commented 1 month ago

Hi @PeterHasse,

Thank you for reporting this issue. It appears that the problem may be related to the obfuscation settings for the retrofit HTTP library. To help resolve this, could you please check if the ProGuard Retrofit rules are being applied successfully? You can find the necessary ProGuard configurations here: Retrofit ProGuard Rules.

Applying these rules correctly is crucial for Retrofit to function properly after the obfuscation process. If you continue to experience issues or if the rules are correctly in place, please let us know.

Best regards

PeterHasse commented 1 month ago

Hey @bednar

I can confirm that the rules from the retrofit pro guard file are merged into app/build/outputs/mapping/release/configuration.txt which is to my understanding the file used for building the release.

I did not manged to produce a log output of r8/gradle for further confirmation.

I did copy all the rules from retrofit to our proguard file and it did not solve the issue.

PeterHasse commented 1 week ago

@bednar do you need futher information from our side? We now have a working github action flow to build the APK which might help to analyze the problem.
https://github.com/omnt/OpenMobileNetworkToolkit/actions