[Unity] Android14适配 Android targetSdkVersion升级34(基于Unity2021.3LTS)

升级Android的API Level,是上架Google Play的App每年至少经历的一劫,今年的要求是新应用和应用更新必须以 Android 14(API 级别 34)为目标平台,才能提交到 Google Play。Google Play 应用在目标 API 级别方面需满足的要求
经过几天的摸索,梳理了要修改的地方。

构建工具使用版本

工具版本
UnityUnity2021.3LTS
AGP7.4.2
Gradlegradle-7.5-bin.zip
OpenJDK11
R88.3.37

1. AGP升级

打开mainTemplate.gradle,修改版本AGP版本。
原始:
classpath 'com.android.tools.build:gradle:4.2.2'
改为:
classpath 'com.android.tools.build:gradle:7.4.2'

AGP升级会附带一些gradle语法的变化,具体参考Android14 SDK官方指南

2. Gradle升级

下载gradle-7.5-bin.zip,打开Unity安装目录Applications/Unity/Hub/Editor/2021.3.11f1-arm64/PlaybackEngines/AndroidPlayer,把刚下载的gradle压缩包拷贝到AndroidPlayer目录下, 解压替换原来的**/gradle**文件夹

3. R8升级

打开Unity安装目录Applications/Unity/Hub/Editor/2021.3.11f1-arm64/PlaybackEngines/AndroidPlayer/Tools/GradleTemplates,修改settingsTemplate.gradle文件中r8的版本。
原始:
classpath ("com.android.tools:r8:4.0.48")
改为:
classpath ("com.android.tools:r8:8.3.37")

4. OpenJDK

Unity2021.3内置的是Java8,但是这里要使用Java11,正好Unity2022.3内置的是Java11,直接从里面拷贝一份,放到一个不常修改的目录下就可以了。虽然Unity的设置支持自定义JDK路径,但是只支持Java8的,如果自定义的JDK是高于Java8的,Unity编辑器会提示不支持,所以还是要通过改gradle来绕过Unity编辑器的检测。

  1. 打开mainTemplate.gradle,修改JDK的版本。
    原始:
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

改为:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_11
    targetCompatibility JavaVersion.VERSION_11
}
  1. 打开gradleTemplate.properties,声明自定义OpenJDK的路径
    org.gradle.java.home=/your_openjdk11_path

5. 后续问题

编译打包后,发现Apk内的AndroidManifest.xml里多了三个权限,分别是:

uses-permission#android.permission.WRITE_EXTERNAL_STORAGE
uses-permission#android.permission.READ_PHONE_STATE
uses-permission#android.permission.READ_EXTERNAL_STORAGE

初步断定是com.google.firebase导致的,几年前网上也有人反映类似的情况(issuetracker)。考虑到这三个权限现在基本已经失去基本废弃,而且在实际使用中还需要进行动态申请,所以不如直接将它们移除。
具体做法是在Assets/Plugins/Android/AndroidManifest.xml里加上remove属性:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="remove" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" tools:node="remove" />

写在最后

这次把Android的Target API Level从33升级到34,过程比去年32升33更麻烦,因为内置的构建工具已经无法支持最新的Android环境,要改动的地方太多了。按照Google一年一升的规律,明年从34升35的话,对老版引擎来说会更加困难。从这里也能看出,Unity2021确实是个老版本了,官方马上也要停止维护。不过至少还可以自定义gradle,掌握Android的基本知识+搜索引擎+GPT,一切都不是问题。

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值