Android targetSdkVersion 升级为34 问题处理

embedded/2024/12/22 18:15:41/


原因是发布到GooglePlay遭到拒绝,需要最低API level为34。之前为31,感觉还挺高的,但是GooglePlay需要的更高。
记录下处理问题:

1.升级gradle版本为8.0.2

之前是:

classpath 'com.android.tools.build:gradle:7.1.0-alpha11'
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-7.2-bin.zip

升级为:

classpath 'com.android.tools.build:gradle:8.0.2'
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.0-bin.zip

应该会有更高的版本,但是升级到8.9-bin.zip时会有问题,然后看到有开发者用的8.0-bin.zip,就切到了这个版本

2.升级Android Studio Ladybug | 2024.2.1

Build #AI-242.21829.142.2421.12409432, built on September 25, 2024

Cannot convert string value 'UNIFIED_TEST_PLATFORM' to an enum value of type 'com.android.builder.model.AndroidGradlePluginProjectFlags$BooleanFlag'
遇到上述问题,需要升级编辑器

3.Namespace not specified 问题

How do I fix ‘namespace not specified’ error in Android Studio?
过程中遇到了

Namespace not specified. Please specify a namespace in the module's build.gradle file like so:
android {·namespace 'com.example.namespace'
}

解决方案比较麻烦
1.将清单文件AndroidManifest.xml里的package="cn.xx.xx"删掉
2.在module(如果有依赖的library也要添加)的build.gradle文件下添加

