目标

项目使用的是 Unity 5.6.6f2,不支持 Android 64位,必须升级到支持 Android IL2CPP 的版本。

Unity 版本选择

  • Unity 2017.4 LTS 两年支持周期已结束,之后 Unity 并不会针对其进行更新。
  • Unity 2018.4 LTS 还处理支持周期内,考虑到 Apple 与 Google 之后会有新的要求,因此尝试使用 Unity 2018.4 LTS 版本。
  • Unity 2019.4 LTS 版本比较新,不确定功能是否稳定,并且使用了 Unity Hub 进行安装管理,不易于批量使用。

相关链接

升级文档

阅读官方的升级文档,搜索他人的升级流程,提前了解各种坑:

新建分支

新建分支处理升级相关问题,不影响主干开发。

日志工具

推荐使用 Console Enhanced Pro 插件

  • 在选中某一类型的日志后,可以使用快捷键 Alt+上下键 快速查看同样类型信息的上一条或下一条。
  • 可以非常方便地复制日志内容。将升级后产生的所有日志保存两份备份:一份只有第一行信息,另一份拷贝调用堆栈。

升级任务

必做部分

  • 导入工程
  • 修正所有编译错误
  • 提交所有变化的资源文件
  • 升级部分插件
    • xLua 支持 Android 64位版本
  • 编辑器下运行测试
  • 打包 Android Mono
    • 使用新版本库重新编译 SDK
    • 增加新版本新增的 strings.xml
    • 禁用 DLL 更新
    • 修正构建脚本只在开启 OBB 开关时才拷贝对应文件
    • 运行测试
  • 打包 Android IL2CPP
    • IL2CPP 打包
    • 运行测试
  • 打包 iOS
    • 运行测试
  • 修正显示错误资源

完善部分

  • 修正制作工具脚本
  • 升级 Prefab 相关 API
  • 升级其他影响游戏工作流程 API
  • 升级过期 API
  • 升级 meta 文件版本格式
  • 升级资源文件版本格式
  • 修正法线贴图导入选项
  • 光照贴图格式升级,场景重新烘焙

导入阶段

可以使用命令行打开工程并指定平台,可以少一次切换平台过程并且保持工程目录干净。

1
/Applications/Unity2018.4.25f1/Unity.app/Contents/MacOS/Unity -buildtarget ios -projectpath /Users/demouser/demo

查找问题的方法就是按顺序查看打开工程后产生的 Unity 日志。

  • 打开 Unity 工程,指定为 iOS 平台
  • 提交所有打开工程后产生的 meta 文件,共计 5000+ 个
  • 记录 Unity 打开后仓库中新增的文件,如材质、贴图、meta 等文件

编译错误阶段

  • 删除 Package Manager 中内置的 TextMesh Pro 插件
  • 修正所有 ParticleEmitter 相关编译错误,直接注释相关代码
  • 注释所有 ProcedureMaterial,项目并未使用 Substance 软件
  • 修正构建 API 返回结果类型修改导致的编译错误
  • 修正 Unity 内部 API 变化导致的编译错误

其他

1
Some scripts have compilation errors which may prevent obsolete API usages to get updated. Obsolete API updating will continue automatically after these errors get fixed.

粒子

将所有 ParticleEmitter 替换为 ParticleSystem,注释掉所有出问题的其他地方。

TextMeshPro

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Assembly: 'Assets/ThirdParty/TextMesh Pro/Plugins/Editor DLL/TextMeshPro-5.6-Editor.dll' uses obsolete Unity API (UnityUpgradable)

The type 'TextAlignmentOptions' in '/Users/demouser/demo/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Text.cs' conflicts with the imported type 'TextAlignmentOptions' in 'TextMeshPro-5.6-Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'. Using the type defined in '/Users/demouser/demo/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Text.cs'.
warning CS0436: Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_LineInfo.cs(31,16)

Cannot implicitly convert type 'UnityEngine.TextCore.FaceInfo' to 'TMPro.FaceInfo'
error CS0029: Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontAsset.cs(405,34)

'FaceInfo' does not contain a definition for 'pointSize' and no accessible extension method 'pointSize' accepting a first argument of type 'FaceInfo' could be found (are you missing a using directive or an assembly reference?)
error CS1061: Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontAssetUtilities.cs(302,82)

看起来需要升级 TextMeshPro 版本,先删除 Package Manager 内置的 TextMesh Pro。

T4M

1
2
'ProceduralMaterial' is obsolete: 'Built-in support for Substance Designer materials has been removed from Unity. To continue using Substance Designer materials, you will need to install Allegorithmic's external importer from the Asset Store.'
error CS0619: Assets/T4M/Editor/T4MSC.cs(232,2)

注释相关类型的代码。

无编译错误阶段

  • 提交 Unity 2018.4.25f1 新增的配置文件
  • 提交 Unity 2018.4.25f1 自动升级的脚本
  • 提交 Unity 2018.4.25f1 自动升级的资源、Shader
  • 手动打开 DoTween 选项,禁用 Audio Physics Physics2D 模块与 Log 等级,提交配置文件

