"Theming Icons" 功能导致 Android 12 上的动态壁纸崩溃

"Theming Icons" functionality crashes live wallpapers on Android 12

我最近注意到,当用户尝试在 Android 上设置新引入的“主题图标”功能时,我的动态壁纸应用程序崩溃了。这个新功能根据用户当前的静态壁纸计算调色板并使用此调色板为其他一些应用程序图标着色(新“Material You”设计的一个功能)。但由于某种原因,当它在 动态壁纸 上运行时,它会导致应用程序崩溃并显示以下日志:

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.Bitmap android.graphics.drawable.BitmapDrawable.getBitmap()' on a null object reference
       at android.os.Parcel.createExceptionOrNull(Parcel.java:2443)
       at android.os.Parcel.createException(Parcel.java:2421)
       at android.os.Parcel.readException(Parcel.java:2404)
       at android.os.Parcel.readException(Parcel.java:2346)
       at android.service.wallpaper.IWallpaperConnection$Stub$Proxy.onWallpaperColorsChanged(IWallpaperConnection.java:298)
       at android.service.wallpaper.WallpaperService$IWallpaperEngineWrapper.executeMessage(WallpaperService.java:2586)
       at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:44)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loopOnce(Looper.java:226)
       at android.os.Looper.loop(Looper.java:313)
       at android.app.ActivityThread.main(ActivityThread.java:8582)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:563)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1133)


Caused by android.os.RemoteException: Remote stack trace:
    at com.samsung.server.wallpaper.LegibilityColor.convertColors(LegibilityColor.java:418)
    at com.android.server.wallpaper.WallpaperManagerService$WallpaperConnection.onWallpaperColorsChanged(WallpaperManagerService.java:2169)
    at android.service.wallpaper.IWallpaperConnection$Stub.onTransact(IWallpaperConnection.java:158)
    at android.os.Binder.execTransactInternal(Binder.java:1215)
    at android.os.Binder.execTransact(Binder.java:1179)

目前我只能在 Samsung Galaxy S21 / S21 Ultra 手机上观察到此崩溃,但随着用户将系统更新到 Android 12,它会出现在更多手机上。

目前,我无法重现此崩溃,因为我没有 Galaxy S21,而且 Android Studio 模拟器仍然缺少“主题图标”选项(可能是因为此功能目前仍处于测试阶段)。

有人知道如何解决这个灾难性问题吗?非常感谢任何帮助!

11 月 18 日更新: 我能够在 Android Studio 模拟器(在新推出的“SV2”版本上)上测试新的“主题图标”功能.这个版本确实有问题,但我无法重现类似的崩溃。这让我觉得这个崩溃是三星手机独有的。

我试图在“Galaxy Mobile - Remote Test Lab”网站上使用公开可用的手机测试一些 Galaxy S21 设备,但他们实施了 Android12 的测试版,其中没有主题图标功能可用。

我想生成完整的崩溃报告(日志+视频)发送给三星,但我仍然找不到安装了 Android 12 的 Galaxy S21(Android 12 系统更新Galaxy S21 手机于 11 月 15 日开始)。与此同时,崩溃报告呈爆炸式增长,因为越来越多的用户将他们的手机更新为 Android 12...真可惜!

有一段时间我在流行动态壁纸的评论中寻找类似的问题。我只为一个应用程序找到了类似的评论。我今天更新了 phone。我所有的动态壁纸都按预期停止工作。然后我安装了“Earth & Moon”,这个应用程序运行良好。这意味着我们做错了什么,或者相反,我们没有做某事:)在不久的将来我会开始调查这个问题。

已找到解决方案。

文件名:wallpaper.xml

是:

<wallpaper bla bla bla 
android:thumbnail="@mipmap/ic_launcher" 
/>

更改为:

<wallpaper bla bla bla 
android:thumbnail="@drawable/thumbnail" 
/>

将应用程序图标复制到:drawable/thumbnail.png

来自@Redwarp 的更新:您应该使用 位图 而不是矢量图像。

应用更新后:

我的应用程序的一位使用三星 S21 的用户告诉我,新的三星 OS 更新 (SP1A.210812.016.G991BXXU3BUKG) 甚至在我实施@Aleksey 的修复之前就为他们解决了这个问题。很高兴看到三星正在处理事情。

也就是说,我仍然赞成自己也实施修复,以防其他地方需要它。