"主题图标"功能会在安卓12上导致动态壁纸崩溃。

13

我最近注意到我的动态壁纸应用在用户尝试在Android 12上设置新引入的“主题图标”功能时会崩溃。这个新功能从用户当前的静态壁纸中计算出一个颜色板,并使用此板来为其他一些应用程序的图标着色(这是新“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)

目前我只能在三星Galaxy S21 / S21 Ultra手机上观察到此崩溃问题,但随着用户将系统更新为Android 12,这个问题将出现在更多的手机上。

由于我没有拥有Galaxy S21,而且Android Studio模拟器仍然缺少“主题图标”选项(可能是因为这个功能目前仍处于beta版),所以我目前无法重现此崩溃。

有人有关于如何解决这个灾难性问题的线索吗?任何帮助都将不胜感激!

11月18日更新:我已经能够在Android Studio模拟器上测试新的“主题化图标”功能(在新推出的“SV2”版本上)。这个版本非常有问题,但我没有能够重现类似的崩溃。这让我认为这个崩溃问题是三星手机独有的。

我尝试从“Galaxy Mobile - Remote Test Lab”网站上公开提供的手机中测试一些Galaxy S21设备,但它们实现了一个没有“主题化图标”功能的Android 12 beta版。

我想生成完整的崩溃报告(日志+视频)并发送给三星,但我仍然找不到安装有Android 12的Galaxy S21手机(Android 12系统更新于11月15日开始适用于Galaxy S21手机)。与此同时,随着越来越多的用户将手机更新为Android 12,崩溃报告也在不断增加……这真是太遗憾了!


1
这对于三星以外的任何人来说都很困难。这似乎是三星定制壁纸逻辑中的一个错误。 - CommonsWare
1
我已经开始收到来自不同用户的电子邮件,他们已经升级到Android 12...他们全部告诉我,在升级到Android 12后,壁纸停止工作,并且他们都恰好拥有三星S21 Ultra。看到所有这些而又无能为力是令人无法忍受的... - porlicus
最终我得到了一台搭载最新Android 12的Pixel 5a设备,第一件事当然是安装我的动态壁纸应用并启用“主题图标”。幸运的是,没有出现任何问题和崩溃,一切都按照预期正常工作。这证实了该问题仅影响三星设备。 - porlicus
我想知道那个错误是否只在“主题图标”开启时发生。如果是的话,我们可以建议暂时关闭该选项作为解决方案。但我不确定。我不认识任何拥有三星S21的人...顺便说一句,即使在Pixel 5a中,“主题图标”选项仍被标记为Beta。 - porlicus
3个回答

8

找到解决方案。

文件名:wallpaper.xml

之前是:

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

改为:

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

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

@Redwarp更新:应使用位图而非矢量图像。

应用程序更新后:

输入图片说明


1
很奇怪。我的应用程序已经设置为drawable而不是mipmap,但我仍然遇到了崩溃... - Redwarp
1
我确认,这个解决方案可行!!至少在三星远程测试实验室的三星s21 ultra上是这样的!首先,我在那里重现了这个错误,然后我应用了Alexey提供的解决方案,并在三星远程测试实验室中再次测试了我的动态壁纸应用程序,令我惊讶的是,这个错误消失了!!我不知道为什么,但这个解决方案真的很有效!谢谢Alexey!P.S.似乎三星OneUI需要壁纸“android:thumbnail”图标来获取壁纸颜色,由于某种未知原因,如果它位于mipmap目录中,则无法找到它。因此,将其放置在drawable目录中可以解决这个问题。 - porlicus
1
我想告诉大家,我刚刚收到了一位三星S21 Ultra真实用户的第一次确认,证明这个解决方案是有效的。 - porlicus
2
对我来说需要额外的精度:修复对我无效,因为我正在使用矢量可绘制对象。我的缩略图确实是一个可绘制对象,但不是位图。一旦我用位图(在我的情况下是webp)替换了矢量可绘制对象,然后我就可以在三星远程测试实验室上验证我的应用程序不再崩溃了。非常感谢@Aleksey的建议。 - Redwarp
1
@go3d 文件livewallpaper.xml没有问题。你可以尝试使用“-keepdirectories”命令从混淆器中排除某些文件夹。然后构建APK并检查livewallpaper.xml和minics.png文件。如果一切正常,发布更新。我会在S21上测试并报告结果。 - Aleksey
显示剩余10条评论

1

有一段时间我一直在寻找与流行动态壁纸相关的类似问题的评论。我只找到了一个应用程序的类似评论。今天我更新了我的手机,所有我的动态壁纸都没有按预期工作。然后我安装了“地球和月亮”,这个应用程序运行良好。这意味着我们做错了什么,或者相反,我们没有做某些事情 :) 在不久的将来,我将开始调查这个问题。


1
我刚想报告Walloop仍在运行(Android 12,三星S21),所以一定是可能的!但我不知道该尝试什么,所以期待听到你的发现! - iangilman
由于涉及到壁纸颜色,我想知道是否可以在onComputeColors或其他地方进行不同的操作。我的动态壁纸有onComputeColors函数,但它只返回三个纯黑色值;也许系统不喜欢这样并试图自己解决? - iangilman
请问您能否指定在S21上无问题运行的确切壁纸名称或其包名称?有很多名为“Earth&Moon”的应用程序 :) - porlicus
1
"Earth & Moon 3D Live Wallpaper" 由 CodeKonditor 开发,"Matrix Live Wallpaper" 由 Crydata 开发。 - Aleksey

0
我的应用程序的一个用户告诉我,他正在使用三星S21,并且最新的三星操作系统更新(SP1A.210812.016.G991BXXU3BUKG)在我实施 @Aleksey 的修复之前就已经为他们解决了问题。很高兴看到三星正在照顾这件事情。
话虽如此,我仍然赞成我们自己实施修复,以防还有其他需要它的地方。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接