Android

Gradle版本问题

本地打包的大部分错误都是因为这个问题,这是因为笔者接入的SDK自定义了gradle的插件版本,这个再unity本身其实已经定义过了,但是自己是可以通过修改build.gradle进行修改的。查看unity本身gradel的插件版本的路径是:Editor\Data\PlaybackEngines\AndroidPlayer\Tools\GradleTemplates\baseProjectTemplate.gradle,以2019.4.28版本为例,里面代码为:

allprojects {buildscript {***dependencies {***classpath 'com.android.tools.build:gradle:3.4.0'**BUILD_SCRIPT_DEPS**}}***
}
***

如上图,可以看到插件版本为3.4.0,如果unity里本身修改了baseProjectTemplate.gradle就按照修改后的来,这个文件夹内所有的gradle和properties都是默认的,如果程序里修改就按照程序里的来。修改的方法在Editor–>ProjectSettings–>Player–>Publishing Settings,如下图所示:

如上图,其实就是对应编辑器文件夹下的gradle文件,如果打勾就会在pluging/Android文件夹下生成对应的文件,就可以直接修改,不再按照unity默认的来,就可以修改配置了。

经过上面的介绍已经知道如何查看并修改unity的gradle插件版本,下面就是修改对应的gradle版本。首先打开Editor–>Preference–>External Tools就可以看到Android的打包环境配置。

2020版本以后的Unity是默认路径下就自己配置好环境,选择默认就可以,但是依旧可能会存在环境不存在或者版本不对,所以可以自己配置,这样修改也方便。这里有需要特别关注的一点也是大部分打包失败的原因,就是gradle的版本和对应的插件版本是有对照关系的,必须对照上才能正常打包。对应关系如下图:

只要配置好对应的关系就行了。

APK+obb分包无法运行问题

因为Google商店对上传的apk有内存限制,要求是100M以内,这里推荐使用的是APk+OBB进行分包,根据最新的要求是要求使用AAB包,这里先介绍APK+OBB的分包遇到的问题。

分开打包的方法是Editor–>ProjectSettings–>Player–>Publishing Settings里,勾选上最下面的Split Application Binary。

这个是可以代码控制的:

PlayerSettings.Android.useAPKExpansionFiles = true;

分包后如何在手机上运行呢,这里只需要安装分包后的APK,然后在手机上运行,发现第一次运行不成功,这是因为资源都在OBB中,所以无法正常运行,这里只需要吧自己的OBB改好名字放在对应的文件夹就行了。然后再运行就可以了。

文件夹地址:手机目录\Android\obb"APP的包名”
OBB文件的名字: main.安卓内部版本号.APP包名.obb (举例:main.102.com.XXX.XXX.XXX.obb)

华为手机出现水滴屏无法适配的问题

笔者的项目要求手机在遇到水滴屏或者刘海屏的时候,上面显示黑条不进行渲染就可以,笔者查了一下unity的设置方法,发现只需要不勾选Editor–>ProjectSettings–>Resolution and Presentation里的Render outside safe area即可。

但是笔者发现APP在某个测试的华为手机上依旧渲染了,最后发现是接入的SDK里设置了华为手机的屏幕渲染。在华为手机Android8.0的适配方案是在AndroidManfiest里面添加下面的话即可,笔者发现接入的SDK设置了这个,于是去掉就没有问题了。

<meta-data android:name="android.notch_support" android:value="true"/>

这里列举一下小米手机的适配方案是:

<meta-dataandroid:name="notch.config"android:value="portrait|landscape"/>

华为荣耀系列闪退

