【问题标题】:Unity Android build failure: The specified executable is not a valid application for this OS platformUnity Android 构建失败:指定的可执行文件不是此 OS 平台的有效应用程序
【发布时间】:2019-10-26 06:34:14
【问题描述】:

在最后一步为 Android 失败构建 Unity 项目,这是我在控制台中得到的:

Failed running C:\Program Files\Unity\Hub\Editor\2019.2.4f1\Editor\Data\il2cpp/build/il2cpp.exe ... il2cpp.exe didn't catch exception: System.AggregateException: One or more errors occurred. ---> System.ComponentModel.Win32Exception: The specified executable is not a valid application for this OS platform.

如何了解问题所在并解决问题?

完整的错误文本:

Failed running C:\Program Files\Unity\Hub\Editor\2019.2.4f1\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="D:\Projects\Unity3d\MyGame\Temp\StagingArea\assets\bin\Data\Native\armeabi-v7a\libil2cpp.so" --cachedirectory="D:\Projects\Unity3d\MyGame\Assets\..\Library\il2cpp_android_armeabi-v7a/il2cpp_cache" --additional-include-directories="C:/Program Files/Unity/Hub/Editor/2019.2.4f1/Editor/Data/PlaybackEngines/AndroidPlayer/Tools\bdwgc/include" --additional-include-directories="C:/Program Files/Unity/Hub/Editor/2019.2.4f1/Editor/Data/PlaybackEngines/AndroidPlayer/Tools\libil2cpp/include" --tool-chain-path="C:/Program Files/Unity/Hub/Editor/2019.2.4f1/Editor/Data/PlaybackEngines/AndroidPlayer/NDK" --profiler-report --map-file-parser="C:/Program Files/Unity/Hub/Editor/2019.2.4f1/Editor/Data/Tools/MapFileParser/MapFileParser.exe" --directory=D:/Projects/Unity3d/MyGame/Temp/StagingArea/assets/bin/Data/Managed --generatedcppdir=D:/Projects/Unity3d/MyGame/Temp/StagingArea/Il2Cpp/il2cppOutput stdout: Building libil2cpp.so with AndroidToolChain Output directory: D:\Projects\Unity3d\MyGame\Temp\StagingArea\assets\bin\Data\Native\armeabi-v7a Cache directory: D:\Projects\Unity3d\MyGame\Library\il2cpp_android_armeabi-v7a\il2cpp_cache il2cpp.exe didn't catch exception: System.AggregateException: One or more errors occurred. ---> System.ComponentModel.Win32Exception: The specified executable is not a valid application for this OS platform. at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) at Unity.IL2CPP.Shell.Execute(ExecuteArgs executeArgs, IExecuteController controller) at Unity.IL2CPP.Building.CppProgramBuilder.ProvideObjectFile(IntermediateObjectFileCompilationData data) at Unity.IL2CPP.Building.ParallelFor.c__DisplayClass1_0`2.b__0(Object o) --- End of inner exception stack trace --- at Unity.IL2CPP.Building.ParallelFor.RunWithResult[D,T](D[] data, Func`2 action) at Unity.IL2CPP.Building.CppProgramBuilder.BuildAllCppFiles(IEnumerable`1 sourceFilesToCompile, IBuildStatisticsCollector statisticsCollector) at Unity.IL2CPP.Building.CppProgramBuilder.Build(IBuildStatistics& statistics) at il2cpp.Program.DoRun(String[] args) at il2cpp.Program.Run(String[] args) at il2cpp.Program.Main(String[] args) ---> (Inner Exception #0) System.ComponentModel.Win32Exception (0x80004005): The specified executable is not a valid application for this OS platform. at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) at Unity.IL2CPP.Shell.Execute(ExecuteArgs executeArgs, IExecuteController controller) at Unity.IL2CPP.Building.CppProgramBuilder.ProvideObjectFile(IntermediateObjectFileCompilationData data) at Unity.IL2CPP.Building.ParallelFor.c__DisplayClass1_0`2.b__0(Object o) (Inner Exception #1) System.ComponentModel.Win32Exception (0x80004005): The specified executable is not a valid application for this OS platform. at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) at Unity.IL2CPP.Shell.Execute(ExecuteArgs executeArgs, IExecuteController controller) at Unity.IL2CPP.Building.CppProgramBuilder.ProvideObjectFile(IntermediateObjectFileCompilationData data) at Unity.IL2CPP.Building.ParallelFor.c__DisplayClass1_0`2.b__0(Object o) (Inner Exception #2) System.ComponentModel.Win32Exception (0x80004005): The specified executable is not a valid application for this OS platform. at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) at Unity.IL2CPP.Shell.Execute(ExecuteArgs executeArgs, IExecuteController controller) at Unity.IL2CPP.Building.CppProgramBuilder.ProvideObjectFile(IntermediateObjectFileCompilationData data) at Unity.IL2CPP.Building.ParallelFor.c__DisplayClass1_0`2.b__0(Object o) (Inner Exception #3) System.ComponentModel.Win32Exception (0x80004005): The specified executable is not a valid application for this OS platform. at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) at Unity.IL2CPP.Shell.Execute(ExecuteArgs executeArgs, IExecuteController controller) at Unity.IL2CPP.Building.CppProgramBuilder.ProvideObjectFile(IntermediateObjectFileCompilationData data) at Unity.IL2CPP.Building.ParallelFor.c__DisplayClass1_0`2.b__0(Object o) (Inner Exception #4) System.ComponentModel.Win32Exception (0x80004005): The specified executable is not a valid application for this OS platform. at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) at Unity.IL2CPP.Shell.Execute(ExecuteArgs executeArgs, IExecuteController controller) at Unity.IL2CPP.Building.CppProgramBuilder.ProvideObjectFile(IntermediateObjectFileCompilationData data) at Unity.IL2CPP.Building.ParallelFor.c__DisplayClass1_0`2.b__0(Object o) (Inner Exception #5) System.ComponentModel.Win32Exception (0x80004005): The specified executable is not a valid application for this OS platform. at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) at Unity.IL2CPP.Shell.Execute(ExecuteArgs executeArgs, IExecuteController controller) at Unity.IL2CPP.Building.CppProgramBuilder.ProvideObjectFile(IntermediateObjectFileCompilationData data) at Unity.IL2CPP.Building.ParallelFor.c__DisplayClass1_0`2.b__0(Object o) (Inner Exception #6) System.ComponentModel.Win32Exception (0x80004005): The specified executable is not a valid application for this OS platform. at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) at Unity.IL2CPP.Shell.Execute(ExecuteArgs executeArgs, IExecuteController controller) at Unity.IL2CPP.Building.CppProgramBuilder.ProvideObjectFile(IntermediateObjectFileCompilationData data) at Unity.IL2CPP.Building.ParallelFor.c__DisplayClass1_0`2.b__0(Object o) (Inner Exception #7) System.ComponentModel.Win32Exception (0x80004005): The specified executable is not a valid application for this OS platform. at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) at Unity.IL2CPP.Shell.Execute(ExecuteArgs executeArgs, IExecuteController controller) at Unity.IL2CPP.Building.CppProgramBuilder.ProvideObjectFile(IntermediateObjectFileCompilationData data) at Unity.IL2CPP.Building.ParallelFor.c__DisplayClass1_0`2.b__0(Object o) System.ComponentModel.Win32Exception: The specified executable is not a valid application for this OS platform. at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) at Unity.IL2CPP.Shell.Execute(ExecuteArgs executeArgs, IExecuteController controller) at Unity.IL2CPP.Building.CppProgramBuilder.ProvideObjectFile(IntermediateObjectFileCompilationData data) at Unity.IL2CPP.Building.ParallelFor.c__DisplayClass1_0`2.b__0(Object o) --- End of inner exception stack trace --- at Unity.IL2CPP.Building.ParallelFor.RunWithResult[D,T](D[] data, Func`2 action) at Unity.IL2CPP.Building.CppProgramBuilder.BuildAllCppFiles(IEnumerable`1 sourceFilesToCompile, IBuildStatisticsCollector statisticsCollector) at Unity.IL2CPP.Building.CppProgramBuilder.Build(IBuildStatistics& statistics) at il2cpp.Program.DoRun(String[] args) at il2cpp.Program.Run(String[] args) at 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:126) UnityEditorInternal.Runner:RunManagedProgram(String, String, String, CompilerOutputParserBase, Action`1) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:71) UnityEditorInternal.IL2CPPBuilder:RunIl2CppWithArguments(List`1, Action`1, String) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:503) UnityEditorInternal.IL2CPPBuilder:ConvertPlayerDlltoCpp(String, String, String, Boolean) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:484) UnityEditorInternal.IL2CPPBuilder:Run() (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:334) UnityEditorInternal.IL2CPPUtils:RunIl2Cpp(String, String, IIl2CppPlatformProvider, Action`1, RuntimeClassRegistry) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:63) UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