去除警告

临时将所有警告序号添加到 csc.rsp 禁用所有警告:

1
-nowarn:0618,0649,0612,0219,0414

法线贴图

Unity 5.6.6 与 2018.4.24 打开 iOS 平台项目都会有完全相同的法线贴图问题: 打开工程经过漫长的导入过程后,弹出的 NormalMap settings 窗口,直接点击 Ignore 按钮即可,不确定美术是否依赖于这种行为。

图形 API

1
Platform WindowsStandaloneSupport does not support graphics device type 

并未使用此平台,可以直接无视

命名冲突

1
2
Script 'Grid' has the same name as built-in Unity component.
AddComponent and GetComponent will not work with this script.

暂时不需要处理

编译选项文件改名

1
2
Using obsolete custom response file 'mcs.rsp'. Please use 'csc.rsp' instead.
UnityEditor.Scripting.ScriptCompilation.EditorCompilationInterface:CompileCustomScriptAssemblies(EditorScriptCompilationOptions, BuildTargetGroup, BuildTarget) (at /Users/builduser/buildslave/unity/build/Editor/Mono/Scripting/ScriptCompilation/EditorCompilationInterface.cs:277)

按照要求改名即可

FBX 导入报错与警告

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
ImportFBX Errors:
Time range (447400) for rotation curve(s) on node 'Bone001' on take 'Take 001' larger than maximum allowed (100000). These curves won't be imported. Check your file - it most likely has keys in far negative or positive timeline.
Time range (447400) for rotation curve(s) on node 'Bone005' on take 'Take 001' larger than maximum allowed (100000). These curves won't be imported. Check your file - it most likely has keys in far negative or positive timeline.

ImportFBX Warnings:
Can't import tangents and binormals, because mesh 'xxxxxxxxxxxxxxxxx' doesn't have any.

A polygon of xxxxxxxxxxxx is self-intersecting and has been discarded.

Mesh 'xxxxxxxxxxxxxxx' has no normals. Recalculating normals.

Internal error: unknown GenerateMaterial type: 32766

Inconsistent LOD naming (_LOD1 found but no _LOD0).

A polygon of xxxxxxxxxxxxxxxxxxxxxxxxx is self-intersecting and has been discarded.

每种类型只记录了一条,这些可以先忽视,后续找美术进行优化。

动画

1
The legacy Animation Clip "xxxxxxx" cannot be used in the State "New State". Legacy AnimationClips are not allowed in Animator Controllers.To use this animation in this Animator Controller, you must reimport in as a Generic or Humanoid animation clip

这些动画状态出现问题了,需要点击日志,记录下对应的模型资源

光照贴图

1
Lighting data asset ‘LightingData’ is incompatible with the current Unity version. Please use Generate Lighting to rebuild the lighting data.  Realtime Global Illumination cannot be used until the lighting data is rebuilt.

场景重新烘焙,重建所有光照贴图

编辑器进入游戏阶段

  • WWW 加载 StreamingAssets 路径错误,删除编辑器加载文件时重复添加的 file:// 协议
  • xLua 需要升级到兼容 Unity 2018 的版本,建议升级到最新版本 xLua v2.1.15
  • 更新 Unity 2018.4.25f1 自动升级的项目配置

xLua 升级

1
LuaException: c# exception:This type must add to CSharpCallLua: SG.EventMgr+EventFunction,stack:  at XLua.ObjectTranslator.CreateDelegateBridge (System.IntPtr L, System.Type delegateType, System.Int32 idx) [0x001a8] in /Users/demouser/demo/Assets/XLua/Src/ObjectTranslator.cs:535 

1、默认配置不生成代码运行会报错
这是因为Api Compatibility Level设置为.NET Standard 2.0,而.NET Standard 2.0不支持emit导致的。
解决方案:平时开发Api Compatibility Level设置为.NET 4.x,就能支持编辑器不生成代码开发。发布手机版本时,按Unity官方的建议,可配置为.NET Standard 2.0,包会更小些。

升级 xLua,下载最新版本

将项目内的 Assets/xLua 目录直接删除,然后将压缩包内的新 Assets/xLua 拷贝过来。 要更新项目内 Plugins 目录中的文件为新版本,需要使用操作系统的合并目录功能,此功能依赖于修改时间,会保留修改时间更新的文件和目录。 因此需要在解压出的 Assets/Plugins 目录内执行以下命令更新修改时间:

1
find ~/xlua_v2.1.15/Assets/Plugins -type f | xargs touch

Windows 下可以使用 Git for Windows 执行此命令;macOS 直接在终端内执行。

检查游戏时各种元素显示是否正确

在游戏内检查所有功能是否正常显示。

打包阶段

  • 升级打包脚本中的 Unity 版本为 2018.4.25f1
  • 去除原有打包脚本中的 DLL 加密相关代码
  • 增加 Unity 2018.4.25f1 中新增的 strings.xml 中的字段

Manifest

Manifests from plug-ins are merged into the main Manifest using Google’s manifmerger class.

了解 AndroidManifest 是如何合并的,有助于将属性合理地在主工程与 SDK 工程之间设置。

