Android出海实战:Android14适配

写在伊始

大家都知道,每年Google Play都会要求所有上架海外的App在8月(新包)及11月(在架包)进行新系统版本的适配,今年,我们苦逼的海外开发者又必须要适配Android 14了,晚干不如早干,近期我们公司也是将Android 14适配提上了日程!

以下Android 14 实战所遇问题仅适用于我司项目,如果您所遇问题不同,欢迎留言或私信一起讨论。

开始集成Android 14

我司目前项目环境如下:

Java version :11.0.18
Android version :API 33, Android 13
Installation platform & version :Gradle 6.1.1
AGP :4.0.1

首先,我们将compileSdkVersion以及targetSdkVersion升级为34,开始Build

android {
    compileSdkVersion 34

    defaultConfig {

        minSdkVersion 23
        targetSdkVersion 34

    }
}

不出意外,一堆报错。下面我们一一来看:

(1)非空类型不匹配

报错如下:

我们发现,在Android 34源码中,View的 onDraw 方法中,参数Canvas添加了注解NotNull :

   /**
     * Implement this to do your drawing.
     *
     * @param canvas the canvas on which the background will be drawn
     */
    protected void onDraw(@NonNull Canvas canvas) {
    }

如果项目中使用了kotlin并且覆写的onDraw 方法有空安全运算符 ?,导致了上面的报错

override fun onDraw(canvas: Canvas?) {
    super.onDraw(canvas)
}

修改方式也比较简单,我们去掉空安全运算符 ?即可

override fun onDraw(canvas: Canvas) {
    super.onDraw(canvas)
}
(2)AAPT2异常终止

AAPT2 报错的具体原因在日志里面没有详细的信息的,在gradle 社区上找到如下回答,告知我这应该是Android 独有的问题,跟Gradle构建工具无关。


Google 搜索相关的问题,找到了如下的回答

以此为线索,我们Demo验证,创建新的项目将targetSdkVersion 升级到34,项目是可以正常打包的,但是引入了facebook-android-sdk后就会出现aapt2异常终止报错。按照上图所示去掉legacy-support-v4就又可以正常打包。

基于上述定位到的具体原因,我们傻瓜式的排查了项目所有的引用库,发现androidx.legacy:legacy-support-v4,androidx.core:core-splashscreen两个库会引发aapt2异常终止问题。移除这2个库重新构建项目就可以正常打包运行了。

但是,移除库还是会影响app的部分功能,例如splashscreen库(Android 12闪屏适配)。所以我们再次研究了Android 14适配的官方文档,该文档上提到了AGP 7.0.0以上的版本适配,虽然官方没有说适配14必须将AGP升到7.0+,但是我们抱着试试的态度进行了尝试环境配置如下。经过升级后项目可以正常打包了,也没有影响splashscreen库(Android 12闪屏适配)功能。适配后环境如下:

Java version :11.0.18
Android version :API 34, Android 14
Installation platform & version :Gradle 7.5
AGP :7.4.2
升级AGP步骤

1.使用 Android Gradle 插件升级助理

google 官方文档 : 使用 Android Gradle 插件升级助理

打开Tools > AGP Upgrade Assistant ,随即出现的工具窗口中会显示默认升级的详细信息,其中包括项目的当前版本 AGP 以及此版本 Android Studio 所支持的AGP下拉列表,选择7.4.2版本后点击Run selected steps。

经过上面的步骤,项目的build.gradle文件以及gradle-wrapper.properties文件会发生变更如下

gradle版本:7.5 
gradle plugin版本:7.4.2  
kotlin版本:1.6.21

2.修改项目build.gradle文件

修改前:

buildscript {
        ext.kotlin_version = '1.6.21'
        repositories {
            maven {
                url "xxx"
            }
            google()
            mavenCentral()
        }
    
        dependencies {
            classpath 'com.android.tools.build:gradle:7.4.2'
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
            classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
            ...
        }
    }
    
    allprojects {
        repositories {
            maven {
                url "xxx"
            }
            google()
            mavenCentral()
         }
    }

修改后:

buildscript {
        ext.kotlin_version = &#
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值