• 【unity2023打包安卓工程】踩坑记录


    踩坑记录

    踩了快一个星期的坑,希望能帮助到有需要的人

    项目使用的是unity2019版本,由于很多新的插件和功能都已经不支持2019了,所以升级unity的版本
    在升级版本的过程中遇到了很多的问题,因为本身基础较差,加之比较新,网上能找到的解决办法少之又少,当然也存在不希望外露保持技术神秘感的大神…
    扯远了,在这里记录一下踩坑的过程以及解决办法

    使用环境

    Androidstudio 2022.3 - - -最好是比较新的像4.11左右或者一下的就尽量不要用了,老版本在打包的时候会弹出异常,提示某些以前在build.gradle里的关键字已经失效了,要用新的去代替
    unity 2023 - - -安卓打包相关的工具
    windows10 sdk 10.0.1314 - - - 后面会说是干嘛的
    ndk r23b - - - 后面会上传附件
    sdk 28及以上- - -后面会上传附件,也可以在as官网里下
    gradle 7.6.0 - - - 这个在安卓工程里的gradle-wrapper.properties里可以修改
    gradle插件 7.4.1 - - - 这个需要和gradle进行匹配,网上可以根据gradle找到对应的版本 在项目根目录下的build.gradle里

    Unity的准备工作

    在unityhub下载unity2023 我的是2023.1.12f
    下载对应的安卓环境(同事亲测它帮我们下的安卓环境是有问题的,比如unit2023打包安卓至少是jdk11,但是它帮我们下的jdk还是8的)
    下载之后选择安卓环境打开项目,然后制作你的项目
    写完代码后可以现在unity打包成apk看看能不能正常打包运行
    如果要打包的话,需要自己安装jdk11
    然后在
    在这里插入图片描述
    上图的位置去掉勾勾,选择你安装好的jdk11的路径
    后面的sdk和ndk,gradle都是一样的道理,当然你可以先用默认的打包看看有没有问题,有的话再去下载我上面说的sdk和ndk版本,然后在上图修改对应的路径
    到这里应该就能正常打包了
    为什么说可以先试一下官方默认给你的环境路径去打包呢,因为这个2023可能太新了,官方还没有适配还是什么的,后面可能就发现了这个问题,指不定后面的你们去打包的时候他已经适配好了呢是吧?
    打包的设置
    我使用的是il2cpp的打包模式,mono的还没试过,不过估计比il2cpp简单很多
    记得在playersettings里确定下面两个都勾上了
    在这里插入图片描述
    然后unity的工作就基本结束了

    Windows10 SDK

    在unity工程集成到Androidstudio之前还需要确保一个工具已经准备好了
    就是window10 SDK
    这个可以在vs installer里点击修改
    在这里插入图片描述

    然后点击
    在这里插入图片描述
    确保你的电脑已经至少又一个Windows10 sdk了,否则在集成之后打包的过程中会出现异常
    具体的说就是il2cpp在打包的时候会调用c++这类比较底层的代码,而在Androidstudio中调用的时候会需要用到系统里的c++部分代码,其中的内容就是在这个Windows10 sdk里,如果你没有的话,打包的时候就会提示你error # include 类似的字样,导致打包失败

    Androidstudio

    这里的部分比较复杂,我尽量剪短一点说明
    因为是在Androidstudio里进行整体打包的,所以这里的打包环境一定要确定是正确的(也就是说每个工具之间的版本一定要是兼容和匹配的)
    如果不匹配的话就会出现很多你在网上根本找不到原因和办法的异常,因为它给出的异常信息就少之又少,所以寻找解决办法就是在大海捞针
    每个工具之间的版本我在上面已经写了,如果你的工具版本和我的不一样,需要自己去尝试
    如果比我低很多的,建议你用我上面推荐的版本,因为版本太低的工具基本上是被淘汰了,其他的工具已经不支持了
    比如你的sdk和ndk都是比较新的,但是你的gradle还是老的版本
    再具体一点就是sdk是34,nkd是r23b的,但是你的gradle版本还在4.0或者附近的话,在打包的时候就会出现提示你某些xml里的属性不见了,就是因为不兼容的问题导致的
    所以如果你遇到了异常但是又弹尽粮绝的话,可以尝试更新工具的版本
    在projectsettings里设置你的sdk,ndk以及jdk
    然后按照官方给出的unity集成到Androidstudio的流程进行操作

    https://github.com/Unity-Technologies/uaal-example/blob/master/docs/android.md

    把unity打包出来的安卓工程里的unitylibrary集成到Androidstudio里

    第一个需要注意的地方

    官方里说的
    在这里插入图片描述
    在setting.gradle里添加框框里的内容的需要修改
    我使用的Androidstudio2022
    需要把框框里的内容放到项目根目录下的build.gradle里

    第二个需要注意的地方

    下图框框里的路径你记得改成你的unitylibrary的路径,不要直接复制粘贴,我就是直接复制粘贴了,sync半天都没识别到unitylibrary…
    在这里插入图片描述

    第三个需要注意的地方

    Androidstudio 2022版本好提示你包名的设置已经更换了新的规则,需要进行修改
    在主模板里的builder.gradle添加这个
    在这里插入图片描述
    不能在AndroidManifest.xml里添加packagename这个字段了,否则会报异常

    第四个需要注意的地方

    需要在
    在这里插入图片描述
    string.xml文件中添加上面这行代码,否则会弹出recources x00之类的异常
    这个是老问题了,之前的版本打包的时候也会又这个问题

    第五个需要注意的地方

    在项目根目录的local.properties文件里
    可以指定一下你的sdk和ndk的路径
    不指定的话就在projectsettings里进行选择
    Androidstudio2022已经不支持在buidl.gradle的defaultconfig里添加ndk这个关键词了
    直接在外面添加ndkversion就可以了
    在这里插入图片描述

    第六个需要注意的

    正常的普通项目,上面都解决了的话应该就可以正常打包了
    如果项目中用到了阿里的arouter插件
    在进行打包的时候会提示异常, asm 7之类的,这个问题目前还没有解决,由于时间关系只能先用回2019的旧版本
    试试2021的版本可不可以打包成功吧…

    其他

    unity启动缓慢

    (该问题已解决,可往下看)
    这个问题之前的版本也有,一直不知道原因,就是单纯的unity集成到Androidstudio之后,进行调用打开,需要等很长的一段时间,这个问题在更新了unity和Androidstudio之后还是会有,如果有大佬知道原因的话务必解一下小弟的困惑
    就先记录这么多吧,研究了快一个星期了…
    可能还有一点遗漏的,想起来的话会再更新的…
    希望可以帮助到有需要的人…

    更新

    更新一 2023.9.27

    unity2023版会出现arouter插件的兼容问题
    亲测unity2021版可以正常使用
    另外提及一下,关于unity集成到安卓项目中作为一个module,在跳转的时候出现的等待时间过长问题
    已经发现了解决的思路以及问题所在
    涉及到各方面的因素,这里就只说明解决思路
    我们发现,在unity自己打包出来的apk运行是不会出现等待时间过长的情况的,但是为什么集成到安卓工程之后就出现了这个问题呢,很明显是在安卓工程中我们遗漏了一些配置或者说是操作
    检查unityi打包出来的unitylibaray我们可以发现
    文件里又一个laucher的文件,这个文件就是unity自己写的类似安卓工程里的app这个主模块
    抱着试一试的操作我去检查了一下unity自己打包出来的和安卓原生的app主模块里配置文件的区别,发现果然是这里的问题
    实际说到这里已经很清楚了,后面的我就细说了。
    这个问题可以说困扰了我两三年之久,当然实际肯定没这么久的,毕竟中间我也很少关注这个问题以及安卓工程一些打包的知识,不过这个解决的思路我确实受益匪浅,通过比较两者的区别去找到解决问题的关键点,嘛,虽然之前也有尝试过,不过确实也是因为基础太差了,也没人引导

    unity2021

    关于在Androidstudio打包aar供unity调用的问题

    这里只说unity的问题
    如果在安卓中调用打好的aar一切正常,放在unity里打包时出现了类似

    Android Error:AAPT: error: resource android:attr/colorError not found
    
    • 1

    这样的问题,大概率是因为unity和你的Androidstudio需要的依赖的版本不一样导致的
    这个时候需要去查看Androidstudio里的build.gradle你所添加的插件的依赖版本和unity里的是否一致,不一致的会直接复制Androidstudio里的然后重新打包即可

    关于unity调用aar包打包时出现的问题

    如果unity需要调用aar包,在打包的时候出现了关于minisdk相关的异常信息,需要比较一下unity里的minisdkversion和aar包里的sdkversion是否一致,不一致的话最好保持一致

    关于unity打包成apk出现的问题

    问题如下,在assets的plugins的Android里添加了aar包,然后测试打包的时候出现了multiple dex classes之类的字样的异常
    在未添加新的aar包之前,直接进行打包是正常的
    我的解决思路是

    1. 在网上看了可能是library缓存的问题,于是删掉了然后重新打开unity进行打包,无效
    2. 可能是添加了新的aar包的问题,所以我试着删掉了aar包,重新打包,无效
    3. 而且在第二个的操作之后,即使我想按照原来的项目代码去打包原来的apk也一直在报这个错
    4. 在lunch gradle 里添加了如下代码
      在这里插入图片描述 无效
    5. 我试着先不打包apk,打包成安卓工程然后导入到as里面,然后再进行打包,发现是OK的,所以问题就出在unity的laugh gradle里面
    6. 可能是gradle和jdk和sdk和ndk之间版本不同的导致的,我把unity里的gradle,ndk和sdk个版本都跟Androidstudio里的保持了一致,还是无法进行正常打包,推测可能是jdk的版本问题,但是unity2021只支持jdk8,因此只能另寻他法,无效
    7. 由于打包的方式是mono,所以关于打包build出来的信息都在
      在这里插入图片描述
      这里面,这里就是问题所在了,这个build出来的信息和Androidstudio里的build一样的, 如果有新的内容加进来,然后又删掉了,build里偶尔是会出现内容没有清理完全的情况的,因此要删掉这个文件里的下面两个文件夹里的build
      在这里插入图片描述

    最后是lancher和unitylibaray两个的build 都删掉比较保险,反正build会在你打包的时候自动重新生成的,所以可以放心删除

  • 相关阅读:
    基于vue和nodejs的项目知识信息分享平台
    python pip本地安装第三方包以及其他常用命令
    微信小程序开发入门与实战(Behaviors使用)
    【算法系列】卡尔曼滤波算法
    k8s的DNS什么时候不生效?--- 被忽视的基本原理
    NLP-词向量、Word2vec
    Anaconda下载链接
    12.SqlSession 的工具类 获取sqlsession
    JavaScript深入理解系列:call与apply
    实用篇-ES环境搭建
  • 原文地址:https://blog.csdn.net/pure81/article/details/133179595