Android Mono

Shader 编译错误

1
2
3
4
Shader error in 'T4M 4Tex4Bump': undeclared identifier 'MixLightmapWithRealtimeAttenuation' at T4MAddSpe.cginc(89) (on gles)

Compiling Vertex program with UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN LIGHTMAP_ON LIGHTMAP_SHADOW_MIXING
Platform defines: UNITY_NO_DXT5nm UNITY_NO_RGBM UNITY_ENABLE_REFLECTION_BUFFERS UNITY_FRAMEBUFFER_FETCH_AVAILABLE UNITY_NO_CUBEMAP_ARRAY UNITY_NO_SCREENSPACE_SHADOWS UNITY_PBS_USE_BRDF3 UNITY_NO_FULL_STANDARD_SHADER SHADER_API_MOBILE UNITY_HARDWARE_TIER1 UNITY_COLORSPACE_GAMMA UNITY_HALF_PRECISION_FRAGMENT_SHADER_REGISTERS UNITY_LIGHTMAP_DLDR_ENCODING

去除方法调用后继续打包。

OBB

构建脚本适配 Unity 2018.4.25f1 去除的 OBB 配置文件

  • Unity 5.6.6f2 在 src/main/assets/bin/Data/settings.xml 配置 OBB 开关
  • Unity 2018.4.25f1 修改为通过 AndroidManifest.xml unity-buildid 方式与 OBB 内 buildid 同名文件匹配来判断 OBB 与 APK 是否匹配

使用测试工程输出有 OBB 与无 OBB 文件的工程比较后,发现 Unity 2018.4.25f1 并未像 Unity 5.6.6f2 一样对 OBB 指定 MD5 校验值,所以可以直接使用 OBB 文件而无需修改任何文件配置。

无法启动游戏 1

打包后运行出现报错

1
2
3
4
D Activity: on create, cpu abi: x86, brand: Android
E Unity   : Unable to locate player settings. bin/Data/settings.xml
D PackageManager: trimGetPackagesForUid uid = 10091 result = [com.demo.test]
E art     : Failed to register native method com.unity3d.player.UnityPlayer.nativeSendSurfaceChangedEvent()V in /data/app/com.demo.test-1/base.apk
  • 怀疑与 OBB 有关,比较 Unity 2018.4.25f1 与 Unity 5.6.6f2 空工程的 OBB 与非 OBB 包,未找到明显差异。尝试关闭 OBB 支持后重新打包。
  • 将 mainTemplate.gradle 从 Plugins/Android 中移除后继续打包。

在经过以上尝试后,结果都是上面的报错。

  • 打包时使用空场景、修改 Resources 目录名字不打包这些资源、StreamingAssets/AssetBundles 移走也不打包这些资源。
  • 比较空场景与自动化打包的两个 Gradle 工程有何区别。

使用 Unity 直接导出工程发现可以运行,排查后最终发现升级时未重新编译链接 SDK aar 使用的 Unity 内置 classes.jar,而上面的报错表明函数地址错误导致无法找到,拷贝新版本 classes.jar 后编译 aar 解决问题。

使用 classes.jar 更新 gmolib.aar gmodevlib.aar

无法启动游戏 2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
D AndroidRuntime: Shutting down VM
E AndroidRuntime: FATAL EXCEPTION: main
E AndroidRuntime: Process: com.demo.test, PID: 10387
E AndroidRuntime: java.lang.Error: FATAL EXCEPTION [main]
E AndroidRuntime: Unity version     : 2018.4.25f1
E AndroidRuntime: Device model      : Netease MuMu
E AndroidRuntime: Device fingerprint: OnePlus/OnePlus2/OnePlus2:6.0.1/MMB29M/1447841200:user/release-keys
E AndroidRuntime:
E AndroidRuntime: Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.demo.test/com.demo.test.MainActivity}: android.content.res.Resources$NotFoundException: String resource ID #0x0
E AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2443)
E AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2503)
E AndroidRuntime:     at android.app.ActivityThread.-wrap11(ActivityThread.java)
E AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1353)
E AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102)
E AndroidRuntime:     at android.os.Looper.loop(Looper.java:148)
E AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5539)
E AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
E AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:745)
E AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635)
E AndroidRuntime: Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x0
E AndroidRuntime:     at android.content.res.Resources.getText(Resources.java:312)
E AndroidRuntime:     at android.content.res.Resources.getString(Resources.java:400)
E AndroidRuntime:     at com.unity3d.player.UnityPlayer.a(Unknown Source)
E AndroidRuntime:     at com.unity3d.player.UnityPlayer.<init>(Unknown Source)
E AndroidRuntime:     at com.unity3d.player.UnityPlayerActivity.onCreate(Unknown Source)
E AndroidRuntime:     at com.demo.test.MainActivity.onCreate(MainActivity.java:28)
E AndroidRuntime:     at android.app.Activity.performCreate(Activity.java:6279)
E AndroidRuntime:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
E AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2396)
E AndroidRuntime:     ... 9 more
W ActivityManager:   Force finishing activity com.demo.test/.MainActivity
D ActivityManager: Nemu don't show crash dialog of ProcessRecord{6278628 10387:com.demo.test/u0a92}

