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 发布艰难,且行且珍惜吧,各种稀奇古怪都会出现.账号申请,协议 项目适配.....且行且珍惜吧.

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

相关推荐
走在路上的菜鸟1 小时前
Android学Dart学习笔记第十二节 函数
android·笔记·学习·flutter
怀君1 小时前
Uniapp——开发Android插件教程
android·uni-app
Lei活在当下2 小时前
【Perfetto从入门到精通】1. 初识 Perfetto
android·性能优化·架构
用户41659673693552 小时前
深度解析 Android 权限机制:从清单注册到 Android 14 适配实战
android
Nerve3 小时前
GalleryPicker:一个基于 Android 官方 Photo Picker API 封装的现代图片/视频选择库
android
伐尘4 小时前
【MySQL】MySQL 有效利用 profile 分析 SQL 语句的执行过程
android·sql·mysql
Haha_bj5 小时前
七、Kotlin——扩展(Extensions)
android·kotlin
urkay-5 小时前
Android getDrawingCache 过时废弃
android·java·开发语言·kotlin·iphone·androidx
技术摆渡人5 小时前
Android 14系统深度分析
android·linux·驱动开发