Unity2020升级安卓14

Unity 2020 适配Android14(兼容方案)
记录 Unity版本:2020.3.48f1c1 升级兼容安卓14的流程步骤
(条件允许可以升级2021.3.34以后的版本,不需要改原生代码)
一.修改打包环境
1.下载openjdk11
https://docs.aws.amazon.com/corretto/latest/corretto-11-ug/downloads-list.html
2.下载gradle
https://services.gradle.org/distributions/gradle-7.4.1-all.zip
3.打包方案: 自定义打包模板文件
在这里插入图片描述
4.修改模板文件 compileSdkVersion 34 以及 jdk版本 JavaVersion.VERSION_11
▪launcherTemplate.gradle
在这里插入图片描述

▪mainTemplate.gradle
在这里插入图片描述

5.修改模板文件 baseProjectTemplate.gradle gradle版本和google-service版本
classpath ‘com.android.tools.build:gradle:7.3.1’
classpath ‘com.google.gms:google-services:4.3.0’
在这里插入图片描述

6.修改模板文件 gradleTemplate.properties 修改jdk路径以及注释 enableR8
org.gradle.java.home=第一步下载并解压之后的jdk路径 (bin目录的上层文件夹)
在这里插入图片描述
7.指定Unity gradle版本
在这里插入图片描述

二.原生代码兼容修改

  1. 游戏主Activity重载无flag参数的registerReceiver方法,针对安卓14版本补齐默认参数
    (注意: 默认参数需要跟Activity声明的exported属性一致)
    在这里插入图片描述

@Override
public Intent registerReceiver(@Nullable BroadcastReceiver receiver, IntentFilter filter) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU)
return super.registerReceiver(receiver, filter,android.content.Context.RECEIVER_EXPORTED);
return super.registerReceiver(receiver, filter);
}

@Override
public Intent registerReceiver(@Nullable BroadcastReceiver receiver, IntentFilter filter, @Nullable String broadcastPermission, @Nullable Handler scheduler) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU)
return super.registerReceiver(receiver, filter, broadcastPermission, scheduler,android.content.Context.RECEIVER_EXPORTED);
return super.registerReceiver(receiver, filter, broadcastPermission, scheduler);
}
2. Unity2020 jar内置原生代码替换 (这一步仅Untiy2020需要处理)
引擎dex路径: (注意游戏是mono还是il2cpp)
2020.3.48f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Classes\classes.dex
i.准备工具:
1.dex2jar 和 dsmali 以及 jar2dex
a.下载地址:https://github.com/pxb1988/dex2jar
2.jd 查看jar内class
a.下载地址:https://java-decompiler.github.io/
ii.查看unity2020的classes.jar: 发现unity自带的class引用了旧的tasks包 需要解包替换重新生成对应的jar
在这里插入图片描述

iii.解包Dex d2j-baksmali classes.dex
1.打开解包出来的文件夹并替换依赖包路径:
a.com/google/android/play/core/tasks ->com/google/android/gms/tasks
在这里插入图片描述

2.重新打包成dex d2j-smali classes-out
3.查看修改是否生效 jd查看out.dex文件
在这里插入图片描述

4.生成对应的jar d2j-dex2jar out.dex
a.这里有两种方式覆盖引擎的classes.jar
i.新建一个aar 包含修改后的classes.jar, 然后gradle文件过滤掉unity-classes.jar (我们目前采取的是这个方案)
在这里插入图片描述

ii.直接覆盖回去,把引擎的classes.jar 和 dex文件都覆盖 (覆盖之前记得备份一个,以防玩脱)

  1. 修改gradle依赖 (替换 com.google.android.play:core:1.10.0)
    (这一步2021.3.34f1以后的版本也不需要处理)
    在这里插入图片描述

i.方式1: 打包前的预处理回调可以通过脚本替换依赖,(这个方式我们没走通,主要是依赖下载不下来)
ii.方式2:把aar下载下来 , 直接修改gradle文件,改成本地依赖
在这里插入图片描述

//替换google依赖
implementation(name: 'asset-delivery-2.2.2', ext:'aar')
implementation(name: 'app-update-2.1.0', ext:'aar')
implementation(name: 'play-services-tasks-18.2.0', ext:'aar')
implementation(name: 'core-common-2.0.4', ext:'aar')

下载地址:https://maven.google.com/web/index.html
或者 https://mvnrepository.com/artifact/com.google.android.play

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值