经过检查发现是代码中引用 strings.xml 中的

1
<string name="game_view_content_description">Game view</string>

添加以后就可以正常进入游戏,将其添加到 gmolib.aar 中的 res/strings.xml 中。

增加 Unity 依赖 strings.xmlgame_view_content_description

无法启动游戏 3

这时终于可以看到启动画面了

1
2
3
4
5
6
7
D Unity   : Initialize engine version: 2018.4.25f1 (3071911a89e9)
D Unity   : Begin MonoManager ReloadAssembly
D Unity   : Failed loading assembly Managed/Assembly-CSharp.dll
D Unity   : Loading assembly failed: "Managed/Assembly-CSharp.dll": 0 at ./Runtime/Mono/MonoManager.cpp:997 (68, 0, 380)
I Unity   : Loading assembly failed: "Managed/Assembly-CSharp.dll"
I Unity   :
I Unity   : (Filename: ./Runtime/Mono/MonoManager.cpp Line: 997)

由于使用了 DLL 更新功能并且未编译特殊版本 libmono.so 文件,因此禁用 DLL 加密功能。

无法加载游戏资源

检查代码,文件路径不要重复添加 file:// 协议。

Android IL2CPP

打包失败 1

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Failed running C:\Program Files\Unity2018.4.25f1\Editor\Data\il2cpp\build/UnityLinker.exe -out="C:\Demo\Temp\StagingArea\assets\bin\Data\Managed\tempStrip" -x="C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Core.xml" -x "C:\Demo\Temp\StagingArea\assets\bin\Data\Managed\..\platform_native_link.xml" -x "C:\Users\HVersion\AppData\Local\Temp\tmp28968030.tmp" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Accessibility.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\AI.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Animation.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\AR.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\AssetBundle.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Audio.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Baselib.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Cloth.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Core.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\CrashReporting.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Director.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\FileSystemHttp.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\GameCenter.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Grid.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\HotReload.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\ImageConversion.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\IMGUI.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Input.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\JSONSerialize.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Localization.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\ParticleSystem.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\PerformanceReporting.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Physics.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Physics2D.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Profiler.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\ScreenCapture.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\SharedInternals.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\SpatialTracking.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\SpriteMask.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\SpriteShape.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Streaming.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\StyleSheets.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Substance.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Terrain.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\TerrainPhysics.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\TextCore.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\TextRendering.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Tilemap.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Timeline.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\TLS.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\UI.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\UIElements.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Umbra.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\UNET.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\UnityAnalytics.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\UnityConnect.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\UnityTestProtocol.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\UnityWebRequest.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\UnityWebRequestAssetBundle.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\UnityWebRequestAudio.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\UnityWebRequestTexture.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\UnityWebRequestWWW.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Vehicles.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\VFX.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Video.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\VR.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Wind.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\XR.xml" -x "C:\Demo\Assets\Scripts\XLua\Gen\link.xml" -x "C:\Demo\Assets\ThirdParty\Cinema Suite\Cinema Director\link.xml" -d "C:\Demo\Temp\StagingArea\assets\bin\Data\Managed" --include-unity-root-assembly="C:\Demo\Temp\StagingArea\assets\bin\Data\Managed\Assembly-CSharp-firstpass.dll" --include-unity-root-assembly="C:\Demo\Temp\StagingArea\assets\bin\Data\Managed\Assembly-CSharp.dll" --include-unity-root-assembly="C:\Demo\Temp\StagingArea\assets\bin\Data\Managed\Tayx.Graphy.dll" --include-unity-root-assembly="C:\Demo\Temp\StagingArea\assets\bin\Data\Managed\com.unity.postprocessing.Runtime.dll" --include-unity-root-assembly="C:\Demo\Temp\StagingArea\assets\bin\Data\Managed\UnityEngine.UI.dll" --include-unity-root-assembly="C:\Demo\Temp\StagingArea\assets\bin\Data\Managed\DOTween.dll" --include-unity-root-assembly="C:\Demo\Temp\StagingArea\assets\bin\Data\Managed\TextMeshPro-5.6-Runtime.dll" --dotnetruntime=il2cpp --dotnetprofile=unityaot --use-editor-options --include-directory=C:\Demo\Temp\StagingArea\assets\bin\Data\Managed --editor-settings-flag=Development --rule-set=Conservative

