当前位置: 代码网 > 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-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com