Android 12适配踩坑纪要

854 阅读2分钟

编译环境

JDK更新

7/8升级到11

Android Studio

4.0+/Arctic Fox/Bumblebee

编译迁移

AAR引入方式变更

编译问题&解决方案:Error building Android library: Direct local .aar file dependencies are not supported

BuildConfig类

VersionName&VersionCode被移除,若Java代码中有引用需要替换为其他获取版本号的方法

AGP更新

错误日志:

Caused by: org.gradle.api.InvalidUserCodeException: Using insecure protocols with repositories, without explicit opt-in, is unsupported.

解决方案:

更新AGP7.0后,使用了Http的Maven仓库需适配stackoverflow.com/questions/6…

其他

出现编译问题无直接错误提示使用如下命令

gradle assembleDebug --debug

Apk包体变大

解决方案

<application android:extractNativeLibs="true" ... > 

</application> 

功能适配

开屏SplashScreen API

developer.android.com/guide/topic…

四大组件可见性

包含IntentFilter的四大组件添加exported属性

三方库适配

三方库排查方法:stackoverflow.com/questions/1…

gradle脚本协助排查可参考:juejin.cn/post/707401…

系统库加载

developer.android.com/guide/topic…

<uses-native-library
  android:name="string"
  android:required=["true" | "false"] />

自定义通知

官方描述

收起状态展开状态下的自定义通知区域

收起状态下,自定义内容的最大高度已从 106dp 减少到 48dp。此外,水平空间也减小(没有官方数据,预计减少96dp)了。

对于以 Android 12 为目标平台的应用,所有通知都是可展开的。通常,这意味着,如果您使用的是

setCustomContentView,则还需要使用 setBigCustomContentView,以确保收起状态和展开状态保持一致。

PendingIntent

Targeting S+ (version 10000 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent
  1. 若使用了WorkManager将androidx.work:work-runtime:版本更新到2.7.1
  2. PendingIntent实例化时Flag中增加FLAG_IMMUTABLE

Android App Links验证变更

developer.android.com/about/versi…

画中画行为改进

Android 12 针对画中画 (PiP) 模式引入了行为改进。如需了解详情,请参阅画中画改进

应用休眠(无需客户端处理)

Android 12 在 Android 11(API 级别 30)中引入的自动重置权限行为的基础上进行了扩展。如果您的应用以 Android 12 为目标平台,并且用户有几个月未与您的应用互动,则系统会自动重置授予的所有权限并将您的应用置于休眠状态。

通知 trampoline 限制(不影响现有FCM Push)

当用户与通知互动时,某些应用会启动一个应用组件来响应通知点按操作,该应用组件最终会启动用户最终看到并与之互动的 activity。此应用组件被称为通知 trampoline。

当用户点按通知或通知中的操作按钮时,您的应用无法在服务或广播接收器内调startActivity()

解决方案:developer.android.com/about/versi…

参考

mp.weixin.qq.com/s/ek2UT0vau…

developer.android.com/about/versi…