stdout:
Fatal error in Unity CIL Linker
Mono.Linker.Steps.XmlResolutionException: Failed to process XML description: C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Core.xml ---> System.MissingMethodException: �Ҳ�������:��!!0[] System.Array.Empty()����
   �� Mono.Linker.Steps.ResolveFromXmlStep.ProcessType(TypeDefinition type, XPathNavigator nav)
   �� Mono.Linker.Steps.ResolveFromXmlStep.ProcessTypes(AssemblyDefinition assembly, XPathNodeIterator iterator)
   �� Mono.Linker.Steps.ResolveFromXmlStep.ProcessAssembly(AssemblyDefinition assembly, XPathNodeIterator iterator)
   �� Unity.Linker.Steps.Resolution.UnityResolveFromXmlStep.ProcessAssemblies(LinkContext context, XPathNodeIterator iterator)
   �� Mono.Linker.Steps.ResolveFromXmlStep.Process()
   --- �ڲ��쳣��ջ���ٵĽ�β ---
   �� Mono.Linker.Steps.ResolveFromXmlStep.Process()
   �� Mono.Linker.Steps.BaseStep.Process(LinkContext context)
   �� Mono.Linker.Pipeline.Process(LinkContext context)
   �� Unity.Linker.UnityDriver.Run()
   �� Unity.Linker.UnityDriver.RunDriverWithoutErrorHandling()
   �� Unity.Linker.UnityDriver.RunDriver()
stderr:

UnityEngine.Debug:LogError(Object)
UnityEditorInternal.Runner:RunProgram(Program, String, String, String, CompilerOutputParserBase) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:128)
UnityEditorInternal.Runner:RunManagedProgram(String, String, String, CompilerOutputParserBase, Action`1) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:73)
UnityEditorInternal.AssemblyStripper:RunAssemblyLinker(IEnumerable`1, String&, String&, String, String) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:192)
UnityEditorInternal.AssemblyStripper:StripAssembliesTo(String[], String[], String, String, String&, String&, String, IIl2CppPlatformProvider, IEnumerable`1, BuildTargetGroup, ManagedStrippingLevel) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:124)
UnityEditorInternal.AssemblyStripper:RunAssemblyStripper(IEnumerable, String, String[], String[], String, IIl2CppPlatformProvider, RuntimeClassRegistry, ManagedStrippingLevel) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:324)
UnityEditorInternal.AssemblyStripper:StripAssemblies(String, IIl2CppPlatformProvider, RuntimeClassRegistry, ManagedStrippingLevel) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:216)
UnityEditorInternal.IL2CPPBuilder:Run() (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:203)
UnityEditorInternal.IL2CPPUtils:RunIl2Cpp(String, String, IIl2CppPlatformProvider, Action`1, RuntimeClassRegistry) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:35)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) (at C:/buildslave/unity/build/Modules/IMGUI/GUIUtility.cs:179)

按照提示修改 Api Compatibility Level is set to .net 4.x

打包失败 2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Failed running C:\Program Files\Unity2018.4.25f1\Editor\Data\il2cpp\build/UnityLinker.exe -out="C:\Demo\Temp\StagingArea\assets\bin\Data\Managed\tempStrip" -x="C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Core.xml" -x "C:\Demo\Temp\StagingArea\assets\bin\Data\Managed\..\platform_native_link.xml" -x "C:\Users\HVersion\AppData\Local\Temp\tmp5add9a96.tmp" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Accessibility.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\AI.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Animation.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\AR.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\AssetBundle.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Audio.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Baselib.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Cloth.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Core.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\CrashReporting.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Director.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\FileSystemHttp.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\GameCenter.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Grid.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\HotReload.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\ImageConversion.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\IMGUI.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Input.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\JSONSerialize.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Localization.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\ParticleSystem.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\PerformanceReporting.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Physics.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Physics2D.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Profiler.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\ScreenCapture.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\SharedInternals.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\SpatialTracking.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\SpriteMask.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\SpriteShape.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Streaming.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\StyleSheets.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Substance.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Terrain.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\TerrainPhysics.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\TextCore.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\TextRendering.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Tilemap.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Timeline.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\TLS.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\UI.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\UIElements.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Umbra.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\UNET.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\UnityAnalytics.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\UnityConnect.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\UnityTestProtocol.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\UnityWebRequest.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\UnityWebRequestAssetBundle.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\UnityWebRequestAudio.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\UnityWebRequestTexture.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\UnityWebRequestWWW.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Vehicles.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\VFX.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Video.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\VR.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Wind.xml" -x "C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\XR.xml" -x "C:\Demo\Assets\Scripts\XLua\Gen\link.xml" -x "C:\Demo\Assets\ThirdParty\Cinema Suite\Cinema Director\link.xml" -d "C:\Demo\Temp\StagingArea\assets\bin\Data\Managed" --include-unity-root-assembly="C:\Demo\Temp\StagingArea\assets\bin\Data\Managed\Assembly-CSharp-firstpass.dll" --include-unity-root-assembly="C:\Demo\Temp\StagingArea\assets\bin\Data\Managed\Assembly-CSharp.dll" --include-unity-root-assembly="C:\Demo\Temp\StagingArea\assets\bin\Data\Managed\Tayx.Graphy.dll" --include-unity-root-assembly="C:\Demo\Temp\StagingArea\assets\bin\Data\Managed\com.unity.postprocessing.Runtime.dll" --include-unity-root-assembly="C:\Demo\Temp\StagingArea\assets\bin\Data\Managed\UnityEngine.UI.dll" --include-unity-root-assembly="C:\Demo\Temp\StagingArea\assets\bin\Data\Managed\DOTween.dll" --include-unity-root-assembly="C:\Demo\Temp\StagingArea\assets\bin\Data\Managed\TextMeshPro-5.6-Runtime.dll" --dotnetruntime=il2cpp --dotnetprofile=unityaot --use-editor-options --include-directory=C:\Demo\Temp\StagingArea\assets\bin\Data\Managed --editor-settings-flag=Development --rule-set=Conservative

