Unity2020打包安卓IL2CPP无SO,2021版本如何解决?

摘要:关于Unity2020版本打包安卓工程IL2CPP没有SO的解决方案 2022.09.27增加Unity2021版本打包IL2CPP的说明 升级2022.1.115版本后要注意的: 添加到build.gradle里的BuildIL2Cpp生
关于Unity2020版本打包安卓工程IL2CPP没有SO的解决方案 ---------------2022.09.27增加Unity2021版本打包IL2CPP的说明----------------------------------------- 升级2022.1.115版本后要注意的: 添加到build.gradle里的BuildIL2Cpp生成.so库的任务需要修改路径,因为deploy下面的.netcoreapp3.1文件夹没了 commandLine(workingDir + "/src/main/Il2CppOutputProject/IL2CPP/build/deploy/il2cpp.exe", 注释掉下面这句,因为没了这个文件。 "--map-file-parser=" + workingDir + "/src/main/Il2CppOutputProject/IL2CPP/MapFileParser/MapFileParser.exe", ---------------2022.09.27更新的内容---------------------------------------------------------------------------------------------- 2020版本之后,Unity打包安卓工程Export Project没有IL2CPP.SO这个库, 但是却把这个库的源码工程给出来了。 如果本身就有自己写好的安卓工程,替换bin和库后,编出来的包是没法运行的。 但是,不要骂Unity、不要骂Unity、不要骂Unity。 因为,这种方式,为so库的二次加密,提供了便捷,这里就不说加密相关的事情了。 步入正题。 在unityLibrary的build.gradle里加入一段代码,用于将IL2CPP编成库。 只需将这段代码加入进来,则无须再手段编库了,按正常出包就行。 def getSdkDir() { Properties local = new Properties() local.load(new FileInputStream("${rootDir}/local.properties")) return local.getProperty('sdk.dir') } def BuildIl2Cpp(String workingDir, String targetDirectory, String architecture, String abi, String configuration) { exec { commandLine(workingDir + "/src/main/Il2CppOutputProject/IL2CPP/build/deploy/netcoreapp3.1/il2cpp.exe", "--compile-cpp", "--libil2cpp-static", "--platform=Android", "--architecture=" + architecture, "--configuration=" + configuration, "--outputpath=" + workingDir + targetDirectory + abi + "/libil2cpp.so", "--cachedirectory=" + workingDir + "/build/il2cpp_"+ abi + "_" + configuration + "/il2cpp_cache", "--additional-include-directories=" + workingDir + "/src/main/Il2CppOutputProject/IL2CPP/external/bdwgc/include", "--additional-include-directories=" + workingDir + "/src/main/Il2CppOutputProject/IL2CPP/libil2cpp/include", "--tool-chain-path=" + android.ndkDirectory, "--map-file-parser=" + workingDir + "/src/main/Il2CppOutputProject/IL2CPP/MapFileParser/MapFileParser.exe", "--generatedcppdir=" + workingDir + "/src/main/Il2CppOutputProject/Source/il2cppOutput", "--baselib-directory=" + workingDir + "/src/main/jniStaticLibs/" + abi, "--dotnetprofile=unityaot") environment "ANDROID_SDK_ROOT", getSdkDir() } delete workingDir + targetDirectory + abi + "/libil2cpp.sym.so" ant.move(file: workingDir + targetDirectory + abi + "/libil2cpp.dbg.so", tofile: workingDir + "/symbols/" + abi + "/libil2cpp.so") } android { task BuildIl2CppTask { doLast { BuildIl2Cpp(projectDir.toString().replaceAll('\\\\', '/'), '/src/main/jniLibs/', 'ARMv7', 'armeabi-v7a', 'Release'); } } afterEvaluate { if (project(':unityLibrary').tasks.findByName('mergeDebugJniLibFolders')) project(':unityLibrary').mergeDebugJniLibFolders.dependsOn BuildIl2CppTask if (project(':unityLibrary').tasks.findByName('mergeReleaseJniLibFolders')) project(':unityLibrary').mergeReleaseJniLibFolders.dependsOn BuildIl2CppTask } sourceSets { main { jni.srcDirs = ["src/main/Il2CppOutputProject"] } } }