android {namespace 'cn.xx.xx'

3.在项目project根目录的build.gradle下添加

    // This code is where all the magic happens and fixes the error.subprojects {afterEvaluate { project ->if (project.hasProperty('android')) {project.android {if (namespace == null) {namespace project.group}}}}}

4.dataBinding 和 buildConfig 处理

Android BuildConfig不生成的解决办法

android {buildFeatures {dataBinding = truebuildConfig = true}
}

5.JDK升级为17

Android Studio 中的 Gradle JDK 配置

android {compileOptions {targetCompatibility JavaVersion.VERSION_17sourceCompatibility JavaVersion.VERSION_17}
}

旧版本Android Studio可直接在编辑器里下载

然后在新编辑器里选择版本17

如果是新版本的话,可去JDK官网下载,然后再配置jdk环境变量

49 = Java 5
50 = Java 6
51 = Java 7
52 = Java 8
53 = Java 9
54 = Java 10
55 = Java 11
56 = Java 12
57 = Java 13
58 = Java 14
59 = Java 15
60 = Java 16
61 = Java 17
62 = Java 18
63 = Java 19
64 = Java 20
65 = Java 21

6.kotlin_version 最低版本为:1.6.20

    dependencies {classpath 'com.android.tools.build:gradle:8.0.2'classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.20"}

7.可使用AGP Upgrade Assistant引导修改

8.动态广播接收器处理

Android14 适配之——targetSdkVersion 升级到 34 需要注意些什么?

val filter = IntentFilter("alarmReceiver_custom_action")
val listenToBroadcastsFromOtherApps = true
val receiverFlags = if (listenToBroadcastsFromOtherApps) {ContextCompat.RECEIVER_EXPORTED    // 该接收器对其他应用开放
} else {ContextCompat.RECEIVER_NOT_EXPORTED    // 该接收器不对其他应用开放
}
// 这里的 registerReceiver 方法必须设置 receiverFlags 参数
registerReceiver(requireContext(), AlarmReceiver(), filter, receiverFlags)// 发送广播
val intent = Intent("alarmReceiver_custom_action")    // 方式1
//val intent = Intent(requireActivity(), AlarmReceiver::class.java)    // 方式2
requireActivity().sendBroadcast(intent)

9.switch 报错

Android中使用switch-case遇到case R.id.xxx报错
需要在gradle.properties中添加

android.enableJetifier=true
android.defaults.buildfeatures.buildconfig=true
android.nonTransitiveRClass=true
android.nonFinalResIds=false

10.targetSdk minSdk compileSdk

targetSdkVersion 改为 targetSdk
minSdkVersion 改为 minSdk
compileSdkVersion 改为 compileSdk

11.打release问题

1.retrofit2 R8 / ProGuard 混淆文件更新

proguard/retrofit2.pro

2.Gson 混淆文件更新

Gson R8 proguard rules (java.lang.runtimeexception: missing type parameter.)

-keep class com.google.gson.reflect.TypeToken
-keep class * extends com.google.gson.reflect.TypeToken
-keep public class * implements java.lang.reflect.Type

3.JDK 版本高无法找到 sun.misc.BASE64Encoder 的 jar 包

https://blog.csdn.net/YKenan/article/details/109747568

下载jar:org.apache.commons.codec
替换引入和方法:

  1. import sun.misc.BASE64Encoder;替换为:import org.apache.commons.codec.binary.Base64;
  2. return new BASE64Encoder().encode(encryptedBytes);替换为:return Base64.encodeBase64String(encryptedBytes);
  3. byte[] encryptedBytes = new BASE64Decoder().decodeBuffer(content);替换为:byte[] encryptedBytes = Base64.decodeBase64(content);

http://www.ppmy.cn/embedded/127891.html

相关文章

Ubuntu22.04阿里云服务器 Gitlab搭建CICD

gitlab搭建cicd流水线教程 1、阿里云申请免费云盘 申请免费云盘用于创建gitlab 申请方法百度 2、安装gitlab-ce 更新系统: sudo apt update sudo apt upgrade -y 安装必要的依赖: sudo apt install -y curl openssh-server ca-certificates pos…

hdc 常用命令梳理

hdc 命令官方使用指导 hdc 官方文档已经包含了 设备查看服务进程网络相关文件相关应用相关调试相关以及常见问题指令 这里就不概述了 电源命令 输入以下命令来设置电源模式为性能模式,这将使屏幕永不熄屏:hdc_std shell power-shell setmode 602 …

【大数据】Hive快速入门

文章目录 概述一、Hive的基本概念二、Hive的架构与组件三、Hive的特点与优势四、Hive的应用场景五、Hive的官方网站与资源 驱动说明(Driver)一、主要功能二、与其他组件的交互三、工作流程四、重要性 元数据模型(Metastore)一、Hive元数据模型的基本概念…

rust aarch64开发-编译

1. 实验代码下载 本实验基于github或gitee上的开源实现。 // 无法访问github可以通过如下地址下载 git clone https://gitee.com/yang_jun_yi/armv8-rust-hypervisor.git // github下载 git clone https://github.com/Comet959/armv8-rust-hypervisor.git2. 编译 make start…

LEAN 4 安装和配置教程

Lean 4 工作环境由以下几部分组成: elan:Lean 环境版本管理器。它的功能类似于 Rust 的 rustup 或 Node.js 的 nvm,用于安装、管理和切换不同版本的 Lean。lake:Lean 4 的包管理器,全称 Lean Make,已合并到…

【Ai】Adobe illustrator实用技巧

一、实线变虚线 选择需要变成虚线的实线,找到描边 → 勾选虚线,设置间隙。 二、图形添加发光的效果 选中需要 发光的图形 → 效果 → 风格化 → 外发光

实战逆向RUST语言程序

实战为主,近日2024年羊城杯出了一道Rust编写的题目,这里将会以此题目为例,演示Rust逆向该如何去做。 题目名称:sedRust_happyVm 题目内容:unhappy rust, happy vm 关于Rust逆向,其实就是看汇编&#xff…

SPI通信——FPGA学习笔记14

一、简介 SPI(Serial Periphera Interface,串行外围设备接口)通讯协议,是 Motorola 公司提出的一种同步串行接口技术,是一种高速、全双工、同步通信总线,在芯片中只占用四根管脚用来控制及数据传输,广泛用于 EEPROM、F…