stdout:
Fatal error in Unity CIL Linker
Mono.Linker.Steps.XmlResolutionException: Failed to process XML description: C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Core.xml ---> System.MissingMethodException: �Ҳ�������:��!!0[] System.Array.Empty()����
   �� Mono.Linker.Steps.ResolveFromXmlStep.ProcessType(TypeDefinition type, XPathNavigator nav)
   �� Mono.Linker.Steps.ResolveFromXmlStep.ProcessTypes(AssemblyDefinition assembly, XPathNodeIterator iterator)
   �� Mono.Linker.Steps.ResolveFromXmlStep.ProcessAssembly(AssemblyDefinition assembly, XPathNodeIterator iterator)
   �� Unity.Linker.Steps.Resolution.UnityResolveFromXmlStep.ProcessAssemblies(LinkContext context, XPathNodeIterator iterator)
   �� Mono.Linker.Steps.ResolveFromXmlStep.Process()
   --- �ڲ��쳣��ջ���ٵĽ�β ---
   �� Mono.Linker.Steps.ResolveFromXmlStep.Process()
   �� Mono.Linker.Steps.BaseStep.Process(LinkContext context)
   �� Mono.Linker.Pipeline.Process(LinkContext context)
   �� Unity.Linker.UnityDriver.Run()
   �� Unity.Linker.UnityDriver.RunDriverWithoutErrorHandling()
   �� Unity.Linker.UnityDriver.RunDriver()
stderr:

UnityEngine.Debug:LogError(Object)
UnityEditorInternal.Runner:RunProgram(Program, String, String, String, CompilerOutputParserBase) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:128)
UnityEditorInternal.Runner:RunManagedProgram(String, String, String, CompilerOutputParserBase, Action`1) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:73)
UnityEditorInternal.AssemblyStripper:RunAssemblyLinker(IEnumerable`1, String&, String&, String, String) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:192)
UnityEditorInternal.AssemblyStripper:StripAssembliesTo(String[], String[], String, String, String&, String&, String, IIl2CppPlatformProvider, IEnumerable`1, BuildTargetGroup, ManagedStrippingLevel) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:124)
UnityEditorInternal.AssemblyStripper:RunAssemblyStripper(IEnumerable, String, String[], String[], String, IIl2CppPlatformProvider, RuntimeClassRegistry, ManagedStrippingLevel) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:324)
UnityEditorInternal.AssemblyStripper:StripAssemblies(String, IIl2CppPlatformProvider, RuntimeClassRegistry, ManagedStrippingLevel) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:216)
UnityEditorInternal.IL2CPPBuilder:Run() (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:203)
UnityEditorInternal.IL2CPPUtils:RunIl2Cpp(String, String, IIl2CppPlatformProvider, Action`1, RuntimeClassRegistry) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:35)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) (at C:/buildslave/unity/build/Modules/IMGUI/GUIUtility.cs:179)

怀疑与未升级的 DLL 有关,准备进行以下尝试:

  • 测试空工程打包 IL2CPP 测试
  • csc.rsp 删除部分警告测试
  • DoTweenPro 升级
  • TextMeshPro 升级

在进行完第一步就发现有问题,也出现了上述的错误,这说明与工程无关,问题出在环境上。

之前搜索时找到一个答案说从 Windows 7 升级到 Windows 10 解决了问题,猜测问题与 .Net Framework 有关系。

  • 使用另一台 Windows 10 机器打包空工程发现没有问题
  • 在 Windows 7 机器上下载 .Net Framework 4.8 Developer Pack 安装后打包空工程发现没有问题

打包失败 3

又出现了新问题

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Failed running C:\Program Files\Unity2018.4.25f1\Editor\Data\il2cpp/build/il2cpp.exe --convert-to-cpp --emit-null-checks --enable-array-bounds-check --dotnetprofile="unityaot" --compile-cpp --libil2cpp-static --platform="Android" --architecture="ARMv7" --configuration="Release" --outputpath="C:\Demo\Temp\StagingArea\assets\bin\Data\Native\armeabi-v7a\libil2cpp.so" --cachedirectory="C:\Demo\Assets\..\Library\il2cpp_android_armeabi-v7a/il2cpp_cache" --additional-include-directories="C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\bdwgc/include" --additional-include-directories="C:\Program Files\Unity2018.4.25f1\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\libil2cpp/include" --tool-chain-path="E:/android-ndk-r16b" --map-file-parser="C:\Program Files\Unity2018.4.25f1\Editor\Data\Tools\MapFileParser\MapFileParser.exe" --directory="C:\Demo\Temp\StagingArea\assets\bin\Data\Managed" --generatedcppdir="C:\Demo\Temp\StagingArea\Il2Cpp\il2cppOutput" 