【问题讨论】:

  • 你的 NDK 版本是多少?
  • Pkg.Revision = 16.1.4479499 来自 source.properties 文件。一切都通过 Unity Hub 安装。

标签: android windows unity3d build-error


【解决方案1】:

内置unity ndk本身有bug,需要从google android开发者页面安装稳定版:Android NDK, Revision 16b (December 2017)

【讨论】:

  • 我下载并解压到一个文件夹中。然后在 Unity -> Preferences -> External tools 中关闭 "Android NDK Installed with my Unity" 复选框并选择下载文件夹的路径。它没有帮助,错误消息仍然相同。
  • @Sergey,那么这是 unity 本身的一个 bug,尝试升级到最新的稳定版本。
  • 有几个人在做这个项目,但我是唯一遇到这个问题的人。他们不会同意更改版本。
  • @Sergey 你有没有尝试编译一个统一的默认空项目?
  • 我设法以稍微不同的方式解决了这个问题。非常感谢您的帮助!
【解决方案2】:

我尝试安装/重新安装所有类型的 android 工具、Unity 编辑器、Visual Studio(但我没有尝试重新安装 Windows :)。最后,为了解决另一个问题,我尝试更改Edit -> Project Settings -> Player -> Other Settings -> Configuration -> Scripting Backed,它从IL2CCP 更改为Mono,它解决了我的构建错误(并且构建过程变得更快)。

我仍然不知道为什么我是项目团队中唯一一个在选择IL2CCP时必须处理这个问题的人,但至少现在我可以调试项目了。

如果您对和这里有什么区别感兴趣,这里是good answers 关于这个话题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 2016-10-11
    • 2018-03-30
    相关资源
    最近更新 更多