Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enabling minifi on android causes classCast Exeption #731

Open
PeterHasse opened this issue Jun 5, 2024 · 3 comments
Open

Enabling minifi on android causes classCast Exeption #731

PeterHasse opened this issue Jun 5, 2024 · 3 comments
Labels
question Further information is requested

Comments

@PeterHasse
Copy link

PeterHasse commented Jun 5, 2024

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
@bednar
Copy link
Contributor

bednar commented Jun 5, 2024

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

@bednar bednar added the question Further information is requested label Jun 5, 2024
@PeterHasse
Copy link
Author

PeterHasse commented Jun 5, 2024

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
Copy link
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
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

2 participants