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

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

相关推荐
花卷HJ27 分钟前
Android 沉浸式全屏实践:主题 + 状态栏文字颜色完整方案
android
花卷HJ2 小时前
Android 项目中 BaseActivity 封装实践(支持 ViewBinding、PermissionUtils动态权限、加载弹窗和跳转动画)
android
消失的旧时光-19433 小时前
Android 接入 Flutter(Add-to-App)最小闭环:10 分钟跑起第一个混合页面
android·flutter
城东米粉儿3 小时前
android StrictMode 笔记
android
Zender Han4 小时前
Flutter Android 启动页 & App 图标替换(不使用任何插件的完整实践)
android·flutter·ios
童无极4 小时前
Android 弹幕君APP开发实战01
android
赛恩斯4 小时前
kotlin 为什么可以在没有kotlin 环境的安卓系统上运行的
android·开发语言·kotlin
于山巅相见4 小时前
【3588】Android动态隐藏导航栏
android·导航栏·状态栏·android11
乡野码圣4 小时前
【RK3588 Android12】开发效率提升技巧
android·嵌入式硬件