Android targetSdkVersion 升级为34 问题处理


原因是发布到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 = true
        buildConfig = true
    }
}

5.JDK升级为17

Android Studio 中的 Gradle JDK 配置

android {
	compileOptions {
	        targetCompatibility JavaVersion.VERSION_17
	        sourceCompatibility 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);
当将Android项目的`targetSdkVersion`升级Android 11 (API级别30)及以上时,可能会遇到与`ConstraintLayout`相关的错误,这是因为新版本的系统对布局组件的行为进行了调整,尤其是在处理视图约束(Constraints)上。 在Android 11中,Google引入了一些新的变化,比如View Binding API,这可能导致之前基于旧版SDK使用的依赖库或XML约束配置不再适用。当你尝试运行应用时,`ConstraintLayout`可能会抛出关于`Constraints`解析或支持的问题,例如找不到视图、约束冲突等。 解决这个问题通常需要做以下步骤: 1. **检查约束设置**:确保你的`ConstraintLayout` XML文件里的约束(如`app:layout_constraint*`属性)已经适应了最新的约束语法,特别是在使用`androidx.constraintlayout.widget.ConstraintLayout`而不是旧版`com.android.support.constraint.ConstraintLayout`。 2. **更新依赖**:如果你正在使用第三方库,确认其是否支持Android 11以上的版本,并将其更新到最新版本。 3. **启用View Binding**:如果尚未启用,可以在`build.gradle`文件中添加`implementation 'androidx.databinding:viewbinding:4.1.0'`并创建对应的`ViewModel`绑定类。 4. **检查并修复错误**:运行应用,查看错误日志,找出具体的错误提示,根据它提供的信息修改布局或代码。 5. **测试兼容**:在模拟器和真机上分别测试,确保在所有目标API级别上都能正常工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值