Android targetSdkVersion升级至35(Android15)相关问题

2,053 阅读3分钟

Android targetSdkVersion升级至35(Android15)相关问题

原因:Google政策更新

image.png

目前问题:

1. 需要将APG升级至 8.6.0(compileSdkVersion35支持的版本)

image.png

2. Gradle版本最低为8.7 (AGP8.6.0支持的Gradle版本)

image.png

3. Gradle8.7时,所需要的Kotlin版本

image.png image.png

4. kotlin-android-extensions被废弃

    早在kotlin版本1.4.0时就已经提出被废弃,在kotlin版本1.8.0时直接被禁用(2020-2021年推出)

面临的问题:

image.png

1. kotlin-android-extensions和bufferKnife修改

    由于升级AGP和Gradle脚本带来的升级Kotlin版本,从而影响到了目前所有控件的绑定。
    要去除kotlin-android-extensions和bufferKnife相关的控件绑定
  

2. EdgeToEdge

EdgeToEdge解决办法链接 image.png

2.1 现在项目升级为15之后没处理edgeToedge和边框问题导致的UI错误

image.png

3. 边框及部分api过时问题(和EdgeToEdge可以看作一个问题)

边框及部分api过时解决办法链接 image.png

4.竖屏问题(支持大屏)

竖屏问题(支持大屏)解决办法链接 image.png

5. 16K Page Size (截至日期为2025年11月1日)

    目前我们项目中不符合规则的so库。可以通过更新最新三方so库,及手动编译支持16kb的so库来解决

Google 强制Android适配16K Page Size image.png

解决方案

  1. 正规解决方法:升级APG,Gradle,Kotlin版本,去除BufferKnife及kotlin-android-extentions相关使用DataBinding和ViewBinding来代替。

    如果你是模块化的项目。可以把其他模块以aar的形式,依赖到你的项目中。优先改你的主项目,等有时间在一步一步的把模块中的代码改掉。

  2. 非正规解决办法:通过配置gradle.properties参数,忽略相关问题 (你得下载androidSdk35)

      android.aapt2FromMavenOverride=D:/AndroidSDK/build-tools/35.0.0/aapt2.exe
    
  3. 16K Page Size解决办法: 通过更新最新三方so库,及手动编译支持16kb的so库来解决。

    1. NDK升级至26或以上版本,cmakelist中的cmake_minimum_required升级至对应版本,我这里用的是cmake_minimum_required(VERSION 3.22)
    2. 把build.gradle中的升级至ndk对应的版本:因为我用的是NDK27,所以这里是arguments '-DANDROID_PLATFORM=android-21'
    3. 修改cmakeList文件,加入target_link_options。(实测不加入也可以,根据具体情况来定)
        // build.gradle中修改-DANDROID_PLATFORM版本
        externalNativeBuild {
            cmake {
                arguments '-DANDROID_PLATFORM=android-21'
                cppFlags "-std=c++17"
            }
        }

cmake_minimum_required(VERSION 3.22) #当前ndk对应的cmake版本
project("native-root") #当前项目名称

set(SOURCE_LIB libs/root_c/native-lib.c)


add_library( # Sets the name of the library.
        native-root

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        ${SOURCE_LIB})

target_link_options(native-root PRIVATE # 加入这行来实现16kb对齐,实测不加入也可以
        "LINKER:-z,max-page-size=16384"
        "LINKER:-z,common-page-size=16384"
)

find_library(PRE_BUILD_ANDROID_LIB android)
find_library(PRE_BUILD_LOG_LIB log)

target_link_libraries( # Specifies the target library.
        native-root
        ${PRE_BUILD_ANDROID_LIB}
        ${PRE_BUILD_LOG_LIB}
        )