Hi,
My game is building fine with mono backend. However, for security purpose, I want to use il2cpp as I heard that hacking mono games is very easy and only requires 1 line of code. (is it true?). I know we can’t prevent the hackers from hacking the game completely but we can make it a bit difficult. That’s why I am trying to build using il2cpp. I’ve got three errors during the build.
First error
IL2CPP error for type ‘UnityEngine.Purchasing.Security.AppleInAppPurchaseReceipt’ in assembly ‘C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\assets\bin\Data\Managed\Security.dll’
Additional information: Build a development build for more information. Object reference not set to an instance of an object.
Second error
Failed running C:\Program Files\Unity\Editor\Data\il2cpp/build/il2cpp.exe --convert-to-cpp --emit-null-checks --enable-array-bounds-check --compile-cpp --libil2cpp-static --platform=“Android” --architecture=“ARMv7” --configuration=“Release” --outputpath=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp/StagingArea\assets\bin\Data\Native\armeabi-v7a\libil2cpp.so” --cachedirectory=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Assets..\Library\il2cpp_android_armeabi-v7a/il2cpp_cache” --additional-include-directories=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\bdwgc/include” --additional-include-directories=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\libil2cpp/include” --tool-chain-path=“C:/Users/Wahaj/AppData/Roaming/IDM/android-ndk-r10e” --map-file-parser=“C:\Program Files\Unity\Editor\Data\Tools\MapFileParser\MapFileParser.exe” --assembly=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\assets\bin\Data\Managed\Assembly-CSharp-firstpass.dll” --assembly=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\assets\bin\Data\Managed\Assembly-CSharp.dll” --assembly=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\assets\bin\Data\Managed\UnityEngine.UI.dll” --assembly=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\assets\bin\Data\Managed\UnityEngine.Analytics.dll” --assembly=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\assets\bin\Data\Managed\UnityEngine.dll” --assembly=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\assets\bin\Data\Managed\Mono.Security.dll” --assembly=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\assets\bin\Data\Managed\mscorlib.dll” --assembly=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\assets\bin\Data\Managed\Stores.dll” --assembly=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\assets\bin\Data\Managed\System.dll” --assembly=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\assets\bin\Data\Managed\UnityEngine.Purchasing.dll” --generatedcppdir=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\Il2Cpp\il2cppOutput”
stdout:
IL2CPP error for type ‘UnityEngine.Purchasing.Security.AppleInAppPurchaseReceipt’ in assembly ‘C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\assets\bin\Data\Managed\Security.dll’
Additional information: Build a development build for more information. Object reference not set to an instance of an object.
il2cpp.exe didn’t catch exception: System.NullReferenceException: Object reference not set to an instance of an object.
at Unity.IL2CPP.MethodBodyWriter.GetMethodCallExpression(MethodReference callingMethod, MethodReference methodToCall, MethodReference unresolvedMethodtoCall, TypeResolver typeResolverForMethodToCall, MethodCallType callType, IRuntimeMetadataAccess runtimeMetadataAccess, VTableBuilder vTableBuilder, IEnumerable1 argumentArray, Boolean useArrayBoundsCheck, Func
2 addUniqueSuffix)
at Unity.IL2CPP.MethodBodyWriter.CallExpressionFor(MethodReference callingMethod, MethodReference unresolvedMethodToCall, MethodCallType callType, List1 poppedValues, Func
2 addUniqueSuffix, Boolean emitNullCheckForInvocation)
at Unity.IL2CPP.MethodBodyWriter.ProcessInstruction(Node node, InstructionBlock block, Instruction& ins)
at Unity.IL2CPP.MethodBodyWriter.GenerateCodeRecursive(Node node)
at Unity.IL2CPP.MethodBodyWriter.Generate()
at Unity.IL2CPP.MethodWriter.WriteMethodWithMetadataInitialization(CppCodeWriter writer, String methodSignature, String methodFullName, Action3 writeMethodBody, String uniqueIdentifier) at Unity.IL2CPP.MethodWriter.WriteMethodDefinition(MethodReference method, IMethodCollector methodCollector, IMethodVerifier methodVerifier) at Unity.IL2CPP.MethodWriter.WriteMethodDefinitions(IMethodCollector methodCollector, IMethodVerifier methodVerifier) at Unity.IL2CPP.SourceWriter.WriteMethodSourceFiles(NPath outputDirectory, String fileName, IEnumerable
1 typeList, IMethodCollector methodCollector, IMethodVerifier methodVerifier, IInteropDataCollector interopDataCollector, SymbolsCollector symbolsCollector, Boolean writeMarshalingDefinitions)
at Unity.IL2CPP.SourceWriter.Write(AssemblyDefinition assemblyDefinition, ReadOnlyInflatedCollectionCollector allGenerics, NPath outputDir, TypeDefinition[ ] typeList, AttributeCollection attributeCollection, MethodCollector methodCollector, IMethodVerifier methodVerifier, IInteropDataCollector interopDataCollector, IMetadataCollection metadataCollection, SymbolsCollector symbolsCollector)
at Unity.IL2CPP.AssemblyConverter.Convert(AssemblyDefinition assemblyDefinition, ReadOnlyInflatedCollectionCollector allGenerics, AttributeCollection attributeCollection, MethodCollector methodCollector, IMethodVerifier methodVerifier, IInteropDataCollector interopDataCollector, IMetadataCollection metadataCollection, SymbolsCollector symbolsCollector)
at Unity.IL2CPP.AssemblyConverter.Apply()
at Unity.IL2CPP.AssemblyConverter.ConvertAssemblies(NPath[ ] assemblies, NPath outputDir, NPath dataFolder, NPath symbolsFolder)
at Unity.IL2CPP.AssemblyConverter.ConvertAssemblies(IEnumerable1 assemblyDirectories, IEnumerable
1 explicitAssemblies, NPath outputDir, NPath dataFolder, NPath symbolsFolder)
at il2cpp.Program.DoRun(String[ ] args)
at il2cpp.Program.Run(String[ ] args)
at il2cpp.Program.Main(String[ ] args)
stderr:
Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object.
at Unity.IL2CPP.MethodBodyWriter.GetMethodCallExpression(MethodReference callingMethod, MethodReference methodToCall, MethodReference unresolvedMethodtoCall, TypeResolver typeResolverForMethodToCall, MethodCallType callType, IRuntimeMetadataAccess runtimeMetadataAccess, VTableBuilder vTableBuilder, IEnumerable1 argumentArray, Boolean useArrayBoundsCheck, Func
2 addUniqueSuffix)
at Unity.IL2CPP.MethodBodyWriter.CallExpressionFor(MethodReference callingMethod, MethodReference unresolvedMethodToCall, MethodCallType callType, List1 poppedValues, Func
2 addUniqueSuffix, Boolean emitNullCheckForInvocation)
at Unity.IL2CPP.MethodBodyWriter.ProcessInstruction(Node node, InstructionBlock block, Instruction& ins)
at Unity.IL2CPP.MethodBodyWriter.GenerateCodeRecursive(Node node)
at Unity.IL2CPP.MethodBodyWriter.Generate()
at Unity.IL2CPP.MethodWriter.WriteMethodWithMetadataInitialization(CppCodeWriter writer, String methodSignature, String methodFullName, Action3 writeMethodBody, String uniqueIdentifier) at Unity.IL2CPP.MethodWriter.WriteMethodDefinition(MethodReference method, IMethodCollector methodCollector, IMethodVerifier methodVerifier) at Unity.IL2CPP.MethodWriter.WriteMethodDefinitions(IMethodCollector methodCollector, IMethodVerifier methodVerifier) at Unity.IL2CPP.SourceWriter.WriteMethodSourceFiles(NPath outputDirectory, String fileName, IEnumerable
1 typeList, IMethodCollector methodCollector, IMethodVerifier methodVerifier, IInteropDataCollector interopDataCollector, SymbolsCollector symbolsCollector, Boolean writeMarshalingDefinitions)
at Unity.IL2CPP.SourceWriter.Write(AssemblyDefinition assemblyDefinition, ReadOnlyInflatedCollectionCollector allGenerics, NPath outputDir, TypeDefinition[ ] typeList, AttributeCollection attributeCollection, MethodCollector methodCollector, IMethodVerifier methodVerifier, IInteropDataCollector interopDataCollector, IMetadataCollection metadataCollection, SymbolsCollector symbolsCollector)
at Unity.IL2CPP.AssemblyConverter.Convert(AssemblyDefinition assemblyDefinition, ReadOnlyInflatedCollectionCollector allGenerics, AttributeCollection attributeCollection, MethodCollector methodCollector, IMethodVerifier methodVerifier, IInteropDataCollector interopDataCollector, IMetadataCollection metadataCollection, SymbolsCollector symbolsCollector)
at Unity.IL2CPP.AssemblyConverter.Apply()
at Unity.IL2CPP.AssemblyConverter.ConvertAssemblies(NPath[ ] assemblies, NPath outputDir, NPath dataFolder, NPath symbolsFolder)
at Unity.IL2CPP.AssemblyConverter.ConvertAssemblies(IEnumerable1 assemblyDirectories, IEnumerable
1 explicitAssemblies, NPath outputDir, NPath dataFolder, NPath symbolsFolder)
at il2cpp.Program.DoRun(String[ ] args)
at il2cpp.Program.Run(String[ ] args)
at il2cpp.Program.Main(String[ ] args)
UnityEngine.Debug:LogError(Object)
UnityEditorInternal.Runner:RunManagedProgram(String, String, String, CompilerOutputParserBase, Action1) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:96) UnityEditorInternal.IL2CPPBuilder:RunIl2CppWithArguments(List
1, Action1, String) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:313) UnityEditorInternal.IL2CPPBuilder:ConvertPlayerDlltoCpp(ICollection
1, String, String) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:304)
UnityEditorInternal.IL2CPPBuilder:Run() (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:151)
UnityEditorInternal.IL2CPPUtils:RunIl2Cpp(String, String, IIl2CppPlatformProvider, Action`1, RuntimeClassRegistry, Boolean) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:34)
UnityEditor.HostView:OnGUI()
Third error
Failed running C:\Program Files\Unity\Editor\Data\il2cpp/build/il2cpp.exe --convert-to-cpp --emit-null-checks --enable-array-bounds-check --compile-cpp --libil2cpp-static --platform=“Android” --architecture=“ARMv7” --configuration=“Release” --outputpath=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp/StagingArea\assets\bin\Data\Native\armeabi-v7a\libil2cpp.so” --cachedirectory=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Assets..\Library\il2cpp_android_armeabi-v7a/il2cpp_cache” --additional-include-directories=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\bdwgc/include” --additional-include-directories=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\libil2cpp/include” --tool-chain-path=“C:/Users/Wahaj/AppData/Roaming/IDM/android-ndk-r10e” --map-file-parser=“C:\Program Files\Unity\Editor\Data\Tools\MapFileParser\MapFileParser.exe” --assembly=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\assets\bin\Data\Managed\Assembly-CSharp-firstpass.dll” --assembly=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\assets\bin\Data\Managed\Assembly-CSharp.dll” --assembly=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\assets\bin\Data\Managed\UnityEngine.UI.dll” --assembly=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\assets\bin\Data\Managed\UnityEngine.Analytics.dll” --assembly=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\assets\bin\Data\Managed\UnityEngine.dll” --assembly=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\assets\bin\Data\Managed\Mono.Security.dll” --assembly=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\assets\bin\Data\Managed\mscorlib.dll” --assembly=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\assets\bin\Data\Managed\Stores.dll” --assembly=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\assets\bin\Data\Managed\System.dll” --assembly=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\assets\bin\Data\Managed\UnityEngine.Purchasing.dll” --generatedcppdir=“C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\Il2Cpp\il2cppOutput”
stdout:
IL2CPP error for type ‘UnityEngine.Purchasing.Security.AppleInAppPurchaseReceipt’ in assembly ‘C:\Users\Wahaj\Desktop\New folder (3)\Size Fixed (Before Patch1)\Claim Resolved\Temp\StagingArea\assets\bin\Data\Managed\Security.dll’
Additional information: Build a development build for more information. Object reference not set to an instance of an object.
il2cpp.exe didn’t catch exception: System.NullReferenceException: Object reference not set to an instance of an object.
at Unity.IL2CPP.MethodBodyWriter.GetMethodCallExpression(MethodReference callingMethod, MethodReference methodToCall, MethodReference unresolvedMethodtoCall, TypeResolver typeResolverForMethodToCall, MethodCallType callType, IRuntimeMetadataAccess runtimeMetadataAccess, VTableBuilder vTableBuilder, IEnumerable1 argumentArray, Boolean useArrayBoundsCheck, Func
2 addUniqueSuffix)
at Unity.IL2CPP.MethodBodyWriter.CallExpressionFor(MethodReference callingMethod, MethodReference unresolvedMethodToCall, MethodCallType callType, List1 poppedValues, Func
2 addUniqueSuffix, Boolean emitNullCheckForInvocation)
at Unity.IL2CPP.MethodBodyWriter.ProcessInstruction(Node node, InstructionBlock block, Instruction& ins)
at Unity.IL2CPP.MethodBodyWriter.GenerateCodeRecursive(Node node)
at Unity.IL2CPP.MethodBodyWriter.Generate()
at Unity.IL2CPP.MethodWriter.WriteMethodWithMetadataInitialization(CppCodeWriter writer, String methodSignature, String methodFullName, Action3 writeMethodBody, String uniqueIdentifier) at Unity.IL2CPP.MethodWriter.WriteMethodDefinition(MethodReference method, IMethodCollector methodCollector, IMethodVerifier methodVerifier) at Unity.IL2CPP.MethodWriter.WriteMethodDefinitions(IMethodCollector methodCollector, IMethodVerifier methodVerifier) at Unity.IL2CPP.SourceWriter.WriteMethodSourceFiles(NPath outputDirectory, String fileName, IEnumerable
1 typeList, IMethodCollector methodCollector, IMethodVerifier methodVerifier, IInteropDataCollector interopDataCollector, SymbolsCollector symbolsCollector, Boolean writeMarshalingDefinitions)
at Unity.IL2CPP.SourceWriter.Write(AssemblyDefinition assemblyDefinition, ReadOnlyInflatedCollectionCollector allGenerics, NPath outputDir, TypeDefinition[ ] typeList, AttributeCollection attributeCollection, MethodCollector methodCollector, IMethodVerifier methodVerifier, IInteropDataCollector interopDataCollector, IMetadataCollection metadataCollection, SymbolsCollector symbolsCollector)
at Unity.IL2CPP.AssemblyConverter.Convert(AssemblyDefinition assemblyDefinition, ReadOnlyInflatedCollectionCollector allGenerics, AttributeCollection attributeCollection, MethodCollector methodCollector, IMethodVerifier methodVerifier, IInteropDataCollector interopDataCollector, IMetadataCollection metadataCollection, SymbolsCollector symbolsCollector)
at Unity.IL2CPP.AssemblyConverter.Apply()
at Unity.IL2CPP.AssemblyConverter.ConvertAssemblies(NPath[ ] assemblies, NPath outputDir, NPath dataFolder, NPath symbolsFolder)
at Unity.IL2CPP.AssemblyConverter.ConvertAssemblies(IEnumerable1 assemblyDirectories, IEnumerable
1 explicitAssemblies, NPath outputDir, NPath dataFolder, NPath symbolsFolder)
at il2cpp.Program.DoRun(String[ ] args)
at il2cpp.Program.Run(String[ ] args)
at il2cpp.Program.Main(String[ ] args)
stderr:
Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object.
at Unity.IL2CPP.MethodBodyWriter.GetMethodCallExpression(MethodReference callingMethod, MethodReference methodToCall, MethodReference unresolvedMethodtoCall, TypeResolver typeResolverForMethodToCall, MethodCallType callType, IRuntimeMetadataAccess runtimeMetadataAccess, VTableBuilder vTableBuilder, IEnumerable1 argumentArray, Boolean useArrayBoundsCheck, Func
2 addUniqueSuffix)
at Unity.IL2CPP.MethodBodyWriter.CallExpressionFor(MethodReference callingMethod, MethodReference unresolvedMethodToCall, MethodCallType callType, List1 poppedValues, Func
2 addUniqueSuffix, Boolean emitNullCheckForInvocation)
at Unity.IL2CPP.MethodBodyWriter.ProcessInstruction(Node node, InstructionBlock block, Instruction& ins)
at Unity.IL2CPP.MethodBodyWriter.GenerateCodeRecursive(Node node)
at Unity.IL2CPP.MethodBodyWriter.Generate()
at Unity.IL2CPP.MethodWriter.WriteMethodWithMetadataInitialization(CppCodeWriter writer, String methodSignature, String methodFullName, Action3 writeMethodBody, String uniqueIdentifier) at Unity.IL2CPP.MethodWriter.WriteMethodDefinition(MethodReference method, IMethodCollector methodCollector, IMethodVerifier methodVerifier) at Unity.IL2CPP.MethodWriter.WriteMethodDefinitions(IMethodCollector methodCollector, IMethodVerifier methodVerifier) at Unity.IL2CPP.SourceWriter.WriteMethodSourceFiles(NPath outputDirectory, String fileName, IEnumerable
1 typeList, IMethodCollector methodCollector, IMethodVerifier methodVerifier, IInteropDataCollector interopDataCollector, SymbolsCollector symbolsCollector, Boolean writeMarshalingDefinitions)
at Unity.IL2CPP.SourceWriter.Write(AssemblyDefinition assemblyDefinition, ReadOnlyInflatedCollectionCollector allGenerics, NPath outputDir, TypeDefinition[ ] typeList, AttributeCollection attributeCollection, MethodCollector methodCollector, IMethodVerifier methodVerifier, IInteropDataCollector interopDataCollector, IMetadataCollection metadataCollection, SymbolsCollector symbolsCollector)
at Unity.IL2CPP.AssemblyConverter.Convert(AssemblyDefinition assemblyDefinition, ReadOnlyInflatedCollectionCollector allGenerics, AttributeCollection attributeCollection, MethodCollector methodCollector, IMethodVerifier methodVerifier, IInteropDataCollector interopDataCollector, IMetadataCollection metadataCollection, SymbolsCollector symbolsCollector)
at Unity.IL2CPP.AssemblyConverter.Apply()
at Unity.IL2CPP.AssemblyConverter.ConvertAssemblies(NPath[ ] assemblies, NPath outputDir, NPath dataFolder, NPath symbolsFolder)
at Unity.IL2CPP.AssemblyConverter.ConvertAssemblies(IEnumerable1 assemblyDirectories, IEnumerable
1 explicitAssemblies, NPath outputDir, NPath dataFolder, NPath symbolsFolder)
at il2cpp.Program.DoRun(String[ ] args)
at il2cpp.Program.Run(String[ ] args)
at il2cpp.Program.Main(String[ ] args)
UnityEngine.Debug:LogError(Object)
UnityEditorInternal.Runner:RunManagedProgram(String, String, String, CompilerOutputParserBase, Action1) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:96) UnityEditorInternal.IL2CPPBuilder:RunIl2CppWithArguments(List
1, Action1, String) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:313) UnityEditorInternal.IL2CPPBuilder:ConvertPlayerDlltoCpp(ICollection
1, String, String) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:304)
UnityEditorInternal.IL2CPPBuilder:Run() (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:151)
UnityEditorInternal.IL2CPPUtils:RunIl2Cpp(String, String, IIl2CppPlatformProvider, Action`1, RuntimeClassRegistry, Boolean) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:34)
UnityEditor.HostView:OnGUI()
Please help me solve these issues. I’m not very good at reading these long errors. I am using Unity 5.6.1