Skip to content

Enabling minifi on android causes classCast Exeption #731

Description

@PeterHasse

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:

  • Client Version: 7.0.0 and 7.1.0 not sure about older versions
  • InfluxDB Version: 2.x but issue happens also if no connection is possible
  • JDK Version: java 11
  • Platform: Android

Activity

bednar commented on Jun 5, 2024

@bednar
Contributor

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 on Jun 5, 2024

@PeterHasse
Author

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 on Jun 25, 2024

@PeterHasse
Author

@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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions