關于Unity2020版本打包安卓工程IL2CPP沒有SO的解決方案(增加2021的說明)
關于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"] } } }
小時候我把老婆種到地下,長大了我能收獲一大堆老婆!
我是威少,我是一名Unity游戲的主程,我為自己帶鹽,希望此文能給您一點點微不足道的幫助,祝你成功!

浙公網安備 33010602011771號