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"]
}
}
}
