原因是发布到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.****.net/YKenan/article/details/109747568
下载jar:org.apache.commons.codec
替换引入和方法:
-
import sun.misc.BASE64Encoder;
替换为:import org.apache.commons.codec.binary.Base64;
-
return new BASE64Encoder().encode(encryptedBytes);
替换为:return Base64.encodeBase64String(encryptedBytes);
-
byte[] encryptedBytes = new BASE64Decoder().decodeBuffer(content);
替换为:byte[] encryptedBytes = Base64.decodeBase64(content);