2023-02-22 14:34:08.234 12494-12494 AndroidRuntime          pid-12494                            E  FATAL EXCEPTION: mainProcess: com.xg.legendofliqi, PID: 12494java.lang.Error: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***Version '2021.3.1f1c1 (0cb3bd085a01)', Build type 'Release', Scripting Backend 'il2cpp', CPU 'arm64-v8a'Build fingerprint: 'HONOR/FNE-AN00/HNFNE:12/HONORFNE-AN00/6.1.0.178C00:user/release-keys'Revision: '0'ABI: 'arm64'Timestamp: 2023-02-22 14:34:03+0800pid: 12494, tid: 12580, name: Thread-9  >>> com.xg.legendofliqi <<<uid: 10052signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x100000071x0  0000000000000000  x1  0000000000000001  x2  00000075508123b8  x3  0000000000000001x4  ffffffffffffffff  x5  00000075b0c07208  x6  0000000000000000  x7  0000000000000000x8  0000000000000000  x9  0000000000010cc0  x10 0000000000000000  x11 0000000000000000x12 0000000000000a80  x13 0000000000000000  x14 431bde82d7b634db  x15 0000000100000001x16 00000076512d3bb8  x17 00000079a4bec168  x18 000000753f646000  x19 0000000000000000x20 ffffffffffffffff  x21 000000777bdb99b0  x22 00000075b0bf2400  x23 00000075508123f8x24 00000075b0bf2278  x25 0000007550812740  x26 00000075b0be3c10  x27 00000075508128d8x28 000000761018e900  x29 0000007550812360sp  0000007550812360  lr  0000007650856d54  pc  00000075513c0730backtrace:#00 pc 00000000000a9730  /vendor/lib64/hw/vulkan.adreno.so (qglinternal::vkWaitForFences(VkDevice_T*, unsigned int, VkFence_T* const*, unsigned int, unsigned long)+184) (BuildId: 5839fbcc06912e00a12c12db16914158)#01 pc 0000000000781d50  /data/app/~~WnZeyO9JhYbG9GbePcBSVg==/com.xg.legendofliqi-qTxoOJYDPp2KJv3Yr8KuPA==/lib/arm64/libunity.so (BuildId: 73ee1682c58347912d029a798789df982330b7d9)#02 pc 000000000075f864  /data/app/~~WnZeyO9JhYbG9GbePcBSVg==/com.xg.legendofliqi-qTxoOJYDPp2KJv3Yr8KuPA==/lib/arm64/libunity.so (BuildId: 73ee1682c58347912d029a798789df982330b7d9)#03 pc 0000000000781260  /data/app/~~WnZeyO9JhYbG9GbePcBSVg==/com.xg.legendofliqi-qTxoOJYDPp2KJv3Yr8KuPA==/lib/arm64/libunity.so (BuildId: 73ee1682c58347912d029a798789df982330b7d9)#04 pc 0000000000760a08  /data/app/~~WnZeyO9JhYbG9GbePcBSVg==/com.xg.legendofliqi-qTxoOJYDPp2KJv3Yr8KuPA==/lib/arm64/libunity.so (BuildId: 73ee1682c58347912d029a798789df982330b7d9)#05 pc 000000000076ec38  /data/app/~~WnZeyO9JhYbG9GbePcBSVg==/com.xg.legendofliqi-qTxoOJYDPp2KJv3Yr8KuPA==/lib/arm64/libunity.so (BuildId: 73ee1682c58347912d029a798789df982330b7d9)#06 pc 0000000000758714  /data/app/~~WnZeyO9JhYbG9GbePcBSVg==/com.xg.legendofliqi-qTxoOJYDPp2KJv3Yr8KuPA==/lib/arm64/libunity.so (BuildId: 73ee1682c58347912d029a798789df982330b7d9)#07 pc 0000000000750994  /data/app/~~WnZeyO9JhYbG9GbePcBSVg==/com.xg.legendofliqi-qTxoOJYDPp2KJv3Yr8KuPA==/lib/arm64/libunity.so (BuildId: 73ee1682c58347912d029a798789df982330b7d9)#08 pc 000000000075a9f4  /data/app/~~WnZeyO9JhYbG9GbePcBSVg==/com.xg.legendofliqi-qTxoOJYDPp2KJv3Yr8KuPA==/lib/arm64/libunity.so (BuildId: 73ee1682c58347912d029a798789df982330b7d9)#09 pc 00000000006a71d4  /data/app/~~WnZeyO9JhYbG9GbePcBSVg==/com.xg.legendofliqi-qTxoOJYDPp2KJv3Yr8KuPA==/lib/arm64/libunity.so (BuildId: 73ee1682c58347912d029a798789df982330b7d9)#10 pc 00000000007508fc  /data/app/~~WnZeyO9JhYbG9GbePcBSVg==/com.xg.legendofliqi-qTxoOJYDPp2KJv3Yr8KuPA==/lib/arm64/libunity.so (BuildId: 73ee1682c58347912d029a798789df982330b7d9)#11 pc 00000000006a8f00  /data/app/~~WnZeyO9JhYbG9GbePcBSVg==/com.xg.legendofliqi-qTxoOJYDPp2KJv3Yr8KuPA==/lib/arm64/libunity.so (BuildId: 73ee1682c58347912d029a798789df982330b7d9)#12 pc 00000000008a5e50  /data/app/~~WnZeyO9JhYbG9GbePcBSVg==/com.xg.legendofliqi-qTxoOJYDPp2KJv3Yr8KuPA==/lib/arm64/libunity.so (BuildId: 73ee1682c58347912d029a798789df982330b7d9)#13 pc 00000000008a7c18  /data/app/~~WnZeyO9JhYbG9GbePcBSVg==/com.xg.legendofliqi-qTxoOJYDPp2KJv3Yr8KuPA==/lib/arm64/libunity.so (BuildId: 73ee1682c58347912d029a798789df982330b7d9)
2023-02-22 14:34:08.234 12494-12494 AndroidRuntime          pid-12494                            E        #14 pc 000000000089f4a8  /data/app/~~WnZeyO9JhYbG9GbePcBSVg==/com.xg.legendofliqi-qTxoOJYDPp2KJv3Yr8KuPA==/lib/arm64/libunity.so (BuildId: 73ee1682c58347912d029a798789df982330b7d9)#15 pc 000000000033070c  /data/app/~~WnZeyO9JhYbG9GbePcBSVg==/com.xg.legendofliqi-qTxoOJYDPp2KJv3Yr8KuPA==/lib/arm64/libunity.so (BuildId: 73ee1682c58347912d029a798789df982330b7d9)#16 pc 00000000000b3ea0  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+264) (BuildId: 82e5b2ff86b193c94139353a92c4af29)#17 pc 0000000000053880  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64) (BuildId: 82e5b2ff86b193c94139353a92c4af29)at vulkan.qglinternal::vkWaitForFences(VkDevice_T*, unsigned int, VkFence_T* const*, unsigned int, unsigned long)(vkWaitForFences:184)at libunity.0x781d50(Native Method)at libunity.0x75f864(Native Method)at libunity.0x781260(Native Method)at libunity.0x760a08(Native Method)at libunity.0x76ec38(Native Method)at libunity.0x758714(Native Method)at libunity.0x750994(Native Method)at libunity.0x75a9f4(Native Method)at libunity.0x6a71d4(Native Method)at libunity.0x7508fc(Native Method)at libunity.0x6a8f00(Native Method)at libunity.0x8a5e50(Native Method)at libunity.0x8a7c18(Native Method)at libunity.0x89f4a8(Native Method)at libunity.0x33070c(Native Method)at libc.__pthread_start(void*)(__pthread_start:264)at libc.__start_thread(__start_thread:64)

打包版本是Unity 2021.3.1f1c1,有使用最新版Unity打包但还是一样的空包一样会闪退

错误日志是这样的截图找不到了可以看到最关键的错误信息就是vulkan.qglinternal::vkWaitForFences(VkDevice_T*, unsigned int, VkFence_T* const*, unsigned int, unsigned long)(vkWaitForFences:184)

什么是Vulkan?

是一个跨平台的2D和3D绘图应用程序接口
在2015年游戏开发者大会(GDC)上发表
是OpenGL的下一代版本,旨在提供更低的CPU开销与更直接的GPU控制

Auto Graphics API:自动图形接口(建议选择自动)

勾选:Unity会自动尝试使用对应图形API接口进行图形处理
默认使用Vulkan,如果设备不支持Vulkan,Unity会退到GLES3.2、GLES3.1或GLES3.0

不勾选:可以列表中自己对使用的图形API接口进行排序,设置使用优先级

下方的副选项ES3.1、ES3.1+AEP、ES3.2是三个额外的用于配置最低OpenGL ES 3.X次要版本的
注意:只有当GLES2不在列表中是,Unity才会讲额外的三个选项要求添加到Android应用清单中,在这种情况下,如果你的应用发布到GooglePlay应用商店,它将不会显示在不受支持的设备上

大概得原因就是因为Auto Graphics API勾选后,选了自动优先使用vulkan但是华为荣耀系列为何会报错我就不是太清楚了,有想深入了解的可以自行研究一下跟一下堆栈日志

解决方案一

第一种解决方案是将自动Graphics API勾选取消,然后变成下图这用再移除Vulkan,这样就解决了但是这个解决方式并不优雅,因为这样意味着我们所有的APK都使用了OpenGL3,vulkan可以简单理解为是OpenGl的升级版这样相当于是降级处理

解决方案二

Android 设备上运行时选择您想要的图形 API。

Unity提供了在UnityPlayerActivity中添加命令行参数的功能。您可以添加命令行参数。例如-force-gles20, -force-gles30, -force-gles31, -force-gles31aep and -force-vulkan强制使用选定的图形 API。

您可以导出项目并在Android Studio中打开它,然后修改UnityPlayerActivity.java文件。有一个例子:

String deviceName = android.os.Build.MODEL;// Setup activity layout
@Override protected void onCreate(Bundle savedInstanceState)
{requestWindowFeature(Window.FEATURE_NO_TITLE);super.onCreate(savedInstanceState);if(deviceName.equals("FNE-AN00")){this.getIntent().putExtra("unity", "-force-gles30");}mUnityPlayer = new UnityPlayer(this);setContentView(mUnityPlayer);mUnityPlayer.requestFocus();
}

在这里,我使用了我的华为荣耀测试机FNE-AN00为例。并使用 Vulkan 和 OpenGLES 图形 API 构建项目。我想在这个设备上选择比较老的Graphics API,所以我设置命令行参数使用OpenGLES graphics API。我们的游戏将使用 OpenGLES 3.0 在这个 FNE-AN00 设备上运行。另一方面,它在其他 Android 设备上运行时将使用 Vulkan。

当然因为华为荣耀系列的机型很多,我是比较暴力的直接将所有华为机型都使用OpenGLES 3.0,更优雅的方式就是将有问题的机型做针对设置。