stdout:
Building libil2cpp.so with AndroidToolChain
    Output directory: C:\Demo\Temp\StagingArea\assets\bin\Data\Native\armeabi-v7a
    Cache directory: C:\Demo\Library\il2cpp_android_armeabi-v7a\il2cpp_cache
ObjectFiles: 771 of which compiled: 771
    Time Compile: 51818 milliseconds Il2CppAttributes.cpp
    Time Compile: 24657 milliseconds Il2CppInvokerTable.cpp
    Time Compile: 17204 milliseconds Il2CppTypeDefinitions.cpp
    Time Compile: 16512 milliseconds Bulk_Assembly-CSharp_21.cpp
    Time Compile: 15283 milliseconds Bulk_Assembly-CSharp_44.cpp
    Time Compile: 13150 milliseconds Bulk_TextMeshPro-5.6-Runtime_1.cpp
    Time Compile: 13124 milliseconds Bulk_Assembly-CSharp_51.cpp
    Time Compile: 12542 milliseconds Bulk_Assembly-CSharp_29.cpp
    Time Compile: 12139 milliseconds Bulk_Assembly-CSharp-firstpass_3.cpp
    Time Compile: 12107 milliseconds Bulk_System.Xml_5.cpp
Total compilation time: 53288 milliseconds.
il2cpp.exe didn't catch exception: Unity.IL2CPP.Building.BuilderFailedException: E:\android-ndk-r16b\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ @"C:\Users\HVersion\AppData\Local\Temp\tmpED5A.tmp" -o "C:\Demo\Library\il2cpp_android_armeabi-v7a\il2cpp_cache\linkresult_66C8C7AE686408A76D9EDFF411251401\libil2cpp.so" -shared -Wl,-soname,libil2cpp.so -Wl,--no-undefined -Wl,-z,noexecstack -Wl,--gc-sections -Wl,--build-id --sysroot "E:\android-ndk-r16b\platforms\android-16\arch-arm" -gcc-toolchain "E:\android-ndk-r16b\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64" -target armv7-none-linux-androideabi -Wl,--wrap,sigaction -L "E:\android-ndk-r16b\sources\cxx-stl\gnu-libstdc++\4.9\libs\armeabi-v7a" -lgnustl_static -llog -rdynamic -fuse-ld=gold.exe

C:\Demo\Temp\StagingArea\Il2Cpp\il2cppOutput/Bulk_Assembly-CSharp_10.cpp:34516: error: undefined reference to '_getIPv6'
clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)


   �� Unity.IL2CPP.Building.CppProgramBuilder.PostprocessObjectFiles(HashSet`1 objectFiles, CppToolChainContext toolChainContext)
   �� Unity.IL2CPP.Building.CppProgramBuilder.Build(IBuildStatistics& statistics)
   �� il2cpp.Program.DoRun(String[] args)
   �� il2cpp.Program.Run(String[] args)
   �� il2cpp.Program.Main(String[] args)
stderr:

δ��������쳣:  Unity.IL2CPP.Building.BuilderFailedException: E:\android-ndk-r16b\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ @"C:\Users\HVersion\AppData\Local\Temp\tmpED5A.tmp" -o "C:\Demo\Library\il2cpp_android_armeabi-v7a\il2cpp_cache\linkresult_66C8C7AE686408A76D9EDFF411251401\libil2cpp.so" -shared -Wl,-soname,libil2cpp.so -Wl,--no-undefined -Wl,-z,noexecstack -Wl,--gc-sections -Wl,--build-id --sysroot "E:\android-ndk-r16b\platforms\android-16\arch-arm" -gcc-toolchain "E:\android-ndk-r16b\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64" -target armv7-none-linux-androideabi -Wl,--wrap,sigaction -L "E:\android-ndk-r16b\sources\cxx-stl\gnu-libstdc++\4.9\libs\armeabi-v7a" -lgnustl_static -llog -rdynamic -fuse-ld=gold.exe

C:\Demo\Temp\StagingArea\Il2Cpp\il2cppOutput/Bulk_Assembly-CSharp_10.cpp:34516: error: undefined reference to '_getIPv6'
clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)


   �� Unity.IL2CPP.Building.CppProgramBuilder.PostprocessObjectFiles(HashSet`1 objectFiles, CppToolChainContext toolChainContext)
   �� Unity.IL2CPP.Building.CppProgramBuilder.Build(IBuildStatistics& statistics)
   �� il2cpp.Program.DoRun(String[] args)
   �� il2cpp.Program.Run(String[] args)
   �� il2cpp.Program.Main(String[] args)

UnityEngine.Debug:LogError(Object)
UnityEditorInternal.Runner:RunProgram(Program, String, String, String, CompilerOutputParserBase) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:128)
UnityEditorInternal.Runner:RunManagedProgram(String, String, String, CompilerOutputParserBase, Action`1) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:73)
UnityEditorInternal.IL2CPPBuilder:RunIl2CppWithArguments(List`1, Action`1, String) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:376)
UnityEditorInternal.IL2CPPBuilder:ConvertPlayerDlltoCpp(String, String, String, Boolean) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:357)
UnityEditorInternal.IL2CPPBuilder:Run() (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:211)
UnityEditorInternal.IL2CPPUtils:RunIl2Cpp(String, String, IIl2CppPlatformProvider, Action`1, RuntimeClassRegistry) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:35)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) (at C:/buildslave/unity/build/Modules/IMGUI/GUIUtility.cs:179)

