Android targetSdkVersion升级至35(Android15)相关问题
原因:Google政策更新
目前问题:
1. 需要将APG升级至 8.6.0(compileSdkVersion35支持的版本)
2. Gradle版本最低为8.7 (AGP8.6.0支持的Gradle版本)
3. Gradle8.7时,所需要的Kotlin版本
4. kotlin-android-extensions被废弃
早在kotlin版本1.4.0时就已经提出被废弃,在kotlin版本1.8.0时直接被禁用(2020-2021年推出)
面临的问题:
1. kotlin-android-extensions和bufferKnife修改
由于升级AGP和Gradle脚本带来的升级Kotlin版本,从而影响到了目前所有控件的绑定。
要去除kotlin-android-extensions和bufferKnife相关的控件绑定
2. EdgeToEdge
2.1 现在项目升级为15之后没处理edgeToedge和边框问题导致的UI错误
3. 边框及部分api过时问题(和EdgeToEdge可以看作一个问题)
4.竖屏问题(支持大屏)
5. 16K Page Size (截至日期为2025年11月1日)
目前我们项目中不符合规则的so库。可以通过更新最新三方so库,及手动编译支持16kb的so库来解决
Google 强制Android适配16K Page Size
解决方案
-
正规解决方法:升级APG,Gradle,Kotlin版本,去除BufferKnife及kotlin-android-extentions相关使用DataBinding和ViewBinding来代替。
如果你是模块化的项目。可以把其他模块以aar的形式,依赖到你的项目中。优先改你的主项目,等有时间在一步一步的把模块中的代码改掉。
-
非正规解决办法:通过配置gradle.properties参数,忽略相关问题 (你得下载androidSdk35)
android.aapt2FromMavenOverride=D:/AndroidSDK/build-tools/35.0.0/aapt2.exe
-
16K Page Size解决办法: 通过更新最新三方so库,及手动编译支持16kb的so库来解决。
- NDK升级至26或以上版本,cmakelist中的cmake_minimum_required升级至对应版本,我这里用的是cmake_minimum_required(VERSION 3.22)
- 把build.gradle中的升级至ndk对应的版本:因为我用的是NDK27,所以这里是arguments '-DANDROID_PLATFORM=android-21'
- 修改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}
)