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 TestDPC 工程详解
android
键来大师2 小时前
Android16 AP热点修改默认密码为12345678
android·framework·rk3576·android16
李坤林2 小时前
Android KGI (Generic Kernel Image)
android
十二测试录2 小时前
Android和iOS测试区别
android·经验分享·ios·职场发展·ab测试
柒许宁安2 小时前
在 Cursor 中运行 Android 项目指南
android·java·个人开发
技术小甜甜2 小时前
【Godot】【入门】GDScript 快速上手(只讲游戏里最常用的 20% 语法)
android·游戏·编辑器·游戏引擎·godot
aqi003 小时前
FFmpeg开发笔记(九十五)国产的开源视频美颜工具VideoEditorForAndroid
android·ffmpeg·音视频·直播·流媒体
sanggou3 小时前
基于Java实现的简易规则引擎(日常开发难点记录)
android·java
farewell-Calm3 小时前
Android Studio 添加第三方库
android·ide·android studio