欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

2020-08-22

程序员文章站 2022-04-01 18:49:29
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.ICustomTabsCallbackStubStubProxy
这个是报错的原因,这部分报错大多在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.MediaBrowserCompatConnectionCallbackConnectionCallbackConnectionCallbackInternal
这是因为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

相关标签: unity android