项目定义了 _getIPv6 方法,但并未使用,删除。

打包失败 4

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
IOException: Win32 IO returned 112. Path: Temp\StagingArea\libs\armeabi-v7a\libunity.so" or "C:\Demo\Export\Channel\src\main\jniLibs\armeabi-v7a\libunity.so
System.IO.File.Copy (System.String sourceFileName, System.String destFileName, System.Boolean overwrite) (at <e1319b7195c343e79b385cd3aa43f5dc>:0)
UnityEditor.FileUtil.UnityFileCopy (System.String from, System.String to, System.Boolean overwrite) (at C:/buildslave/unity/build/Editor/Mono/FileUtil.cs:210)
UnityEditor.FileUtil.CopyDirectoryFiltered (System.String source, System.String target, System.Boolean overwrite, System.Func`2[T,TResult] includeCallback, System.Boolean recursive) (at C:/buildslave/unity/build/Editor/Mono/FileUtil.cs:145)
UnityEditor.FileUtil.CopyDirectoryFiltered (System.String source, System.String target, System.Boolean overwrite, System.Func`2[T,TResult] includeCallback, System.Boolean recursive) (at C:/buildslave/unity/build/Editor/Mono/FileUtil.cs:159)
UnityEditor.FileUtil.CopyDirectoryFiltered (System.String source, System.String target, System.Boolean overwrite, System.String regExExcludeFilter, System.Boolean recursive) (at C:/buildslave/unity/build/Editor/Mono/FileUtil.cs:121)
UnityEditor.FileUtil.CopyDirectoryRecursiveFiltered (System.String source, System.String target, System.Boolean overwrite, System.String regExExcludeFilter) (at C:/buildslave/unity/build/Editor/Mono/FileUtil.cs:102)
UnityEditor.FileUtil.CopyDirectoryRecursive (System.String source, System.String target, System.Boolean overwrite, System.Boolean ignoreMeta) (at C:/buildslave/unity/build/Editor/Mono/FileUtil.cs:92)
UnityEditor.FileUtil.CopyDirectoryRecursive (System.String source, System.String target, System.Boolean overwrite) (at C:/buildslave/unity/build/Editor/Mono/FileUtil.cs:82)
UnityEditor.Android.AndroidProjectExport.CopyDir (System.String source, System.String target) (at <d4b1a1ed248c4d2aa353c9709b1b172c>:0)
UnityEditor.Android.AndroidProjectExportGradle.CopyMainProjectContents (System.String mainProjectPath, System.String libsProjectPath) (at <d4b1a1ed248c4d2aa353c9709b1b172c>:0)
UnityEditor.Android.AndroidProjectExportGradle.ExportWithCurrentSettings () (at <d4b1a1ed248c4d2aa353c9709b1b172c>:0)
UnityEditor.Android.AndroidProjectExport.Export (UnityEditor.Android.PostProcessor.PostProcessorContext context, System.String targetPath) (at <d4b1a1ed248c4d2aa353c9709b1b172c>:0)
UnityEditor.Android.PostProcessor.Tasks.ExportProject.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at <d4b1a1ed248c4d2aa353c9709b1b172c>:0)
UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at <d4b1a1ed248c4d2aa353c9709b1b172c>:0)
UnityEditor.Android.PostProcessAndroidPlayer.PostProcess (UnityEditor.BuildTarget target, System.String stagingAreaData, System.String stagingArea, System.String playerPackage, System.String installPath, System.String companyName, System.String productName, UnityEditor.BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.Build.Reporting.BuildReport report) (at <d4b1a1ed248c4d2aa353c9709b1b172c>:0)
UnityEditor.Android.AndroidBuildPostprocessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args, UnityEditor.BuildProperties& outProperties) (at <d4b1a1ed248c4d2aa353c9709b1b172c>:0)
UnityEditor.PostprocessBuildPlayer.Postprocess (UnityEditor.BuildTargetGroup targetGroup, UnityEditor.BuildTarget target, System.String installPath, System.String companyName, System.String productName, System.Int32 width, System.Int32 height, UnityEditor.BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.Build.Reporting.BuildReport report) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:288)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) (at C:/buildslave/unity/build/Modules/IMGUI/GUIUtility.cs:179)

导出工程时报 IO 错误 112,说明磁盘空间不足

iOS 打包与运行

  • 修正未正确调用指定版本 Unity
  • 无法加载资源,卡在登录界面
  • 资源下载失败时报告下载地址

完善

Shader API 升级

1
2
Use of UNITY_MATRIX_MV is detected. To transform a vertex into view space, consider using UnityObjectToViewPos for better performance.
Use of UNITY_MATRIX_MV is detected. To transform a vertex into view space, consider using UnityObjectToViewPos for better performance.