5

我们正在构建一个使用HighCharts Android包装库*的应用程序。在开发过程中,应用程序通过运行命令安装在设备/模拟器上,一切正常。

但是,在制作构建视图Make ProjectGenerate Signed APK或由CI/DC Pipelines生成的构建时- 应用程序总是崩溃。

Highcharts调用时会在某处发生崩溃Gson(需要在外部提供它作为Gradle构建文件中的依赖项)。Gson然后抛出java.lang.ArrayIndexOutOfBoundsException异常。(下面的堆栈跟踪)

它不是什么:

  1. 与安卓版本无关。在 API 的 29、25、23 上测试
  2. 与设备无关。发生在运行干净android 的物理设备和模拟器上。
  3. Proguard相关(我认为)- 也发生在debug构建上,并且keep为了安全起见,还添加了激进的声明。
  4. 相同的图表在我们的网站和 iOS 应用程序上正常工作。

也许相关:

Highcharts Android尚不兼容Hilt DI,它深深嵌入在我们的代码中。显然,Highcharst期望Context提供给它的View构造函数的Activity类型是类型,Hilt因为 in 将 a 注入FragmentContextWrapperFragments带有注释的@AndroidEntryPoint. 描述和解决方法在这里

我想了解的是:

在RunMake.APK期间构建的输出可能有什么区别?

可以在此处找到有关崩溃的完整描述以及示例代码


*HighCharts是一个JS图表库。该库Android Highcharts是在自定义. 这也是包装代码的对象和函数。JavaJSWebViewAPIJavaJS

堆栈跟踪:

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)
4

0 回答 0