当前位置: 代码网 > it编程>App开发>Android > [Unity] Unity Android14 适配 Android targetSdkVersion升级34(基于Unity2021.3LTS)

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

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

升级android的api level,是上架google play的app每年至少经历的一劫,今年的要求是2024年8月31号后,新应用和应用更新必须以 android 14(api 级别 34)为目标平台,才能提交到 google play。google play 应用在目标 api 级别方面需满足的要求
经过几天的摸索,梳理了要修改的地方。

写在前面

考虑到每台设备构建环境都不一样,所以我的方案不一定能覆盖所有情况。当按照以下配置改完各个工具的版本后,如果打包还是报错的话。最好是把项目导出成android工程,用android studio打开。as能帮你检测不合理的配置并给出修改建议,而且as在构建失败时的提示信息也比unity更详细。按照as的提示反复修改,直到构建通过,就得到了最适合你项目的gradle配置。最后按照你的测试结果来修改unity中的各个gralde文件就可以了。

构建工具使用版本

工具版本
unityunity2021.3.36 lts
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'

2. gradle升级

下载gradle-7.5-bin.zip,打开unity安装目录applications/unity/hub/editor/2021.3.36/playbackengines/androidplayer,把刚下载的gradle压缩包拷贝到androidplayer目录下, 解压替换原来的**/gradle**文件夹

3. r8升级

打开unity安装目录applications/unity/hub/editor/2021.3.36/playbackengines/androidplayer/tools/gradletemplates,修改settingstemplate.gradle文件中r8的版本。
原始:
classpath ("com.android.tools:r8:4.0.48")
改为:
classpath ("com.android.tools:r8:8.3.37")

ps:unity2021.3.11版本里是没有这一行的,需要手动添加整个pluginmanagement,代码如下:

pluginmanagement {
    buildscript {
        repositories {
            mavencentral()
            google()
        }
        dependencies {
            classpath("com.android.tools:r8:8.3.37")
        }
    }
}

include ':launcher', ':unitylibrary'
**includes**

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=/library/openjdk11

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,一切都不是问题。

unity官方论坛关于升级android14的讨论


2024-07-25 更新

unity在7月23号发布了新的版本-unity 2021.3.41,升级了内置gralde的版本,跟我的方案基本一致,条件允许的话可以通过直接升级unity版本来解决。unity 2021.3.41 release note

在这里插入图片描述

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com