firebase / quickstart-unity

Firebase Quickstart Samples for Unity
https://firebase.google.com/games
Apache License 2.0
829 stars 429 forks source link

Android app crash caused by using Remote Config with other SDK and EDM4U resolution conflict #846

Open mgrogin opened 3 years ago

mgrogin commented 3 years ago

[REQUIRED] Please fill in the following fields:

[REQUIRED] Please describe the issue here:

(Please list the full steps to reproduce the issue. Include device logs, Unity logs, and stack traces if available.) I'm getting an exception: E/firebase: Unable to find Method com/google/firebase/remoteconfig/FirebaseRemoteConfig.activateFetched (signature '()Z', instance). Please verify the AAR which contains the com/google/firebase/remoteconfig/FirebaseRemoteConfig class is included in your app. things seemed to be working with firebase version 6.16.1 before today but today things stopped working and I think it's related to new firebase arr files that are being used:

new files:

    <file>Assets/Plugins/Android/com.google.firebase.firebase-abt-20.0.0.aar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-analytics-18.0.0.aar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-auth-20.0.0.aar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-config-20.0.0.aar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-iid-21.0.0.aar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-messaging-21.0.0.aar</file>

old files:

<file>Assets/Plugins/Android/com.google.firebase.firebase-abt-19.1.0.aar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-analytics-17.6.0.aar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-auth-19.4.0.aar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-config-19.2.0.aar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-iid-20.3.0.aar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-messaging-20.3.0.aar</file>

This seems similar to the issue with crashlytics: https://github.com/firebase/quickstart-unity/issues/758 Why does it use a higher version of the arr file than the one that is supported by the unity sdk?

Vah94 commented 3 years ago

[REQUIRED] Please fill in the following fields:

Unity editor version: 2019.4.13f1 Firebase Unity SDK version: 6.16.1 Source you installed the SDK: Unity Package Manager (.unitypackage or Unity Package Manager) Problematic Firebase Component: remoteConfig (Auth, Database, etc.) Other Firebase Components in use: could messaging, crashlytics, dynamic links. remote config, analytics (Auth, Database, etc.) Additional SDKs you are using: Facebook, IronSource (with a lot of adnetwork adapters[admob...]), EDMU 1.1.161, google play games (Facebook, AdMob, etc.) Platform you are using the Unity editor on: Mac (Mac, Windows, or Linux) Platform you are targeting:Android (iOS, Android, and/or desktop) Scripting Runtime: IL2CPP _____ (Mono, and/or IL2CPP)

[REQUIRED] Please describe the issue here: 2020-10-28 23:32:59.983 1187-1326/? E/firebase: Unable to find Method com/google/firebase/remoteconfig/FirebaseRemoteConfig.activateFetched (signature '()Z', instance). Please verify the AAR which contains the com/google/firebase/remoteconfig/FirebaseRemoteConfig class is included in your app.

lfg-ryan commented 3 years ago

Same issue here.

Unity editor version: 2019.4.12f1 Firebase Unity SDK version: 6.16.1 Source you installed the SDK: Unity Package Manager Problematic Firebase Component: remoteConfig Other Firebase Components in use: could messaging, crashlytics, dynamic links. remote config, analytics, realtime database, auth Additional SDKs you are using: Facebook, IronSource (with a lot of adnetwork adapters[admob...]), EDMU 1.2.161, google play games Platform you are using the Unity editor on: Mac Platform you are targeting:Android Scripting Runtime: IL2CPP

Please describe the issue here:

Unable to find Method com/google/firebase/remoteconfig/FirebaseRemoteConfig.activateFetched (signature '()Z', instance). Please verify the AAR which contains the com/google/firebase/remoteconfig/FirebaseRemoteConfig class is included in your app.

Longer log snippit:

10-28 15:30:24.767 com.lightfoxgames.dungeoneer 24024 - W UnityMain type=1400 audit(0.0:2972): avc: granted { execute } for path="/data/data/com.lightfoxgames.dungeoneer/cache/oat/arm64/app_resources_lib.odex" dev="mmcblk0p80" ino=21520 scontext=u:r:untrusted_app_27:s0:c219,c256,c512,c768 tcontext=u:object_r:app_data_file:s0:c219,c256,c512,c768 tclass=file 10-28 15:30:24.777 com.lightfoxgames.dungeoneer 24024 - W UnityMain type=1400 audit(0.0:2973): avc: granted { execute } for path="/data/data/com.lightfoxgames.dungeoneer/cache/oat/arm64/google_api_resources_lib.odex" dev="mmcblk0p80" ino=21973 scontext=u:r:untrusted_app_27:s0:c219,c256,c512,c768 tcontext=u:object_r:app_data_file:s0:c219,c256,c512,c768 tclass=file 10-28 15:30:24.807 com.lightfoxgames.dungeoneer 24024 24097 E Unity InitializationException: Firebase modules failed to initialize: remote_config (missing dependency) 10-28 15:30:24.807 com.lightfoxgames.dungeoneer 24024 24097 E Unity at Firebase.FirebaseApp.CreateAndTrack (Firebase.FirebaseApp+CreateDelegate createDelegate, Firebase.FirebaseApp existingProxy) [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:24.807 com.lightfoxgames.dungeoneer 24024 24097 E Unity at Firebase.Functions.FirebaseFunctions.get_DefaultInstance () [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:24.807 com.lightfoxgames.dungeoneer 24024 24097 E Unity at PlayerManager.Awake () [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:24.807 com.lightfoxgames.dungeoneer 24024 24097 E Unity 10-28 15:30:24.807 com.lightfoxgames.dungeoneer 24024 24097 E Unity (Filename: currently not available on il2cpp Line: -1) 10-28 15:30:24.807 com.lightfoxgames.dungeoneer 24024 24097 E Unity 10-28 15:30:24.810 com.lightfoxgames.dungeoneer 24024 - W UnityMain type=1400 audit(0.0:2974): avc: granted { execute } for path="/data/data/com.lightfoxgames.dungeoneer/cache/oat/arm64/app_resources_lib.odex" dev="mmcblk0p80" ino=21520 scontext=u:r:untrusted_app_27:s0:c219,c256,c512,c768 tcontext=u:object_r:app_data_file:s0:c219,c256,c512,c768 tclass=file 10-28 15:30:24.813 com.lightfoxgames.dungeoneer 24024 - W UnityMain type=1400 audit(0.0:2975): avc: granted { execute } for path="/data/data/com.lightfoxgames.dungeoneer/cache/oat/arm64/google_api_resources_lib.odex" dev="mmcblk0p80" ino=21973 scontext=u:r:untrusted_app_27:s0:c219,c256,c512,c768 tcontext=u:object_r:app_data_file:s0:c219,c256,c512,c768 tclass=file 10-28 15:30:24.833 com.lightfoxgames.dungeoneer 24024 24097 E Unity InitializationException: Firebase modules failed to initialize: remote_config (missing dependency) 10-28 15:30:24.833 com.lightfoxgames.dungeoneer 24024 24097 E Unity at Firebase.FirebaseApp.CreateAndTrack (Firebase.FirebaseApp+CreateDelegate createDelegate, Firebase.FirebaseApp existingProxy) [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:24.833 com.lightfoxgames.dungeoneer 24024 24097 E Unity at Firebase.Auth.FirebaseAuth.get_DefaultInstance () [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:24.833 com.lightfoxgames.dungeoneer 24024 24097 E Unity at PlayerAuthManager.Awake () [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:24.833 com.lightfoxgames.dungeoneer 24024 24097 E Unity 10-28 15:30:24.833 com.lightfoxgames.dungeoneer 24024 24097 E Unity (Filename: currently not available on il2cpp Line: -1) 10-28 15:30:24.833 com.lightfoxgames.dungeoneer 24024 24097 E Unity 10-28 15:30:24.867 com.lightfoxgames.dungeoneer 24024 24097 I Unity Pause: True 10-28 15:30:24.867 com.lightfoxgames.dungeoneer 24024 24097 I Unity PlayerAuthManager:OnApplicationPause(Boolean) 10-28 15:30:24.867 com.lightfoxgames.dungeoneer 24024 24097 I Unity 10-28 15:30:24.867 com.lightfoxgames.dungeoneer 24024 24097 I Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) 10-28 15:30:24.867 com.lightfoxgames.dungeoneer 24024 24097 I Unity 10-28 15:30:24.868 com.lightfoxgames.dungeoneer 24024 24097 I Unity Presence: True 10-28 15:30:24.868 com.lightfoxgames.dungeoneer 24024 24097 I Unity PlayerAuthManager:SetPresence(Boolean) 10-28 15:30:24.868 com.lightfoxgames.dungeoneer 24024 24097 I Unity PlayerAuthManager:OnApplicationPause(Boolean) 10-28 15:30:24.868 com.lightfoxgames.dungeoneer 24024 24097 I Unity 10-28 15:30:24.868 com.lightfoxgames.dungeoneer 24024 24097 I Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) 10-28 15:30:24.868 com.lightfoxgames.dungeoneer 24024 24097 I Unity 10-28 15:30:24.870 com.lightfoxgames.dungeoneer 24024 - W UnityMain type=1400 audit(0.0:2976): avc: granted { execute } for path="/data/data/com.lightfoxgames.dungeoneer/cache/oat/arm64/app_resources_lib.odex" dev="mmcblk0p80" ino=21520 scontext=u:r:untrusted_app_27:s0:c219,c256,c512,c768 tcontext=u:object_r:app_data_file:s0:c219,c256,c512,c768 tclass=file 10-28 15:30:24.880 com.lightfoxgames.dungeoneer 24024 - W UnityMain type=1400 audit(0.0:2977): avc: granted { execute } for path="/data/data/com.lightfoxgames.dungeoneer/cache/oat/arm64/google_api_resources_lib.odex" dev="mmcblk0p80" ino=21973 scontext=u:r:untrusted_app_27:s0:c219,c256,c512,c768 tcontext=u:object_r:app_data_file:s0:c219,c256,c512,c768 tclass=file 10-28 15:30:24.908 com.lightfoxgames.dungeoneer 24024 24097 E Unity InitializationException: Firebase modules failed to initialize: remote_config (missing dependency) 10-28 15:30:24.908 com.lightfoxgames.dungeoneer 24024 24097 E Unity at Firebase.FirebaseApp.CreateAndTrack (Firebase.FirebaseApp+CreateDelegate createDelegate, Firebase.FirebaseApp existingProxy) [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:24.908 com.lightfoxgames.dungeoneer 24024 24097 E Unity at Firebase.Database.FirebaseDatabase.get_DefaultInstance () [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:24.908 com.lightfoxgames.dungeoneer 24024 24097 E Unity at PlayerAuthManager.setValueRef () [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:24.908 com.lightfoxgames.dungeoneer 24024 24097 E Unity at PlayerAuthManager.SetPresence (System.Boolean presenceStatus) [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:24.908 com.lightfoxgames.dungeoneer 24024 24097 E Unity at PlayerAuthManager.OnApplicationPause (System.Boolean pause) [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:24.908 com.lightfoxgames.dungeoneer 24024 24097 E Unity 10-28 15:30:24.908 com.lightfoxgames.dungeoneer 24024 24097 E Unity (Filename: currently not available on il2cpp Line: -1) 10-28 15:30:24.908 com.lightfoxgames.dungeoneer 24024 24097 E Unity 10-28 15:30:25.066 com.lightfoxgames.dungeoneer 24024 24097 I Unity AppLovin intialize received 10-28 15:30:25.066 com.lightfoxgames.dungeoneer 24024 24097 I Unity GoogleMobileAds.Android.Mediation.AppLovin.AppLovinClient:Initialize() 10-28 15:30:25.066 com.lightfoxgames.dungeoneer 24024 24097 I Unity AdsManager:Start() 10-28 15:30:25.066 com.lightfoxgames.dungeoneer 24024 24097 I Unity 10-28 15:30:25.066 com.lightfoxgames.dungeoneer 24024 24097 I Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) 10-28 15:30:25.066 com.lightfoxgames.dungeoneer 24024 24097 I Unity 10-28 15:30:25.263 com.lightfoxgames.dungeoneer 24024 - W UnityMain type=1400 audit(0.0:2978): avc: granted { execute } for path="/data/data/com.lightfoxgames.dungeoneer/cache/oat/arm64/app_resources_lib.odex" dev="mmcblk0p80" ino=21520 scontext=u:r:untrusted_app_27:s0:c219,c256,c512,c768 tcontext=u:object_r:app_data_file:s0:c219,c256,c512,c768 tclass=file 10-28 15:30:25.294 com.lightfoxgames.dungeoneer 24024 24097 E Unity InitializationException: Firebase modules failed to initialize: remote_config (missing dependency) 10-28 15:30:25.294 com.lightfoxgames.dungeoneer 24024 24097 E Unity at Firebase.FirebaseApp.CreateAndTrack (Firebase.FirebaseApp+CreateDelegate createDelegate, Firebase.FirebaseApp existingProxy) [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:25.294 com.lightfoxgames.dungeoneer 24024 24097 E Unity at Firebase.Messaging.FirebaseMessaging+Listener..ctor () [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:25.294 com.lightfoxgames.dungeoneer 24024 24097 E Unity at Firebase.Messaging.FirebaseMessaging+Listener.Create () [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:25.294 com.lightfoxgames.dungeoneer 24024 24097 E Unity at Firebase.Messaging.FirebaseMessaging..cctor () [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:25.294 com.lightfoxgames.dungeoneer 24024 24097 E Unity at AdsManager.Start () [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:25.294 com.lightfoxgames.dungeoneer 24024 24097 E Unity Rethrow as TypeInitializationException: The type initializer for 'Firebase.Messaging.FirebaseMessaging' threw an exception. 10-28 15:30:25.294 com.lightfoxgames.dungeoneer 24024 24097 E Unity at AdsManager.Start () [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:25.294 com.lightfoxgames.dungeoneer 24024 24097 E Unity 10-28 15:30:25.294 com.lightfoxgames.dungeoneer 24024 24097 E Unity (Filename: currently not available on il2cpp Line: -1) 10-28 15:30:25.294 com.lightfoxgames.dungeoneer 24024 24097 E Unity 10-28 15:30:25.323 com.lightfoxgames.dungeoneer 24024 24097 E Unity InitializationException: Firebase modules failed to initialize: remote_config (missing dependency) 10-28 15:30:25.323 com.lightfoxgames.dungeoneer 24024 24097 E Unity at Firebase.FirebaseApp.CreateAndTrack (Firebase.FirebaseApp+CreateDelegate createDelegate, Firebase.FirebaseApp existingProxy) [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:25.323 com.lightfoxgames.dungeoneer 24024 24097 E Unity at Firebase.Analytics.FirebaseAnalytics..cctor () [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:25.323 com.lightfoxgames.dungeoneer 24024 24097 E Unity at AnalyticsManager.SetCurrentScreen (System.String screenName, System.String screenClass) [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:25.323 com.lightfoxgames.dungeoneer 24024 24097 E Unity at ApplicationManager.Start () [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:25.323 com.lightfoxgames.dungeoneer 24024 24097 E Unity Rethrow as TypeInitializationException: The type initializer for 'Firebase.Analytics.FirebaseAnalytics' threw an exception. 10-28 15:30:25.323 com.lightfoxgames.dungeoneer 24024 24097 E Unity at AnalyticsManager.SetCurrentScreen (System.String screenName, System.String screenClass) [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:25.323 com.lightfoxgames.dungeoneer 24024 24097 E Unity at ApplicationManager.Start () [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:25.323 com.lightfoxgames.dungeoneer 24024 24097 E Unity 10-28 15:30:25.323 com.lightfoxgames.dungeoneer 24024 24097 E Unity (Filename: currently not available on il2cpp Line: -1) 10-28 15:30:25.323 com.lightfoxgames.dungeoneer 24024 24097 E Unity 10-28 15:30:25.347 com.lightfoxgames.dungeoneer 24024 24097 E Unity ApplicationException: internal::IsInitialized() 10-28 15:30:25.347 com.lightfoxgames.dungeoneer 24024 24097 E Unity at Firebase.Analytics.FirebaseAnalytics.LogEvent (System.String name, Firebase.Analytics.Parameter[] parameters) [0x00000] in <00000000000000000000000000000000>:0 10-28 15:30:25.347 com.lightfoxgames.dungeoneer 24024 24097 E Unity at AnalyticsManager.LogEvent (System.String eventName, System.Collections.Generic.Dictionary2[TKey,TValue] parameters) [0x00000] in <00000000000000000000000000000000>:0
10-28 15:30:25.347 com.lightfoxgames.dungeoneer 24024 24097 E Unity at InternetAndGeoManager.GenerateInternetReport (System.Action onComplete) [0x00000] in <00000000000000000000000000000000>:0
10-28 15:30:25.347 com.lightfoxgames.dungeoneer 24024 24097 E Unity
10-28 15:30:25.347 com.lightfoxgames.dungeoneer 24024 24097 E Unity (Filename: currently not available on il2cpp Line: -1) 10-28 15:30:25.347 com.lightfoxgames.dungeoneer 24024 24097 E Unity
`

lfg-ryan commented 3 years ago

It looks like it should be calling 'activate' instead of 'activateFetched'.

We keep running into these issues where the Unity package is calling old deprecated functions.

Does anyone have a work around?

lfg-ryan commented 3 years ago

As mentioned this seems to be the same issue as

https://github.com/firebase/quickstart-unity/issues/758

In this case. Unity RemoteConfig package is expecting 19.2.0. I assume that no longer exists. it resolves to 2.0.0 which removed the deprecated call 'activateFetched'.

Going to try the same workaround as 758. I will again note these workarounds prevent us from using tools like Unity Cloud Build so we need to find a long-term solution to this kind of error.

cszhongit commented 3 years ago

I meet the same question.It's too bad.

mgrogin commented 3 years ago

@cszhongit @lfg-ryan Putting this file in a folder called Editor should solve the problem for now. Feel free to share improvements to the code and make it more generic:

#if UNITY_ANDROID

using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml.Linq;

using UnityEditor;
using UnityEditor.Build;
#if UNITY_2018_1_OR_NEWER
using UnityEditor.Build.Reporting;
#endif
using UnityEngine;

using System;
using UnityEditor.PackageManager;
//using System.Threading.Tasks;

#if UNITY_2018_1_OR_NEWER
public class PackageCacheDependencyProcessor : IPreprocessBuildWithReport
#else
public class PackageCacheDependencyProcessor : IPreprocessBuild
#endif
{

    private const string FIREBASE_UNITY_VERSION = "6.16.1";

    public int callbackOrder { get { return 0; } }

#if UNITY_2018_1_OR_NEWER
    public void OnPreprocessBuild(BuildReport report)
#else
    public void OnPreprocessBuild(BuildTarget target, string path)
#endif
    {
        string packageCacheFolder = Path.GetFullPath(Path.Combine(Application.dataPath, "../Library/PackageCache"));

        Dictionary<string, string> androidPackageToWantedVersion = new Dictionary<string, string>();
        Dictionary<string, string> androidPackageToDeppendencyFileName = new Dictionary<string, string>();
        Dictionary<string, string> androidPackageNameIdToDeppendencySpecPrefix = new Dictionary<string, string>();

        string packageNameID = "com.google.firebase.remote-config";
        string deppendencySpecPrefix = "com.google.firebase:firebase-config";
        androidPackageNameIdToDeppendencySpecPrefix[packageNameID] = deppendencySpecPrefix;
        androidPackageToWantedVersion[packageNameID] = "19.2.0";
        androidPackageToDeppendencyFileName[packageNameID] = "remoteConfigDependencies.xml";

        foreach (var packageNameIDKey in androidPackageToWantedVersion.Keys)
        {            
            var package = UnityEditor.PackageManager.Client.Search(packageNameID, true);
            //if (package == null || package.Result == null || package.Result.Count() == 0)
            //{
            //    StopBuildWithMessage(packageNameID + " package is missing. check installed packages or that name matches package.");
            //}
            for (var i = 0; i < 100; ++i)
            {

                if (package.Status != StatusCode.InProgress) break;

                System.Threading.Thread.Sleep(100);

            }
            if (package.Status != StatusCode.Success)
            {
                StopBuildWithMessage(packageNameID + " package is missing. check installed packages or that name matches package. " + $"{package.Status}/{package.Error?.message}");
            }
            if (package.Result.Count() == 0)
            {
                StopBuildWithMessage(packageNameID + " package is missing. check installed packages or that name matches package.");
            }

            var result = package.Result.First();
            if (result.version != FIREBASE_UNITY_VERSION)
            {
                StopBuildWithMessage(packageNameIDKey + " used version " + result.version + " doesnt match version defined in PackageCacheDependencyProcessor " + FIREBASE_UNITY_VERSION + " - adjust dictionary in code.");

            }
            //result.resolvedPath
            string firebaseFolder = result.resolvedPath; // string.Format("{0}@{1}", packageNameIDKey, FIREBASE_UNITY_VERSION); // "com.google.firebase.remote-config@6.16.1";            
            if (!androidPackageToDeppendencyFileName.ContainsKey(packageNameIDKey))
            {
                StopBuildWithMessage(packageNameIDKey + " is missing deppendency file name. Add to dictionary in code.");
            }
            string dependencyFileName = androidPackageToDeppendencyFileName[packageNameIDKey]; // "remoteConfigDependencies.xml";
            string dependenciesXmlPath = Path.Combine(packageCacheFolder, firebaseFolder,"Firebase","Editor", dependencyFileName);

            XDocument dependencies = null;
            try
            {
                dependencies = XDocument.Load(dependenciesXmlPath);
            }
    #pragma warning disable 0168
            catch (IOException e)
    #pragma warning restore 0168
            {
                StopBuildWithMessage(dependencyFileName + " is missing. Try re-importing the plugin.");
            }

            XElement elemDependencies = dependencies.Element("dependencies");
            if (elemDependencies == null)
            {
                StopBuildWithMessage(dependencyFileName + " is not valid. Try re-importing the plugin.");
            }

            XElement elemAndroidPackages = elemDependencies.Element("androidPackages");
            if (elemAndroidPackages == null)
            {
                StopBuildWithMessage(dependencyFileName + " is not valid. Try re-importing the plugin.");
            }

            IEnumerable<XElement> androidPackages = elemAndroidPackages.Descendants()
                    .Where(elem => elem.Name.LocalName.Equals("androidPackage"));
            string androidPackageNamePrefix = packageNameIDKey + ":"; // "com.google.firebase:firebase-config:"
            if (androidPackageNameIdToDeppendencySpecPrefix.ContainsKey(packageNameID))
            {
                androidPackageNamePrefix = androidPackageNameIdToDeppendencySpecPrefix[packageNameID] + ":";
            }
            var androidPackageElement = GetAndroidPackageElement(androidPackages, androidPackageNamePrefix);
            if (androidPackageElement != null)
            {
                string newspec = string.Format("{0}[{1}]",androidPackageNamePrefix, androidPackageToWantedVersion[packageNameIDKey]);
                androidPackageElement.SetAttributeValue("spec", newspec); // androidPackageElement.SetAttributeValue("spec", "com.google.firebase:firebase-config:[19.2.0]");
            }
            else
            {
                Debug.LogWarning("couldnt find spec " + androidPackageNamePrefix+  " in " + dependencyFileName);
            }
            elemDependencies.Save(dependenciesXmlPath);
        }

    }
    private XElement GetAndroidPackageElement(IEnumerable<XElement> androidPackages, string SpecNamePre)
    {
        foreach (XElement elem in androidPackages)
        {
            IEnumerable<XAttribute> attrs = elem.Attributes();
            foreach (XAttribute attr in attrs)
            {
                if (attr.Name.LocalName.Equals("spec") && attr.Value.StartsWith(SpecNamePre))
                {
                    return elem;
                }
            }
        }
        return null;
    }

    private void StopBuildWithMessage(string message)
    {
        string prefix = "[PackageCacheDependencyProcessor] ";
#if UNITY_2017_1_OR_NEWER
        throw new BuildPlayerWindow.BuildMethodException(prefix + message);
#else
        // Unity 5.6 or lower does not support BuildMethodException.
        // Log an error log instead.
        Debug.LogError(prefix + message);
#endif
    }
}

#endif
cszhongit commented 3 years ago

@cszhongit @lfg-ryan Putting this file in a folder called Editor should solve the problem for now. Feel free to share improvements to the code and make it more generic:

#if UNITY_ANDROID

using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml.Linq;

using UnityEditor;
using UnityEditor.Build;
#if UNITY_2018_1_OR_NEWER
using UnityEditor.Build.Reporting;
#endif
using UnityEngine;

using System;
using UnityEditor.PackageManager;
//using System.Threading.Tasks;

#if UNITY_2018_1_OR_NEWER
public class PackageCacheDependencyProcessor : IPreprocessBuildWithReport
#else
public class PackageCacheDependencyProcessor : IPreprocessBuild
#endif
{

    private const string FIREBASE_UNITY_VERSION = "6.16.1";

    public int callbackOrder { get { return 0; } }

#if UNITY_2018_1_OR_NEWER
    public void OnPreprocessBuild(BuildReport report)
#else
    public void OnPreprocessBuild(BuildTarget target, string path)
#endif
    {
        string packageCacheFolder = Path.GetFullPath(Path.Combine(Application.dataPath, "../Library/PackageCache"));

        Dictionary<string, string> androidPackageToWantedVersion = new Dictionary<string, string>();
        Dictionary<string, string> androidPackageToDeppendencyFileName = new Dictionary<string, string>();
        Dictionary<string, string> androidPackageNameIdToDeppendencySpecPrefix = new Dictionary<string, string>();

        string packageNameID = "com.google.firebase.remote-config";
        string deppendencySpecPrefix = "com.google.firebase:firebase-config";
        androidPackageNameIdToDeppendencySpecPrefix[packageNameID] = deppendencySpecPrefix;
        androidPackageToWantedVersion[packageNameID] = "19.2.0";
        androidPackageToDeppendencyFileName[packageNameID] = "remoteConfigDependencies.xml";

        foreach (var packageNameIDKey in androidPackageToWantedVersion.Keys)
        {            
            var package = UnityEditor.PackageManager.Client.Search(packageNameID, true);
            //if (package == null || package.Result == null || package.Result.Count() == 0)
            //{
            //    StopBuildWithMessage(packageNameID + " package is missing. check installed packages or that name matches package.");
            //}
            for (var i = 0; i < 100; ++i)
            {

                if (package.Status != StatusCode.InProgress) break;

                System.Threading.Thread.Sleep(100);

            }
            if (package.Status != StatusCode.Success)
            {
                StopBuildWithMessage(packageNameID + " package is missing. check installed packages or that name matches package. " + $"{package.Status}/{package.Error?.message}");
            }
            if (package.Result.Count() == 0)
            {
                StopBuildWithMessage(packageNameID + " package is missing. check installed packages or that name matches package.");
            }

            var result = package.Result.First();
            if (result.version != FIREBASE_UNITY_VERSION)
            {
                StopBuildWithMessage(packageNameIDKey + " used version " + result.version + " doesnt match version defined in PackageCacheDependencyProcessor " + FIREBASE_UNITY_VERSION + " - adjust dictionary in code.");

            }
            //result.resolvedPath
            string firebaseFolder = result.resolvedPath; // string.Format("{0}@{1}", packageNameIDKey, FIREBASE_UNITY_VERSION); // "com.google.firebase.remote-config@6.16.1";            
            if (!androidPackageToDeppendencyFileName.ContainsKey(packageNameIDKey))
            {
                StopBuildWithMessage(packageNameIDKey + " is missing deppendency file name. Add to dictionary in code.");
            }
            string dependencyFileName = androidPackageToDeppendencyFileName[packageNameIDKey]; // "remoteConfigDependencies.xml";
            string dependenciesXmlPath = Path.Combine(packageCacheFolder, firebaseFolder,"Firebase","Editor", dependencyFileName);

            XDocument dependencies = null;
            try
            {
                dependencies = XDocument.Load(dependenciesXmlPath);
            }
    #pragma warning disable 0168
            catch (IOException e)
    #pragma warning restore 0168
            {
                StopBuildWithMessage(dependencyFileName + " is missing. Try re-importing the plugin.");
            }

            XElement elemDependencies = dependencies.Element("dependencies");
            if (elemDependencies == null)
            {
                StopBuildWithMessage(dependencyFileName + " is not valid. Try re-importing the plugin.");
            }

            XElement elemAndroidPackages = elemDependencies.Element("androidPackages");
            if (elemAndroidPackages == null)
            {
                StopBuildWithMessage(dependencyFileName + " is not valid. Try re-importing the plugin.");
            }

            IEnumerable<XElement> androidPackages = elemAndroidPackages.Descendants()
                    .Where(elem => elem.Name.LocalName.Equals("androidPackage"));
            string androidPackageNamePrefix = packageNameIDKey + ":"; // "com.google.firebase:firebase-config:"
            if (androidPackageNameIdToDeppendencySpecPrefix.ContainsKey(packageNameID))
            {
                androidPackageNamePrefix = androidPackageNameIdToDeppendencySpecPrefix[packageNameID];
            }
            var androidPackageElement = GetAndroidPackageElement(androidPackages, androidPackageNamePrefix);
            if (androidPackageElement != null)
            {
                string newspec = string.Format("{0}[{1}]",androidPackageNamePrefix, androidPackageToWantedVersion[packageNameIDKey]);
                androidPackageElement.SetAttributeValue("spec", newspec); // androidPackageElement.SetAttributeValue("spec", "com.google.firebase:firebase-config:[19.2.0]");
            }
            else
            {
                Debug.LogWarning("couldnt find spec " + androidPackageNamePrefix+  " in " + dependencyFileName);
            }
            elemDependencies.Save(dependenciesXmlPath);
        }

    }
    private XElement GetAndroidPackageElement(IEnumerable<XElement> androidPackages, string SpecNamePre)
    {
        foreach (XElement elem in androidPackages)
        {
            IEnumerable<XAttribute> attrs = elem.Attributes();
            foreach (XAttribute attr in attrs)
            {
                if (attr.Name.LocalName.Equals("spec") && attr.Value.StartsWith(SpecNamePre))
                {
                    return elem;
                }
            }
        }
        return null;
    }

    private void StopBuildWithMessage(string message)
    {
        string prefix = "[PackageCacheDependencyProcessor] ";
#if UNITY_2017_1_OR_NEWER
        throw new BuildPlayerWindow.BuildMethodException(prefix + message);
#else
        // Unity 5.6 or lower does not support BuildMethodException.
        // Log an error log instead.
        Debug.LogError(prefix + message);
#endif
    }
}

#endif

this is a great answer ,it's useful for me .Thank you!

patm1987 commented 3 years ago

Y'all have done an excellent job identifying the symptom: firebase-config has somehow gotten pinned to 20.0.0. Then, because of changes to remote config on Android, we should be calling activate rather than activateFetched. This should not happen though, and in my testing it does not with the combination of Firebase plugins mentioned in the OP. There are a lot of you running into this though, so I really want to try to work out what's happening.

For my first two questions: 1) can any of you reproduce it in the test app? 2) if you force resolve dependencies, is it still occuring (I noticed that @lfg-ryan posited that maybe 19.2.0 doesn't exist and it automatically upgraded. This is not currently the issue, but maybe it was a temporary one?). image

I see that all reporters are using the Package Manager to manage Firebase. Are you also all resolving dependencies into Assets/Plugins/Android or are some of you using the mainTemplate.gradle. Can you try adding a mainTemplate.gradle and gradleTemplate.properties (you need both) then resolving again (you'll need to restart Unity in some cases to build). image

If you look in mainTemplate.gradle, you should see versions and what Dependencies.xml file requested the version in question. Can you confirm that you're seeing firebase-config:20.0.0 rather than 19.2.0 as I am, and tell me what Dependencies.xml file is bringing it in (in my sample, RemoteConfigDependencies.xml):

    implementation 'com.google.firebase:firebase-config:19.2.0' // Assets/Firebase/Editor/RemoteConfigDependencies.xml:13
    implementation 'com.google.firebase:firebase-config-unity:6.16.1' // Assets/Firebase/Editor/RemoteConfigDependencies.xml:20

Finally, in the "Android Resolver Settings" window, if you're still running into issues, can you turn on "Verbose Logging". Then force resolve the dependencies and paste your Unity editor log? image EDM4U should print out debug information that can help us track down the issue.

chkuang-g commented 3 years ago

@mgrogin

I'm afraid that this does seems to be similar to #758 where some other packages forced EDM4U to bump up the version. I installed all Firebase plugins you mentioned and was not able to reproduce the issue. Therefore, I suspect this is related to other packages, such as IronSource.

Could you provide the text in the windows when you click on Assets > External Dependency Manager > Android Resolver > Display Libraries? This gives us insight about all the dependencies EDM4U is trying to resolve.

In general, when you are using Gradle 5, which is the one EDM4U is using now, com.google.firebase:firebase-config:19.2.0 means any version above 19.2.0 and less than but not including 20.0.0. That is, normally it should not resolve to 20.0.0 unless EDM4U kept finding version range conflict and change com.google.firebase:firebase-config:19.2.0 to com.google.firebase:firebase-config:+. You probably should see similar log as well.

Your script which change com.google.firebase:firebase-config:19.2.0 to com.google.firebase:firebase-config:[19.2.0] should make it work for Firebase. However, you may disable some other packages, which may expect higher version of Android libraries. Not necessary to be firebase-config, but something like GMS libraries or Play libraries.

I would recommend you to downgrade other packages instead.

mgrogin commented 3 years ago
([rootProject] + (rootProject.subprojects as List)).each { project ->
    project.repositories {
        def unityProjectPath = $/file:///**DIR_UNITYPROJECT**/$.replace("\\", "/")
        maven {
            url "https://maven.google.com"
        }
        maven {
            url (unityProjectPath + "/Assets/GooglePlayGames/Editor/m2repository") // Assets/GooglePlayGames/Editor/GooglePlayGamesPluginDependencies.xml:11
        }
        maven {
            url "https://dl.bintray.com/ironsource-mobile/android-sdk/" // Assets/IronSource/Editor/IronSourceSDKDependencies.xml:9
        }
        maven {
            url "https://maven.google.com/" // Assets/IronSource/Editor/IronSourceSDKDependencies.xml:17, Assets/IronSource/Editor/IronSourceSDKDependencies.xml:25, Assets/IronSource/Editor/ISAdMobAdapterDependencies.xml:8, Assets/IronSource/Editor/ISFacebookAdapterDependencies.xml:8, Assets/IronSource/Editor/ISTapJoyAdapterDependencies.xml:15, Assets/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:16
        }
        maven {
            url "https://adcolony.bintray.com/AdColony/" // Assets/IronSource/Editor/ISAdColonyAdapterDependencies.xml:8
        }
        maven {
            url "https://dl.bintray.com/ironsource-mobile/android-adapters/" // Assets/IronSource/Editor/ISAdColonyAdapterDependencies.xml:16, Assets/IronSource/Editor/ISAdMobAdapterDependencies.xml:16, Assets/IronSource/Editor/ISFacebookAdapterDependencies.xml:16, Assets/IronSource/Editor/ISTapJoyAdapterDependencies.xml:8, Assets/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:9, Assets/IronSource/Editor/ISVungleAdapterDependencies.xml:16
        }
        maven {
            url "https://jitpack.io/" // Assets/IronSource/Editor/ISVungleAdapterDependencies.xml:8
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/com.google.firebase.app@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.app/Firebase/Editor/AppDependencies.xml:22
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/com.google.firebase.auth@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.auth/Firebase/Editor/AuthDependencies.xml:20
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/com.google.firebase.messaging@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.messaging/Firebase/Editor/MessagingDependencies.xml:20
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/com.google.firebase.crashlytics@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.crashlytics/Firebase/Editor/CrashlyticsDependencies.xml:20
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/com.google.firebase.dynamic-links@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.dynamic-links/Firebase/Editor/DynamicLinksDependencies.xml:20
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/com.google.firebase.database@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.database/Firebase/Editor/DatabaseDependencies.xml:20
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/com.google.firebase.remote-config@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.remote-config/Firebase/Editor/RemoteConfigDependencies.xml:13
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/com.google.firebase.analytics@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.analytics/Firebase/Editor/AnalyticsDependencies.xml:18
        }
        mavenLocal()
        jcenter()
        mavenCentral()
    }
}
dependencies {
    implementation 'com.adcolony:sdk:4.2.4' // Assets/IronSource/Editor/ISAdColonyAdapterDependencies.xml:8
    implementation 'com.android.support:appcompat-v7:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
    implementation 'com.android.support:cardview-v7:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
    implementation 'com.android.support:customtabs:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
    implementation 'com.android.support:support-v4:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
    implementation 'com.facebook.android:audience-network-sdk:6.2.0' // Assets/IronSource/Editor/ISFacebookAdapterDependencies.xml:8
    implementation 'com.facebook.android:facebook-applinks:[8.0, 9)' // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:6
    implementation 'com.facebook.android:facebook-core:[8.0, 9)' // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:5
    implementation 'com.facebook.android:facebook-gamingservices:[8.0, 9)' // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:9
implementation 'com.facebook.android:facebook-login:[8.0, 9)' // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:7
    implementation 'com.facebook.android:facebook-share:[8.0, 9)' // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:8
    implementation 'com.google.android.gms:play-services-ads:19.4.0' // Assets/IronSource/Editor/ISAdMobAdapterDependencies.xml:8
    implementation 'com.google.android.gms:play-services-ads-identifier:17.0.0' // Assets/IronSource/Editor/IronSourceSDKDependencies.xml:17
    implementation 'com.google.android.gms:play-services-appinvite:18.0.0' // Packages/com.google.firebase.dynamic-links/Firebase/Editor/DynamicLinksDependencies.xml:13
    implementation 'com.google.android.gms:play-services-base:17.4.0' // Packages/com.google.firebase.app/Firebase/Editor/AppDependencies.xml:17
    implementation 'com.google.android.gms:play-services-basement:17.2.1' // Assets/IronSource/Editor/IronSourceSDKDependencies.xml:25
    implementation 'com.google.firebase:firebase-analytics:17.5.0' // Packages/com.google.firebase.analytics/Firebase/Editor/AnalyticsDependencies.xml:13
    implementation 'com.google.firebase:firebase-analytics-unity:6.16.1' // Packages/com.google.firebase.analytics/Firebase/Editor/AnalyticsDependencies.xml:18
    implementation 'com.google.firebase:firebase-app-unity:6.16.1' // Packages/com.google.firebase.app/Firebase/Editor/AppDependencies.xml:22
    implementation 'com.google.firebase:firebase-auth:19.3.2' // Packages/com.google.firebase.auth/Firebase/Editor/AuthDependencies.xml:13
    implementation 'com.google.firebase:firebase-auth-unity:6.16.1' // Packages/com.google.firebase.auth/Firebase/Editor/AuthDependencies.xml:20
    implementation 'com.google.firebase:firebase-common:19.3.1' // Packages/com.google.firebase.app/Firebase/Editor/AppDependencies.xml:13
    implementation 'com.google.firebase:firebase-config:19.2.0' // Packages/com.google.firebase.remote-config/Firebase/Editor/RemoteConfigDependencies.xml:7
    implementation 'com.google.firebase:firebase-config-unity:6.16.1' // Packages/com.google.firebase.remote-config/Firebase/Editor/RemoteConfigDependencies.xml:13
    implementation 'com.google.firebase:firebase-crashlytics:17.2.2' // Packages/com.google.firebase.crashlytics/Firebase/Editor/CrashlyticsDependencies.xml:13
    implementation 'com.google.firebase:firebase-crashlytics-unity:6.16.1' // Packages/com.google.firebase.crashlytics/Firebase/Editor/CrashlyticsDependencies.xml:20
    implementation 'com.google.firebase:firebase-database:19.4.0' // Packages/com.google.firebase.database/Firebase/Editor/DatabaseDependencies.xml:13
    implementation 'com.google.firebase:firebase-database-unity:6.16.1' // Packages/com.google.firebase.database/Firebase/Editor/DatabaseDependencies.xml:20
    implementation 'com.google.firebase:firebase-dynamic-links-unity:6.16.1' // Packages/com.google.firebase.dynamic-links/Firebase/Editor/DynamicLinksDependencies.xml:20
    implementation 'com.google.firebase:firebase-messaging:20.2.4' // Packages/com.google.firebase.messaging/Firebase/Editor/MessagingDependencies.xml:13
    implementation 'com.google.firebase:firebase-messaging-unity:6.16.1' // Packages/com.google.firebase.messaging/Firebase/Editor/MessagingDependencies.xml:20
    implementation 'com.google.games:gpgs-plugin-support:0.10.06' // Assets/GooglePlayGames/Editor/GooglePlayGamesPluginDependencies.xml:11
    implementation 'com.ironsource.adapters:adcolonyadapter:4.3.4' // Assets/IronSource/Editor/ISAdColonyAdapterDependencies.xml:16
    implementation 'com.ironsource.adapters:admobadapter:4.3.14' // Assets/IronSource/Editor/ISAdMobAdapterDependencies.xml:16
    implementation 'com.ironsource.adapters:facebookadapter:4.3.23' // Assets/IronSource/Editor/ISFacebookAdapterDependencies.xml:16
    implementation 'com.ironsource.adapters:tapjoyadapter:4.1.14' // Assets/IronSource/Editor/ISTapJoyAdapterDependencies.xml:8
    implementation 'com.ironsource.adapters:unityadsadapter:4.3.7' // Assets/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:9
    implementation 'com.ironsource.adapters:vungleadapter:4.3.6' // Assets/IronSource/Editor/ISVungleAdapterDependencies.xml:16
    implementation 'com.ironsource.sdk:mediationsdk:7.0.3.1' // Assets/IronSource/Editor/IronSourceSDKDependencies.xml:9
    implementation 'com.parse.bolts:bolts-android:1.4.0' // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:4
    implementation 'com.tapjoy:tapjoy-android-sdk:12.7.0' // Assets/IronSource/Editor/ISTapJoyAdapterDependencies.xml:15
    implementation 'com.unity3d.ads:unity-ads:3.5.0' // Assets/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:16
    implementation 'com.vungle:publisher-sdk-android:6.8.1' // Assets/IronSource/Editor/ISVungleAdapterDependencies.xml:8
}
android {
  packagingOptions {
      exclude ('/lib/armeabi/*' + '*')
      exclude ('/lib/mips/*' + '*')
      exclude ('/lib/mips64/*' + '*')
      exclude ('/lib/x86/*' + '*')
   exclude ('/lib/x86_64/*' + '*')
  }
}
mgrogin commented 3 years ago
([rootProject] + (rootProject.subprojects as List)).each { project ->
    project.repositories {
        def unityProjectPath = $/file:///**DIR_UNITYPROJECT**/$.replace("\\", "/")
        maven {
            url "https://maven.google.com"
        }
        maven {
            url (unityProjectPath + "/Assets/GooglePlayGames/Editor/m2repository") // Assets/GooglePlayGames/Editor/GooglePlayGamesPluginDependencies.xml:11
        }
        maven {
            url "https://dl.bintray.com/ironsource-mobile/android-sdk/" // Assets/IronSource/Editor/IronSourceSDKDependencies.xml:9
        }
        maven {
            url "https://maven.google.com/" // Assets/IronSource/Editor/IronSourceSDKDependencies.xml:17, Assets/IronSource/Editor/IronSourceSDKDependencies.xml:25, Assets/IronSource/Editor/ISAdMobAdapterDependencies.xml:8, Assets/IronSource/Editor/ISFacebookAdapterDependencies.xml:8, Assets/IronSource/Editor/ISTapJoyAdapterDependencies.xml:15, Assets/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:16
        }
        maven {
            url "https://adcolony.bintray.com/AdColony/" // Assets/IronSource/Editor/ISAdColonyAdapterDependencies.xml:8
        }
        maven {
            url "https://dl.bintray.com/ironsource-mobile/android-adapters/" // Assets/IronSource/Editor/ISAdColonyAdapterDependencies.xml:16, Assets/IronSource/Editor/ISAdMobAdapterDependencies.xml:16, Assets/IronSource/Editor/ISFacebookAdapterDependencies.xml:16, Assets/IronSource/Editor/ISTapJoyAdapterDependencies.xml:8, Assets/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:9, Assets/IronSource/Editor/ISVungleAdapterDependencies.xml:16
        }
        maven {
            url "https://jitpack.io/" // Assets/IronSource/Editor/ISVungleAdapterDependencies.xml:8
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/com.google.firebase.app@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.app/Firebase/Editor/AppDependencies.xml:22
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/com.google.firebase.auth@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.auth/Firebase/Editor/AuthDependencies.xml:20
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/com.google.firebase.messaging@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.messaging/Firebase/Editor/MessagingDependencies.xml:20
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/com.google.firebase.crashlytics@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.crashlytics/Firebase/Editor/CrashlyticsDependencies.xml:20
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/com.google.firebase.dynamic-links@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.dynamic-links/Firebase/Editor/DynamicLinksDependencies.xml:20
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/com.google.firebase.database@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.database/Firebase/Editor/DatabaseDependencies.xml:20
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/com.google.firebase.remote-config@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.remote-config/Firebase/Editor/RemoteConfigDependencies.xml:13
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/com.google.firebase.analytics@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.analytics/Firebase/Editor/AnalyticsDependencies.xml:18
        }
        mavenLocal()
        jcenter()
        mavenCentral()
    }
}
dependencies {
    implementation 'com.adcolony:sdk:4.2.4' // Assets/IronSource/Editor/ISAdColonyAdapterDependencies.xml:8
    implementation 'com.android.support:appcompat-v7:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
    implementation 'com.android.support:cardview-v7:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
    implementation 'com.android.support:customtabs:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
    implementation 'com.android.support:support-v4:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
    implementation 'com.facebook.android:audience-network-sdk:6.2.0' // Assets/IronSource/Editor/ISFacebookAdapterDependencies.xml:8
    implementation 'com.facebook.android:facebook-applinks:[8.0, 9)' // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:6
    implementation 'com.facebook.android:facebook-core:[8.0, 9)' // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:5
    implementation 'com.facebook.android:facebook-gamingservices:[8.0, 9)' // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:9
implementation 'com.facebook.android:facebook-login:[8.0, 9)' // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:7
    implementation 'com.facebook.android:facebook-share:[8.0, 9)' // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:8
    implementation 'com.google.android.gms:play-services-ads:19.4.0' // Assets/IronSource/Editor/ISAdMobAdapterDependencies.xml:8
    implementation 'com.google.android.gms:play-services-ads-identifier:17.0.0' // Assets/IronSource/Editor/IronSourceSDKDependencies.xml:17
    implementation 'com.google.android.gms:play-services-appinvite:18.0.0' // Packages/com.google.firebase.dynamic-links/Firebase/Editor/DynamicLinksDependencies.xml:13
    implementation 'com.google.android.gms:play-services-base:17.4.0' // Packages/com.google.firebase.app/Firebase/Editor/AppDependencies.xml:17
    implementation 'com.google.android.gms:play-services-basement:17.2.1' // Assets/IronSource/Editor/IronSourceSDKDependencies.xml:25
    implementation 'com.google.firebase:firebase-analytics:17.5.0' // Packages/com.google.firebase.analytics/Firebase/Editor/AnalyticsDependencies.xml:13
    implementation 'com.google.firebase:firebase-analytics-unity:6.16.1' // Packages/com.google.firebase.analytics/Firebase/Editor/AnalyticsDependencies.xml:18
    implementation 'com.google.firebase:firebase-app-unity:6.16.1' // Packages/com.google.firebase.app/Firebase/Editor/AppDependencies.xml:22
    implementation 'com.google.firebase:firebase-auth:19.3.2' // Packages/com.google.firebase.auth/Firebase/Editor/AuthDependencies.xml:13
    implementation 'com.google.firebase:firebase-auth-unity:6.16.1' // Packages/com.google.firebase.auth/Firebase/Editor/AuthDependencies.xml:20
    implementation 'com.google.firebase:firebase-common:19.3.1' // Packages/com.google.firebase.app/Firebase/Editor/AppDependencies.xml:13
    implementation 'com.google.firebase:firebase-config:19.2.0' // Packages/com.google.firebase.remote-config/Firebase/Editor/RemoteConfigDependencies.xml:7
    implementation 'com.google.firebase:firebase-config-unity:6.16.1' // Packages/com.google.firebase.remote-config/Firebase/Editor/RemoteConfigDependencies.xml:13
    implementation 'com.google.firebase:firebase-crashlytics:17.2.2' // Packages/com.google.firebase.crashlytics/Firebase/Editor/CrashlyticsDependencies.xml:13
    implementation 'com.google.firebase:firebase-crashlytics-unity:6.16.1' // Packages/com.google.firebase.crashlytics/Firebase/Editor/CrashlyticsDependencies.xml:20
    implementation 'com.google.firebase:firebase-database:19.4.0' // Packages/com.google.firebase.database/Firebase/Editor/DatabaseDependencies.xml:13
    implementation 'com.google.firebase:firebase-database-unity:6.16.1' // Packages/com.google.firebase.database/Firebase/Editor/DatabaseDependencies.xml:20
    implementation 'com.google.firebase:firebase-dynamic-links-unity:6.16.1' // Packages/com.google.firebase.dynamic-links/Firebase/Editor/DynamicLinksDependencies.xml:20
    implementation 'com.google.firebase:firebase-messaging:20.2.4' // Packages/com.google.firebase.messaging/Firebase/Editor/MessagingDependencies.xml:13
    implementation 'com.google.firebase:firebase-messaging-unity:6.16.1' // Packages/com.google.firebase.messaging/Firebase/Editor/MessagingDependencies.xml:20
    implementation 'com.google.games:gpgs-plugin-support:0.10.06' // Assets/GooglePlayGames/Editor/GooglePlayGamesPluginDependencies.xml:11
    implementation 'com.ironsource.adapters:adcolonyadapter:4.3.4' // Assets/IronSource/Editor/ISAdColonyAdapterDependencies.xml:16
    implementation 'com.ironsource.adapters:admobadapter:4.3.14' // Assets/IronSource/Editor/ISAdMobAdapterDependencies.xml:16
    implementation 'com.ironsource.adapters:facebookadapter:4.3.23' // Assets/IronSource/Editor/ISFacebookAdapterDependencies.xml:16
    implementation 'com.ironsource.adapters:tapjoyadapter:4.1.14' // Assets/IronSource/Editor/ISTapJoyAdapterDependencies.xml:8
    implementation 'com.ironsource.adapters:unityadsadapter:4.3.7' // Assets/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:9
    implementation 'com.ironsource.adapters:vungleadapter:4.3.6' // Assets/IronSource/Editor/ISVungleAdapterDependencies.xml:16
    implementation 'com.ironsource.sdk:mediationsdk:7.0.3.1' // Assets/IronSource/Editor/IronSourceSDKDependencies.xml:9
    implementation 'com.parse.bolts:bolts-android:1.4.0' // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:4
    implementation 'com.tapjoy:tapjoy-android-sdk:12.7.0' // Assets/IronSource/Editor/ISTapJoyAdapterDependencies.xml:15
    implementation 'com.unity3d.ads:unity-ads:3.5.0' // Assets/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:16
    implementation 'com.vungle:publisher-sdk-android:6.8.1' // Assets/IronSource/Editor/ISVungleAdapterDependencies.xml:8
}
android {
  packagingOptions {
      exclude ('/lib/armeabi/*' + '*')
      exclude ('/lib/mips/*' + '*')
      exclude ('/lib/mips64/*' + '*')
      exclude ('/lib/x86/*' + '*')
   exclude ('/lib/x86_64/*' + '*')
  }
}

This is the Assets > External Dependency Manager > Android Resolver > Display Libraries Seems to work ok now. not sure what changed...

patm1987 commented 3 years ago

So interesting, it's just working now? Does anyone else with this issue find that it resolves itself like this?

lfg-ryan commented 3 years ago

Still broken for me with a fresh force resolve. I did however forget to follow up that the technique from the other bug works. I downloaded the 19.2.0, renamed it to 20.0.0 and it works. As mentioned it would be great to get this working for Cloud Build purposes where that fix is not really an option in a Resolve on build world.

Here are the details. Resolved to config-20.0.0

([rootProject] + (rootProject.subprojects as List)).each { project -> project.repositories { def unityProjectPath = $/file:///**DIR_UNITYPROJECT**/$.replace("\\", "/") maven { url "https://maven.google.com" } maven { url "https://jcenter.bintray.com/" // Assets/GoogleMobileAds/Editor/AppLovinMediationDependencies.xml:7, Assets/GoogleMobileAds/Editor/FacebookMediationDependencies.xml:7, Assets/GoogleMobileAds/Editor/IronSourceMediationDependencies.xml:8, Assets/GoogleMobileAds/Editor/UnityMediationDependencies.xml:8 } maven { url "https://maven.google.com/" // Assets/GoogleMobileAds/Editor/GoogleMobileAdsDependencies.xml:7 } maven { url "https://jcenter.bintray.com" // Assets/GoogleMobileAds/Editor/VungleMediationDependencies.xml:7 } maven { url (unityProjectPath + "/Library/PackageCache/com.google.firebase.functions@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.functions/Firebase/Editor/FunctionsDependencies.xml:20 } maven { url (unityProjectPath + "/Library/PackageCache/com.google.firebase.app@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.app/Firebase/Editor/AppDependencies.xml:22 } maven { url (unityProjectPath + "/Library/PackageCache/com.google.firebase.auth@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.auth/Firebase/Editor/AuthDependencies.xml:20 } maven { url (unityProjectPath + "/Library/PackageCache/com.google.firebase.messaging@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.messaging/Firebase/Editor/MessagingDependencies.xml:20 } maven { url (unityProjectPath + "/Library/PackageCache/com.google.firebase.crashlytics@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.crashlytics/Firebase/Editor/CrashlyticsDependencies.xml:20 } maven { url (unityProjectPath + "/Library/PackageCache/com.google.firebase.dynamic-links@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.dynamic-links/Firebase/Editor/DynamicLinksDependencies.xml:20 } maven { url (unityProjectPath + "/Library/PackageCache/com.google.firebase.instance-id@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.instance-id/Firebase/Editor/InstanceIdDependencies.xml:20 } maven { url (unityProjectPath + "/Library/PackageCache/com.google.firebase.database@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.database/Firebase/Editor/DatabaseDependencies.xml:20 } maven { url (unityProjectPath + "/Library/PackageCache/com.google.firebase.remote-config@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.remote-config/Firebase/Editor/RemoteConfigDependencies.xml:20 } maven { url (unityProjectPath + "/Library/PackageCache/com.google.firebase.analytics@6.16.1/Firebase/m2repository") // Packages/com.google.firebase.analytics/Firebase/Editor/AnalyticsDependencies.xml:18 } maven { url "https://dl.bintray.com/ironsource-mobile/android-sdk" // Assets/GoogleMobileAds/Editor/IronSourceMediationDependencies.xml:8 } mavenLocal() jcenter() mavenCentral() } } dependencies { implementation 'androidx.appcompat:appcompat:1.1.0' // Assets/Plugins/StansAssets/NativePlugins/AndroidNativePro/Editor/Dependencies/AN_Dependencies.xml:4 implementation 'com.android.installreferrer:installreferrer:1.1.2' // Assets/AppsFlyer/Editor/AppsFlyerDependencies.xml:10 implementation 'com.appsflyer:af-android-sdk:5.3.0' // Assets/AppsFlyer/Editor/AppsFlyerDependencies.xml:6 implementation 'com.appsflyer:unity-wrapper:5.3.0' // Assets/AppsFlyer/Editor/AppsFlyerDependencies.xml:8 implementation 'com.google.ads.mediation:applovin:9.13.0.0' // Assets/GoogleMobileAds/Editor/AppLovinMediationDependencies.xml:7 implementation 'com.google.ads.mediation:facebook:5.9.0.2' // Assets/GoogleMobileAds/Editor/FacebookMediationDependencies.xml:7 implementation 'com.google.ads.mediation:ironsource:6.17.0.0' // Assets/GoogleMobileAds/Editor/IronSourceMediationDependencies.xml:8 implementation 'com.google.ads.mediation:unity:3.4.6.1' // Assets/GoogleMobileAds/Editor/UnityMediationDependencies.xml:8 implementation 'com.google.ads.mediation:vungle:6.4.11.1' // Assets/GoogleMobileAds/Editor/VungleMediationDependencies.xml:7 implementation 'com.google.android.gms:play-services-ads:19.2.0' // Assets/GoogleMobileAds/Editor/GoogleMobileAdsDependencies.xml:7 implementation 'com.google.android.gms:play-services-appinvite:18.0.0' // Packages/com.google.firebase.dynamic-links/Firebase/Editor/DynamicLinksDependencies.xml:13 implementation 'com.google.android.gms:play-services-base:17.4.0' // Packages/com.google.firebase.app/Firebase/Editor/AppDependencies.xml:17 implementation 'com.google.code.gson:gson:2.8.5' // Assets/Plugins/StansAssets/NativePlugins/AndroidNativePro/Editor/Dependencies/AN_Dependencies.xml:3 implementation 'com.google.firebase:firebase-analytics:17.5.0' // Packages/com.google.firebase.analytics/Firebase/Editor/AnalyticsDependencies.xml:13 implementation 'com.google.firebase:firebase-analytics-unity:6.16.1' // Packages/com.google.firebase.analytics/Firebase/Editor/AnalyticsDependencies.xml:18 implementation 'com.google.firebase:firebase-app-unity:6.16.1' // Packages/com.google.firebase.app/Firebase/Editor/AppDependencies.xml:22 implementation 'com.google.firebase:firebase-auth:19.3.2' // Packages/com.google.firebase.auth/Firebase/Editor/AuthDependencies.xml:13 implementation 'com.google.firebase:firebase-auth-unity:6.16.1' // Packages/com.google.firebase.auth/Firebase/Editor/AuthDependencies.xml:20 implementation 'com.google.firebase:firebase-common:19.3.1' // Packages/com.google.firebase.app/Firebase/Editor/AppDependencies.xml:13 implementation 'com.google.firebase:firebase-config:19.2.0' // Packages/com.google.firebase.remote-config/Firebase/Editor/RemoteConfigDependencies.xml:13 implementation 'com.google.firebase:firebase-config-unity:6.16.1' // Packages/com.google.firebase.remote-config/Firebase/Editor/RemoteConfigDependencies.xml:20 implementation 'com.google.firebase:firebase-crashlytics:17.2.2' // Packages/com.google.firebase.crashlytics/Firebase/Editor/CrashlyticsDependencies.xml:13 implementation 'com.google.firebase:firebase-crashlytics-unity:6.16.1' // Packages/com.google.firebase.crashlytics/Firebase/Editor/CrashlyticsDependencies.xml:20 implementation 'com.google.firebase:firebase-database:19.4.0' // Packages/com.google.firebase.database/Firebase/Editor/DatabaseDependencies.xml:13 implementation 'com.google.firebase:firebase-database-unity:6.16.1' // Packages/com.google.firebase.database/Firebase/Editor/DatabaseDependencies.xml:20 implementation 'com.google.firebase:firebase-dynamic-links-unity:6.16.1' // Packages/com.google.firebase.dynamic-links/Firebase/Editor/DynamicLinksDependencies.xml:20 implementation 'com.google.firebase:firebase-functions:19.1.0' // Packages/com.google.firebase.functions/Firebase/Editor/FunctionsDependencies.xml:13 implementation 'com.google.firebase:firebase-functions-unity:6.16.1' // Packages/com.google.firebase.functions/Firebase/Editor/FunctionsDependencies.xml:20 implementation 'com.google.firebase:firebase-iid:20.2.4' // Packages/com.google.firebase.instance-id/Firebase/Editor/InstanceIdDependencies.xml:13 implementation 'com.google.firebase:firebase-instance-id-unity:6.16.1' // Packages/com.google.firebase.instance-id/Firebase/Editor/InstanceIdDependencies.xml:20 implementation 'com.google.firebase:firebase-messaging:20.2.4' // Packages/com.google.firebase.messaging/Firebase/Editor/MessagingDependencies.xml:13 implementation 'com.google.firebase:firebase-messaging-unity:6.16.1' // Packages/com.google.firebase.messaging/Firebase/Editor/MessagingDependencies.xml:20 } android { packagingOptions { exclude ('/lib/armeabi/*' + '*') exclude ('/lib/mips/*' + '*') exclude ('/lib/mips64/*' + '*') exclude ('/lib/x86/*' + '*') exclude ('/lib/x86_64/*' + '*') } }

Debug on a force resolve attached. AndroidResolveLog.txt

I am putting the files in Assets/Plugins/Android and not using a custom gradle.

lfg-ryan commented 3 years ago

@cszhongit @lfg-ryan Putting this file in a folder called Editor should solve the problem for now. Feel free to share improvements to the code and make it more generic:

#if UNITY_ANDROID

using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml.Linq;

using UnityEditor;
using UnityEditor.Build;
#if UNITY_2018_1_OR_NEWER
using UnityEditor.Build.Reporting;
#endif
using UnityEngine;

using System;
using UnityEditor.PackageManager;
//using System.Threading.Tasks;

#if UNITY_2018_1_OR_NEWER
public class PackageCacheDependencyProcessor : IPreprocessBuildWithReport
#else
public class PackageCacheDependencyProcessor : IPreprocessBuild
#endif
{

    private const string FIREBASE_UNITY_VERSION = "6.16.1";

    public int callbackOrder { get { return 0; } }

#if UNITY_2018_1_OR_NEWER
    public void OnPreprocessBuild(BuildReport report)
#else
    public void OnPreprocessBuild(BuildTarget target, string path)
#endif
    {
        string packageCacheFolder = Path.GetFullPath(Path.Combine(Application.dataPath, "../Library/PackageCache"));

        Dictionary<string, string> androidPackageToWantedVersion = new Dictionary<string, string>();
        Dictionary<string, string> androidPackageToDeppendencyFileName = new Dictionary<string, string>();
        Dictionary<string, string> androidPackageNameIdToDeppendencySpecPrefix = new Dictionary<string, string>();

        string packageNameID = "com.google.firebase.remote-config";
        string deppendencySpecPrefix = "com.google.firebase:firebase-config";
        androidPackageNameIdToDeppendencySpecPrefix[packageNameID] = deppendencySpecPrefix;
        androidPackageToWantedVersion[packageNameID] = "19.2.0";
        androidPackageToDeppendencyFileName[packageNameID] = "remoteConfigDependencies.xml";

        foreach (var packageNameIDKey in androidPackageToWantedVersion.Keys)
        {            
            var package = UnityEditor.PackageManager.Client.Search(packageNameID, true);
            //if (package == null || package.Result == null || package.Result.Count() == 0)
            //{
            //    StopBuildWithMessage(packageNameID + " package is missing. check installed packages or that name matches package.");
            //}
            for (var i = 0; i < 100; ++i)
            {

                if (package.Status != StatusCode.InProgress) break;

                System.Threading.Thread.Sleep(100);

            }
            if (package.Status != StatusCode.Success)
            {
                StopBuildWithMessage(packageNameID + " package is missing. check installed packages or that name matches package. " + $"{package.Status}/{package.Error?.message}");
            }
            if (package.Result.Count() == 0)
            {
                StopBuildWithMessage(packageNameID + " package is missing. check installed packages or that name matches package.");
            }

            var result = package.Result.First();
            if (result.version != FIREBASE_UNITY_VERSION)
            {
                StopBuildWithMessage(packageNameIDKey + " used version " + result.version + " doesnt match version defined in PackageCacheDependencyProcessor " + FIREBASE_UNITY_VERSION + " - adjust dictionary in code.");

            }
            //result.resolvedPath
            string firebaseFolder = result.resolvedPath; // string.Format("{0}@{1}", packageNameIDKey, FIREBASE_UNITY_VERSION); // "com.google.firebase.remote-config@6.16.1";            
            if (!androidPackageToDeppendencyFileName.ContainsKey(packageNameIDKey))
            {
                StopBuildWithMessage(packageNameIDKey + " is missing deppendency file name. Add to dictionary in code.");
            }
            string dependencyFileName = androidPackageToDeppendencyFileName[packageNameIDKey]; // "remoteConfigDependencies.xml";
            string dependenciesXmlPath = Path.Combine(packageCacheFolder, firebaseFolder,"Firebase","Editor", dependencyFileName);

            XDocument dependencies = null;
            try
            {
                dependencies = XDocument.Load(dependenciesXmlPath);
            }
    #pragma warning disable 0168
            catch (IOException e)
    #pragma warning restore 0168
            {
                StopBuildWithMessage(dependencyFileName + " is missing. Try re-importing the plugin.");
            }

            XElement elemDependencies = dependencies.Element("dependencies");
            if (elemDependencies == null)
            {
                StopBuildWithMessage(dependencyFileName + " is not valid. Try re-importing the plugin.");
            }

            XElement elemAndroidPackages = elemDependencies.Element("androidPackages");
            if (elemAndroidPackages == null)
            {
                StopBuildWithMessage(dependencyFileName + " is not valid. Try re-importing the plugin.");
            }

            IEnumerable<XElement> androidPackages = elemAndroidPackages.Descendants()
                    .Where(elem => elem.Name.LocalName.Equals("androidPackage"));
            string androidPackageNamePrefix = packageNameIDKey + ":"; // "com.google.firebase:firebase-config:"
            if (androidPackageNameIdToDeppendencySpecPrefix.ContainsKey(packageNameID))
            {
                androidPackageNamePrefix = androidPackageNameIdToDeppendencySpecPrefix[packageNameID] + ":";
            }
            var androidPackageElement = GetAndroidPackageElement(androidPackages, androidPackageNamePrefix);
            if (androidPackageElement != null)
            {
                string newspec = string.Format("{0}[{1}]",androidPackageNamePrefix, androidPackageToWantedVersion[packageNameIDKey]);
                androidPackageElement.SetAttributeValue("spec", newspec); // androidPackageElement.SetAttributeValue("spec", "com.google.firebase:firebase-config:[19.2.0]");
            }
            else
            {
                Debug.LogWarning("couldnt find spec " + androidPackageNamePrefix+  " in " + dependencyFileName);
            }
            elemDependencies.Save(dependenciesXmlPath);
        }

    }
    private XElement GetAndroidPackageElement(IEnumerable<XElement> androidPackages, string SpecNamePre)
    {
        foreach (XElement elem in androidPackages)
        {
            IEnumerable<XAttribute> attrs = elem.Attributes();
            foreach (XAttribute attr in attrs)
            {
                if (attr.Name.LocalName.Equals("spec") && attr.Value.StartsWith(SpecNamePre))
                {
                    return elem;
                }
            }
        }
        return null;
    }

    private void StopBuildWithMessage(string message)
    {
        string prefix = "[PackageCacheDependencyProcessor] ";
#if UNITY_2017_1_OR_NEWER
        throw new BuildPlayerWindow.BuildMethodException(prefix + message);
#else
        // Unity 5.6 or lower does not support BuildMethodException.
        // Log an error log instead.
        Debug.LogError(prefix + message);
#endif
    }
}

#endif

This also worked great for me. I added the file. I now can have resolve on build checked and Unity Cloud Build works just fine. Thank you very much.

chkuang-g commented 3 years ago

Analyzing all these recent posts, I think there are two key issues.

I think the first step would be changing how Firebase specify Android dependency ranges in Dependencies.xml, so that Firebase will not be broken by EDM4U auto-resolution mechanism.

Note that this will NOT prevent future dependency conflict. Also, this cannot resolve when any team makes breaking changes in patch release, which is unlikely to happen but you'll never know.

Guillogika commented 3 years ago

Same issue for me. I ended up modifying the version of remote config inside the RemoteConfigDependencies.xml file directly for now. Is there a solution coming up?

Whyser commented 3 years ago

Same issue, I just started using the RemoteConfig 7.0.0 using Unity Package Manager (released 2nd Dec), built and stumbled upon same error as OP. For now I went into mainTemplate.gradle and changed to 19.2.0.

carlplaylab commented 3 years ago

I also started Firebase 7.0.0 and I'm getting similar issues on remote config on Android. IOS seems fine.

trinityxstudio commented 3 years ago

Me too. Having exactly same issue if I am using firebase-config:20.0.0

emreedemir commented 3 years ago

Is there any complete solution for this problem ? firebase-config 20.0.0 I haven't reached a solution for days

[Edit] making mainTempleta.gradle and changed to 19.20.0 fixed problem for now