最近我确实将应用程序迁移到targetSdkVersion = 28。 将更新的应用发布到Google Play之后,我开始在Fabric.io中获得非常奇怪的崩溃报告: Crash report
Fatal Exception: java.lang.NullPointerException
Attempt to invoke virtual method 'android.os.IBinder android.view.SurfaceControl.getHandle()' on a null object reference
android.os.Parcel.createException (Parcel.java:1956)
android.os.Looper.loop (Looper.java:193)
android.app.ActivityThread.main (ActivityThread.java:6718)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858)
只有当用户从Play商店应用中打开应用时,此崩溃才会在带有Android Pie的Google设备(像素系列)上发生;从主屏幕打开应用时,一切正常。 而且崩溃报告中没有对我的代码的任何跟踪。
当我禁用proguard时,一切都会按预期运行
答案 0 :(得分:1)
我们有一个类似的例外-也仅在Pixel设备上崩溃:
if (exception.getMessage.contains("something")) {
// handle exception
} else {
// pass to other handler
}
我们将java.lang.NullPointerException: Attempt to invoke direct method 'void android.view.SurfaceControl.checkNotReleased()' on a null object reference
at android.os.Parcel.createException(Parcel.java:2077)
at android.os.Parcel.readException(Parcel.java:2039)
at android.os.Parcel.readException(Parcel.java:1987)
at android.app.IActivityTaskManager$Stub$Proxy.activityPaused(IActivityTaskManager.java:4489)
at android.app.servertransaction.PauseActivityItem.postExecute(PauseActivityItem.java:64)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:177)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
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:930)
Caused by: android.os.RemoteException: Remote stack trace:
at android.view.SurfaceControl.access$800(SurfaceControl.java:77)
at android.view.SurfaceControl$Transaction.reparent(SurfaceControl.java:2429)
at com.android.server.wm.SurfaceAnimator.transferAnimation(SurfaceAnimator.java:238)
at com.android.server.wm.WindowContainer.transferAnimation(WindowContainer.java:1261)
at com.android.server.wm.AppWindowToken.transferStartingWindow(AppWindowToken.java:1575)
和targetSdkVersion
从compileSdkVersion
提升到29
,但该异常不再出现。
答案 1 :(得分:1)
您可以向您添加此规则proguard-rules.pro
:
-keep class android.view.**
除此之外,你能包括一些你的 proguard 配置吗?
答案 2 :(得分:0)
我自己在这个问题上呆了好几个星期,直到我发现这个问题
buildTypes {
debug {
debuggable true
buildConfigField 'String', "GOOGLE_KEY", GOOGLE_API
buildConfigField "boolean", "IS_DEBUG", "true"
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
minifyEnabled false
shrinkResources false
}
release {
debuggable false //This needs to be "true"
buildConfigField "boolean", "IS_DEBUG", DEBUGABLE
buildConfigField 'String', "GOOGLE_KEY", GOOGLE_API
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules-optimize.pro'
minifyEnabled false
proguardFile PROGUARD_FILE
shrinkResources false
}
}
只需将debuggable
中的release
更改为true
。
答案 3 :(得分:0)
更新目标SDK版本为30,升级构建工具版本和Gradle版本。然后 clean
和 rebuild
项目。如果问题没有解决,我们可能需要为应用程序寻找更详细的日志数据。