2020-08-22
程序员文章站
2024-01-16 19:41:52
Unity安卓打包报错com.android.tools.r8.CompilationFailedException: Compilation failed to complete引入Firebase和若干其他SDK后很容易打包出问题,比如出现的这个问题。报错信息忽略其他,还会看到stderr[D8: Program type already present: android.support.customtabs.ICustomTabsCallbackStubStubStubProxy这个是报错的...
Unity安卓打包报错com.android.tools.r8.CompilationFailedException: Compilation failed to complete
引入Firebase和若干其他SDK后很容易打包出问题,比如出现的这个问题。
报错信息忽略其他,还会看到
stderr[
D8: Program type already present: android.support.customtabs.ICustomTabsCallbackProxy
这个是报错的原因,这部分报错大多在mainTemplate.gradle。
意思是重复引用,我们在其中找到,然后将其注释即可。
implementation 'com.android.support:customtabs:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
上个问题结束之后,又出现了新的问题,同样的R8,不同的D8
stderr[
D8: Program type already present: android.support.v4.media.MediaBrowserCompatConnectionCallbackInternal
这是因为Firebase使用AndroidX库的,而大多数第三方库还是用的support库。而AndroidX库是最新进化版的support库,所以会有重复引用。
解决时发现注释下边代码并不好用
implementation ‘com.android.support:support-v4:25.3.1’ // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
真正的解决方案:
方案一:gradle修改
([rootProject] + (rootProject.subprojects as List)).each {
ext {
it.setProperty("android.useAndroidX", true)
it.setProperty("android.enableJetifier", true)
}
}
方案二:调用unity2018之后新增加的可以干预Android打包的API:
放到Editor下即可。
public class AndroidPostBuildProcessor : IPostGenerateGradleAndroidProject
{
public int callbackOrder
{
get
{
return 999;
}
}
void IPostGenerateGradleAndroidProject.OnPostGenerateGradleAndroidProject(string path)
{
Debug.Log("Bulid path : " + path);
string gradlePropertiesFile = path + "/gradle.properties";
if (File.Exists(gradlePropertiesFile))
{
File.Delete(gradlePropertiesFile);
}
StreamWriter writer = File.CreateText(gradlePropertiesFile);
writer.WriteLine("org.gradle.jvmargs=-Xmx4096M");
writer.WriteLine("android.useAndroidX=true");
writer.WriteLine("android.enableJetifier=true");
writer.Flush();
writer.Close();
}
}
本文地址:https://blog.csdn.net/xuwanyy/article/details/108164903