IT评测·应用市场-qidao123.com

标题: Unity2020升级安卓14 [打印本页]

作者: 商道如狼道    时间: 2024-11-1 07:28
标题: 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版本

二.原生代码兼容修改
@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文件都覆盖 (覆盖之前记得备份一个,以防玩脱)
i.方式1: 打包前的预处理回调可以通过脚本替换依赖,(这个方式我们没走通,主要是依赖下载不下来)
ii.方式2:把aar下载下来 , 直接修改gradle文件,改成本地依赖

  1. //替换google依赖
  2. implementation(name: 'asset-delivery-2.2.2', ext:'aar')
  3. implementation(name: 'app-update-2.1.0', ext:'aar')
  4. implementation(name: 'play-services-tasks-18.2.0', ext:'aar')
  5. implementation(name: 'core-common-2.0.4', ext:'aar')
复制代码
下载地址:https://maven.google.com/web/index.html
或者 https://mvnrepository.com/artifact/com.google.android.play

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4