美文网首页
记一次修改compileSdkVersion无效的bug

记一次修改compileSdkVersion无效的bug

作者: 匠人plus | 来源:发表于2023-02-18 22:51 被阅读0次

背景

项目有一个新需求,适配Android 12 闪屏动画,通过调研文档,查询资料,发现完成适配需要以下几步:

1、升级项目编译版本 compileSdkVersion 31 以上
2、添加库 implementation 'androidx.core:core-splashscreen:1.0.0'
3、更换application的theme,类似以下,其中postSplashScreenTheme指原来的theme,这样可以兼容12以下版本的api,windowSplashScreenBackground是背景色,windowSplashScreenAnimatedIcon是图标

 <style name="SplashScreenTheme" parent="Theme.SplashScreen">
        <item name="windowSplashScreenBackground">@color/splash_screen_background</item>
        <item name="windowSplashScreenAnimatedIcon">@drawable/cat</item>
        <item name="postSplashScreenTheme">@style/Theme.SplashScreenDemo</item>
</style>

具体依据可以参考以下文档:

启动画面文档
https://developer.android.com/guide/topics/ui/splash-screen?hl=zh-cn
SplashScreen compat 库:
https://developer.android.com/jetpack/androidx/releases/core?hl=zh-cn#core-splashscreen-1.0.0
相关实践:
https://juejin.cn/post/7026188311198695432

问题

将以上适配过程应用到项目里,然后执行assembleDebug打包,发现编译报错,找到不到windowSplashScreenBackground等属性。


37911d752b37e8affd04439a163bf85.jpg

查看报错得知,报错的属性都是适配12 闪屏api需要用到的属性,而这些属性都是系统的,通过查看31 的sdk,发现了这些属性


image.png

由此推测打包过程可能中,compileSdkVersion 31 并没有生效,接下来修改代码,去掉上诉步骤的23,只保留compileSdkVersion 31,打包验证,发现apk里面的compileSdkVersion 居然是30。

处理过程

处理该问题,大概有两个方法:

1、对gradle的编译流程进行插桩,找到compileSdkVersion 变化的路径,分析具体的原因,因为时间紧迫,相关的技术积累不太充分,该方法暂时未被采纳。
2、通过修改一些配置环境或者代码尝试修复该问题。

接下来,需要确认是统一问题还是项目个案。

创建了一个demo 工程,
保持agp 、gradle、jdk版本都和项目一致,
保持compileSdkVersion、minSdkVersion、targetSdkVersion都和项目一致。
运行demo工程之后,
查看demo.apk里面的AndroidManifest.xml,compileSdkVersion 是31,
总结,demo未复现出项目里的问题,说明只是项目存在该问题。

通过查询文档,发现sdk 31之后适配jdk 11,尝试修改gradle 的jdk版本为11,但是依然打包项目报错。
尝试升级agp和gradle版本,再次打包,打包成功,apk内compileSdkVersion 是31 。

最终的解决方法:
升级agp为4.2.0,
升级gradle为6.7.1,
升级gradle的jdk为11

相关文章

网友评论

      本文标题:记一次修改compileSdkVersion无效的bug

      本文链接:https://www.haomeiwen.com/subject/uqkbkdtx.html