Android + Google Play:老项目适配实战指南

1:前情提要

作为一个Android开发 ,面对日益操蛋的应用市场,敢怒不敢言.什么target 28 什么权限说明,什么隐私协议,什么获取手机信息过于频繁....

这部Google play 又折腾起来了.

没办法只能适配了,QB自己,幸福他人,祝愿.xxx.xxxxx.....

2:现实环境

维护了十年左右的老项目(Okgo,ButterKnife 时代的产物,且外包出来的项目)

  • targetSdkVersion 33
  • Gradle 7.3.1
  • Jdk 8
  • 一万个三方库

3:Google Play 提交前需要处理的事情

老爷们时代变了,一个Gradle+JDK8 打天下的时代变了

API要求官方说明

提交应用市场要处理的问题:

  • targetSdkVersion 35
  • 16KB Size 适配
  • AAB 拆包(太大的需求拆包)

4 targetSdkVersion 35 变动

官方要求必须使用target 35 然后一系列连锁反应就来了,真是下了一步好棋啊

使用targetVersion 35 -->需要Gradle 8.0+ -->再需要Jdk17 -->再需要kotlin 1.9+

变动路径

targetSdkVersion:35

官方要求 2025 年新提交 App 必须 target 35+,

Gradle / Android Gradle Plugin:8.0+(推荐 8.6)

对应 Koala / Ladybug 系列。

arduino 复制代码
classpath 'com.android.tools.build:gradle:8.6.0'

JDK:17(必须)

Google Play 已经要求 AGP 8+ 必须使用 JDK 17。

Android Studio 内置的 JDK 17 直接用即可,不要自己乱装。

Kotlin:1.9.23 或 2.0.0(推荐 1.9.x)

无特殊需求用 1.9.23 最稳,Kotlin 2.0 虽然可用,但生态兼容性仍在适配。

bash 复制代码
plugins {
    id "org.jetbrains.kotlin.android" version "1.9.23"
}

签名(必须 V1 + V2 + V3)

Google Play 会自动生成 V4,所以你本地保持:

  • ✔ V1(Jar Signature)
  • ✔ V2(APK Signature Scheme v2)
  • ✔ V3(APK Signature Scheme v3)

Android Studio 默认勾选即可。

lua 复制代码
targetSdkVersion 35 版本-->
gradle 8.0+版本-->
jdk17+ 版本-->
kotlin 1.9.23版本-->
签名

真是一步好棋啊,老爷们时代变了,不是一个gradle +jdk8 打天下的时代了

现在使用的版本:

ini 复制代码
agp = "8.9.1"
compileSdkVersion= "36"
kotlin = "2.2.10"
jdk=17

5: 16KB Size 适配

你真不适配真敢给你不能用!!!

16K Size 官方说明

5.1Google Play 提交显示不支持 16KB 的库

5.2 查找.so库所属三方库(重点)

注意:

  • 提前bulid一下
  • 执行 bundleRelease/assembleRelease 任务
scss 复制代码
// 在项目 build.gradle 或 app/build.gradle 中添加到最下方就行

tasks.whenTaskAdded { task ->
    // 匹配所有 merge<Flavor><BuildType>NativeLibs 任务
    if (task.name.matches(/merge.*NativeLibs/)) {
        task.doFirst {
            println("------- [${task.name}] start scanning so files -------")

            // 遍历所有输入文件
            it.inputs.files.each { file ->
                printSoFiles(file)
            }

            println("------- [${task.name}] end scanning so files -------")
        }
    }
}

// 递归查找 .so 文件
def printSoFiles(File file) {
    if (file == null || !file.exists()) return

    if (file.isDirectory()) {
        file.listFiles()?.each { printSoFiles(it) }
    } else if (file.name.endsWith(".so")) {
        println("Found .so: ${file.absolutePath}")
    }
}

5.3 修改的不支持 16KB so的库

rust 复制代码
// 这个4.3版本支持了 librsjni_androidx.so
  api 'jp.wasabeef:glide-transformations:4.0.1'//配合glide实现高斯模糊
  api 'jp.wasabeef:glide-transformations:4.3.0'//配合glide实现高斯模糊
  
  // 这个需要申请的新版本
  api 'com.blankj:utilcodex:1.31.0'
  api 'com.blankj:utilcodex:1.31.1'
  
  // 直接删除了 因为 国外不需要 可以申请pro版本 提供了
 api 'com.tencent.bugly:crashreport:3.4.4'
 api 'com.tencent.bugly:nativecrashreport:3.9.2'
 
 // 更新新版本 libmmkv.so
 api  'com.tencent:mmkv-static:1.2.14'
 api  'com.tencent:mmkv-static:1.3.14'
	

6: 重点:Google Play 测试版本支持设备数为0的情况

6.1 ABI(CPU 架构)配置冲突 splits.abindk.abiFilters 同时存在

arduino 复制代码
// 根据自己需求配置架构 
ndk {
    //设置支持的SO库架构
    abiFilters 'armeabi-v7a', 'arm64-v8a'
}

6.2 Manifest 限制过度

<supports-gl-texture android:name="GL_IMG_texture_consistent"/> 会导致支持设备数 0

注意: 建议直接删除

ini 复制代码
会导致:  不支持的必用GL纹理压缩格式:GL_IMG_texture_consistent
 配置 false 也不行
<supports-gl-texture android:name="GL_IMG_texture_consistent"/>

其他影响的地方改成false:

xml 复制代码
<!-- 摄像头特性设置为可选,不强制要求 -->
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.autofocus" android:required="false"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>

<!-- OpenGL ES 2.0,不强制要求 -->
<uses-feature
    android:glEsVersion="0x00020000"
    android:required="false"/>

<!-- 支持所有屏幕尺寸 -->
<supports-screens
    android:anyDensity="true"
    android:smallScreens="true"
    android:normalScreens="true"
    android:largeScreens="true"
    android:xlargeScreens="true"/>

6.3 16KB 兼容

不支持的so找提供方处理,处理不了的删除或者找替代方案

总结

Google Play 发布艰难,且行且珍惜吧,各种稀奇古怪都会出现.账号申请,协议 项目适配.....且行且珍惜吧.

欢迎骡子们一起沟通.有事儿滴滴...

相关推荐
Kapaseker13 分钟前
Compose 进阶—巧用 GraphicsLayer
android·kotlin
黄林晴40 分钟前
Android17 为什么重写 MessageQueue
android
阿巴斯甜1 天前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker1 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95271 天前
Andorid Google 登录接入文档
android
黄林晴1 天前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab2 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿2 天前
Android MediaPlayer 笔记
android
Jony_2 天前
Android 启动优化方案
android
阿巴斯甜2 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android