I have an application built in Unity 2017.4.15f1 (now migrated to 2018.3.0f2) using Vuforia version 7 (now migrated to 8.1) that I'm attempting to build with arm64 such that I can publish it to Google Play. I was able to build the application with arm64 on Unity 2017, but the camera was just a black screen when testing. I looked around and found out that 64-bit hadn't been properly supported until Vuforia v8 in Unity 2018.3. After migrating my project and attempting to build with arm64, I was greeted by this error message:
Win32Exception: ApplicationName='C:\Program Files\2018.3.0f2\Editor\Data\il2cpp\build/UnityLinker.exe', CommandLine='-out="C:\Users\pmerritt\Documents\VuforiaMobileAppProject\Temp\StagingArea\assets\bin\Data\Managed\tempStrip" -x="C:\Program Files\2018.3.0f2\Editor\Data\PlaybackEngines\AndroidPlayer\Whitelists\Core.xml" -x "C:\Users\pmerritt\Documents\VuforiaMobileAppProject\Temp\StagingArea\assets\bin\Data\Managed\..\platform_native_link.xml" -x "C:\Users\pmerritt\AppData\Local\Temp\1\tmp58309e30.tmp" -x "C:\Users\pmerritt\AppData\Local\Temp\1\tmp5bb9a1b4.tmp" -d "C:\Users\pmerritt\Documents\VuforiaMobileAppProject\Temp\StagingArea\assets\bin\Data\Managed" --include-unity-root-assembly="C:\Users\pmerritt\Documents\VuforiaMobileAppProject\Temp\StagingArea\assets\bin\Data\Managed\Assembly-CSharp.dll" --include-unity-root-assembly="C:\Users\pmerritt\Documents\VuforiaMobileAppProject\Temp\StagingArea\assets\bin\Data\Managed\Pcx.Editor.dll" --include-unity-root-assembly="C:\Users\pmerritt\Documents\VuforiaMobileAppProject\Temp\StagingArea\assets\bin\Data\Managed\VuforiaScripts.dll" --include-unity-root-assembly="C:\Users\pmerritt\Documents\VuforiaMobileAppProject\Temp\StagingArea\assets\bin\Data\Managed\Pcx.dll" --include-unity-root-assembly="C:\Users\pmerritt\Documents\VuforiaMobileAppProject\Temp\StagingArea\assets\bin\Data\Managed\UnityEngine.UI.dll" --include-unity-root-assembly="C:\Users\pmerritt\Documents\VuforiaMobileAppProject\Temp\StagingArea\assets\bin\Data\Managed\Vuforia.UnityExtensions.dll" --include-unity-root-assembly="C:\Users\pmerritt\Documents\VuforiaMobileAppProject\Temp\StagingArea\assets\bin\Data\Managed\TextMeshPro-2017.3-Runtime.dll" --dotnetruntime=il2cpp --dotnetprofile=legacyunity --use-editor-options --include-directory=C:\Users\pmerritt\Documents\VuforiaMobileAppProject\Temp\StagingArea\assets\bin\Data\Managed --rule-set=Conservative', CurrentDirectory='C:\Users\pmerritt\Documents\VuforiaMobileAppProject\Temp\StagingArea\assets\bin\Data\Managed'
System.Diagnostics.Process.Start_noshell (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process)
System.Diagnostics.Process.Start_common (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process)
System.Diagnostics.Process.Start ()
(wrapper remoting-invoke-with-check) System.Diagnostics.Process:Start ()
UnityEditor.Utils.Program.Start (System.EventHandler exitCallback) (at C:/buildslave/unity/build/Editor/Mono/Utils/Program.cs:44)
UnityEditor.Utils.Program.Start () (at C:/buildslave/unity/build/Editor/Mono/Utils/Program.cs:28)
UnityEditorInternal.Runner.RunProgram (UnityEditor.Utils.Program p, System.String exe, System.String args, System.String workingDirectory, UnityEditor.Scripting.Compilers.CompilerOutputParserBase parser) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:106)
UnityEditorInternal.Runner.RunManagedProgram (System.String exe, System.String args, System.String workingDirectory, UnityEditor.Scripting.Compilers.CompilerOutputParserBase parser, System.Action`1 setupStartInfo) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:73)
UnityEditorInternal.AssemblyStripper.RunAssemblyLinker (IEnumerable`1 args, System.String& out, System.String& err, System.String linkerPath, System.String workingDirectory) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:192)
UnityEditorInternal.AssemblyStripper.StripAssembliesTo (System.String[] assemblies, System.String[] searchDirs, System.String outputFolder, System.String workingDirectory, System.String& output, System.String& error, System.String linkerPath, IIl2CppPlatformProvider platformProvider, IEnumerable`1 additionalBlacklist, BuildTargetGroup buildTargetGroup, ManagedStrippingLevel managedStrippingLevel) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:124)
UnityEditorInternal.AssemblyStripper.RunAssemblyStripper (IEnumerable assemblies, System.String managedAssemblyFolderPath, System.String[] assembliesToStrip, System.String[] searchDirs, System.String monoLinkerPath, IIl2CppPlatformProvider platformProvider, UnityEditor.RuntimeClassRegistry rcr, ManagedStrippingLevel managedStrippingLevel) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:323)
UnityEditorInternal.AssemblyStripper.StripAssemblies (System.String managedAssemblyFolderPath, IIl2CppPlatformProvider platformProvider, UnityEditor.RuntimeClassRegistry rcr, ManagedStrippingLevel 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 (System.String tempFolder, System.String stagingAreaData, IIl2CppPlatformProvider platformProvider, System.Action`1 modifyOutputBeforeCompile, UnityEditor.RuntimeClassRegistry runtimeClassRegistry) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:35)
UnityEditor.Android.PostProcessor.Tasks.RunIl2Cpp.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessAndroidPlayer.PostProcess (BuildTarget target, System.String stagingAreaData, System.String stagingArea, System.String playerPackage, System.String installPath, System.String companyName, System.String productName, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.Build.Reporting.BuildReport report)
UnityEditor.Android.AndroidBuildPostprocessor.PostProcess (BuildPostProcessArgs args, UnityEditor.BuildProperties& outProperties)
UnityEditor.PostprocessBuildPlayer.Postprocess (BuildTargetGroup targetGroup, BuildTarget target, System.String installPath, System.String companyName, System.String productName, Int32 width, Int32 height, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.Build.Reporting.BuildReport report) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:286)UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
I've tried multiple later versions of Unity and Vuforia, reinstalling Android SDK and NDKs, changing my Api compatibility level and scripting runtime versions, and even trying non-64-bit architectures. But this error seems to persist on 32-bit builds as well! Let me know if you know how to solve this issue or know of a good work-around of some kind, because I'm stuck. Thanks!
Hi mcotora,
I was able to get it working finally!
I think that's it in terms of steps I had to take. Previous attempts of migrating the project to 2019 put me into a conflict where Vuforia used to place all files and libraries in Assets but 2019 installs them in Packages. By manually removing the folder from Assets, Unity is forced to rely on the newer version in Packages with no conflicts. I think this was the big part I glossed over on previous attempts. I've successfully built for 32 and 64-bit architectures.
Another thing to note is I had a huge dip in performance with my specific application. One of my particle systems tanked the framerate from 60fps to 10fps in this new 64-bit build. I wasn't able to verify what among the many changed settings caused it, but I was able to reduce the impact of the particle system to a dip in about 5fps at worst. Be on the lookout for any optimization needs as a result of the changes!