我们正在构建一个使用HighCharts
Android
包装库*的应用程序。在开发过程中,应用程序通过运行命令安装在设备/模拟器上,一切正常。
但是,在制作构建视图Make Project、Generate Signed APK或由CI/DC Pipelines生成的构建时- 应用程序总是崩溃。
Highcharts
调用时会在某处发生崩溃Gson
(需要在外部提供它作为Gradle
构建文件中的依赖项)。Gson
然后抛出java.lang.ArrayIndexOutOfBoundsException
异常。(下面的堆栈跟踪)
它不是什么:
- 与安卓版本无关。在 API 的 29、25、23 上测试
- 与设备无关。发生在运行干净android 的物理设备和模拟器上。
- 不
Proguard
相关(我认为)- 也发生在debug
构建上,并且keep
为了安全起见,还添加了激进的声明。 - 相同的图表在我们的网站和 iOS 应用程序上正常工作。
也许相关:
Highcharts Android
尚不兼容Hilt DI
,它深深嵌入在我们的代码中。显然,Highcharst
期望Context
提供给它的View
构造函数的Activity
类型是类型,Hilt
因为 in 将 a 注入FragmentContextWrapper
到Fragments
带有注释的@AndroidEntryPoint
.
描述和解决方法在这里
我想了解的是:
在Run和Make.APK
期间构建的输出可能有什么区别?
*HighCharts
是一个JS
图表库。该库Android Highcharts
是在自定义. 这也是包装代码的对象和函数。Java
JS
WebView
API
Java
JS
堆栈跟踪:
2020-07-30 09:39:25.679 5627-5627/com.app.android.debug E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.app.android.debug, PID: 5627
java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
at com.google.gson.internal.$Gson$Types.getGenericSupertype($Gson$Types.java:240)
at com.google.gson.internal.$Gson$Types.getSupertype($Gson$Types.java:272)
at com.google.gson.internal.$Gson$Types.getCollectionElementType($Gson$Types.java:290)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory.create(CollectionTypeAdapterFactory.java:52)
at com.google.gson.Gson.getAdapter(Gson.java:423)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:56)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:97)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:61)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69)
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(MapTypeAdapterFactory.java:208)
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(MapTypeAdapterFactory.java:145)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69)
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(MapTypeAdapterFactory.java:208)
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(MapTypeAdapterFactory.java:145)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69)
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(MapTypeAdapterFactory.java:208)
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(MapTypeAdapterFactory.java:145)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69)
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(MapTypeAdapterFactory.java:208)
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.write(MapTypeAdapterFactory.java:145)
at com.google.gson.Gson.toJson(Gson.java:669)
at com.google.gson.Gson.toJson(Gson.java:648)
at com.google.gson.Gson.toJson(Gson.java:603)
at com.google.gson.Gson.toJson(Gson.java:583)
at com.highsoft.highcharts.core.i.a(SourceFile:8)
at com.highsoft.highcharts.core.f.c(SourceFile:2)
at com.highsoft.highcharts.core.HIChartView$q0.update(SourceFile:4)
at java.util.Observable.notifyObservers(Observable.java:163)
at java.util.Observable.notifyObservers(Observable.java:115)
at com.highsoft.highcharts.core.HIFoundation$a.update(SourceFile:4)
at java.util.Observable.notifyObservers(Observable.java:163)
at java.util.Observable.notifyObservers(Observable.java:115)
at com.highsoft.highcharts.common.hichartsclasses.HISeries.setData(SourceFile:3)
at com.app.android.ui.customviews.hicharts.LineGraphChart$applyDataSet$1.run(LineGraphChart.kt:256)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7397)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935)