Unity-移动端打包记录(持续更新)相关推荐

  1. 达梦数据库操作记录_达梦数据库常用功能及命令记录 -- 持续更新

    达梦数据库常用功能及命令记录 -- 持续更新 达梦数据库常用功能及命令记录 达梦数据库语句的使用总体来说跟 oracle 很接近的, 这篇文章主要是把常用的情况和语句做了记录, 并且后续还会不断的持续 ...

  2. 中间件安全知识点记录-持续更新

    这是一个关于中间件安全的系列文章,后期会持续更新: 一.首先,抛出中间件的概念 所谓中间件,就是位于操作系统和应用软件之间的一个软件层,它向各种应用软件提供服务,使不同的应用进程能在屏蔽掉平台差异的情 ...

  3. Unity游戏优化指南大全(持续更新中!)

    Unity游戏优化指南大全 三个官方优化提示: 性能和优化 (Performance and Optimization) - 关于性能分析器以及性能和优化技巧的 Unity 学习教程. Best pr ...

  4. UE4 随笔 反射标记符记录 持续更新

    原创文章,转载请注明出处. ***本篇为基础文章,主要为自己记录用.*** 瞎掰 一些反射的UPRPERTY修饰符记录 GameInstance/GameMode等逻辑常用类随笔 反射 标识符 随笔 ...

  5. Unity 2020 By Example 笔记(持续更新中)

    第一款游戏中,玩家将以第一人称控制一个角色去探索一个环境,并在时间限制结束前收集硬币.如果计时器超时,游戏就结束了.另一方面,如果玩家在计时器到期前收集到所有的硬币,那么他就赢了.控制将使用工业标准的 ...

  6. uniapp(踩坑记录 持续更新)

    20221010 uniapp indicator-dots样式修改 <style>/* 默认指示点的样式 */.screen-body .wx-swiper-dot {width: 6r ...

  7. ubuntu使用问题与解决记录[持续更新]

    1. 添加到计划任务 为脚本增加可执行权限 sudo chmod +x yeelink.sh 将脚本加入cronjob(计划任务) sudo crontab -e 在cornjob文件中添加下面一行, ...

  8. Javasocket服务端持久化,持续更新中

    TCP 报文段结构 一谈到 TCP 协议,大家最先想到的词就是「面向连接」和「可靠」.没错,TCP 协议的设计就是为了能够在客户端和服务器之间建立起一个可靠连接. 在讲连接过程之前,我们先来看看 TC ...

  9. 005-PS基础学习笔记记录-持续更新

    admin@admindembp 001-基础学习笔记 % tree -N -L 1 . ├── 000-Adobe全套系列-破解软件下载.md ├── 001-平面设计接单地址.md ├── 002 ...

最新文章

  1. tsp问题 python_ortools tsp问题
  2. 【Netty】Netty 简介 ( 原生 NIO 弊端 | Netty 框架 | Netty 版本 | 线程模型 | 线程 阻塞 IO 模型 | Reactor 模式引入 )
  3. Java:内部类之成员内部类,内部类之匿名内部类
  4. apscheduler 绿色版
  5. Shell编程—【05】Linux的find命令详解
  6. Python:PyCharm选择性忽略PEP8警告
  7. QMessageBox自定义大小
  8. 如何搭建数据标准管理平台
  9. 【数字信号调制】基于matlab GUI AM+DSB+SSB+ASK+FSK+PSK调制解调【含Matlab源码 058期】
  10. 【VirtualBox】VirtualBox的四种网络连接模式
  11. 化工企业ERP建设中设备管理的重要性
  12. 精品化游戏《热血征途》掀起网页游戏大变革
  13. Unity教程2D入门:25 主菜单MainMenu
  14. System State 转储分析案例一则
  15. 企业—habor docker镜像仓库的搭建
  16. codeforces每日5题(均1500)-第八天
  17. NO.4 项目无法一键打包?自己写个shell脚本吧
  18. 用户体验设计中的场景服务设计
  19. 36氪专访融云CEO董晗:8年企服,6年出海,现计划成为「沙特最大科技企业」
  20. 北京化工大学本科毕业论文答辩和论文选题PPT模板

热门文章

  1. 停车场寻车系统(识别车牌,手机app查询相关信息)
  2. Week14 必做题
  3. 华为荣耀八手机经常显示无服务器,华为荣耀8手机为什么跳屏
  4. 华为手机30s桌面循环滑动_mate30pro桌面如何循环滑动
  5. kafka 统计消息总数_查看kafka消息队列的积压情况
  6. 一篇解单链表(0基础看)(C语言)《数据结构与算法》
  7. 仿淘宝头像上传功能(二)——程序篇
  8. 在网页中显示QQ在线状态
  9. 编写三个重载函数,分别求两个整数、实数和双精度数中最大的数。
  10. 【语音识别】基于GMM-HMM的语音识别系统