quickstart-unity icon indicating copy to clipboard operation
quickstart-unity copied to clipboard

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

Open mgrogin opened this issue 4 years ago • 20 comments

[REQUIRED] Please fill in the following fields:

  • Unity editor version: 2019.4.12f1_____
  • 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:

(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: ``` Assets/Plugins/Android/com.google.firebase.firebase-abt-19.1.0.aar Assets/Plugins/Android/com.google.firebase.firebase-analytics-17.6.0.aar Assets/Plugins/Android/com.google.firebase.firebase-auth-19.4.0.aar Assets/Plugins/Android/com.google.firebase.firebase-config-19.2.0.aar Assets/Plugins/Android/com.google.firebase.firebase-iid-20.3.0.aar Assets/Plugins/Android/com.google.firebase.firebase-messaging-20.3.0.aar


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?

mgrogin avatar Oct 28 '20 16:10 mgrogin

[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.

Vah94 avatar Oct 28 '20 19:10 Vah94

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 avatar Oct 28 '20 22:10 lfg-ryan

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 avatar Oct 28 '20 23:10 lfg-ryan

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.

lfg-ryan avatar Oct 28 '20 23:10 lfg-ryan

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

cszhongit avatar Nov 01 '20 06:11 cszhongit

@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); // "[email protected]";            
            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

mgrogin avatar Nov 01 '20 14:11 mgrogin

@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); // "[email protected]";            
            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!

cszhongit avatar Nov 01 '20 14:11 cszhongit

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.

patm1987 avatar Nov 03 '20 23:11 patm1987

@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.

chkuang-g avatar Nov 04 '20 01:11 chkuang-g

([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/[email protected]/Firebase/m2repository") // Packages/com.google.firebase.app/Firebase/Editor/AppDependencies.xml:22
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/[email protected]/Firebase/m2repository") // Packages/com.google.firebase.auth/Firebase/Editor/AuthDependencies.xml:20
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/[email protected]/Firebase/m2repository") // Packages/com.google.firebase.messaging/Firebase/Editor/MessagingDependencies.xml:20
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/[email protected]/Firebase/m2repository") // Packages/com.google.firebase.crashlytics/Firebase/Editor/CrashlyticsDependencies.xml:20
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/[email protected]/Firebase/m2repository") // Packages/com.google.firebase.dynamic-links/Firebase/Editor/DynamicLinksDependencies.xml:20
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/[email protected]/Firebase/m2repository") // Packages/com.google.firebase.database/Firebase/Editor/DatabaseDependencies.xml:20
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/[email protected]/Firebase/m2repository") // Packages/com.google.firebase.remote-config/Firebase/Editor/RemoteConfigDependencies.xml:13
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/[email protected]/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 avatar Nov 04 '20 14:11 mgrogin

([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/[email protected]/Firebase/m2repository") // Packages/com.google.firebase.app/Firebase/Editor/AppDependencies.xml:22
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/[email protected]/Firebase/m2repository") // Packages/com.google.firebase.auth/Firebase/Editor/AuthDependencies.xml:20
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/[email protected]/Firebase/m2repository") // Packages/com.google.firebase.messaging/Firebase/Editor/MessagingDependencies.xml:20
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/[email protected]/Firebase/m2repository") // Packages/com.google.firebase.crashlytics/Firebase/Editor/CrashlyticsDependencies.xml:20
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/[email protected]/Firebase/m2repository") // Packages/com.google.firebase.dynamic-links/Firebase/Editor/DynamicLinksDependencies.xml:20
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/[email protected]/Firebase/m2repository") // Packages/com.google.firebase.database/Firebase/Editor/DatabaseDependencies.xml:20
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/[email protected]/Firebase/m2repository") // Packages/com.google.firebase.remote-config/Firebase/Editor/RemoteConfigDependencies.xml:13
        }
        maven {
            url (unityProjectPath + "/Library/PackageCache/[email protected]/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...

mgrogin avatar Nov 04 '20 14:11 mgrogin

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

patm1987 avatar Nov 09 '20 18:11 patm1987

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/[email protected]/Firebase/m2repository") // Packages/com.google.firebase.functions/Firebase/Editor/FunctionsDependencies.xml:20 } maven { url (unityProjectPath + "/Library/PackageCache/[email protected]/Firebase/m2repository") // Packages/com.google.firebase.app/Firebase/Editor/AppDependencies.xml:22 } maven { url (unityProjectPath + "/Library/PackageCache/[email protected]/Firebase/m2repository") // Packages/com.google.firebase.auth/Firebase/Editor/AuthDependencies.xml:20 } maven { url (unityProjectPath + "/Library/PackageCache/[email protected]/Firebase/m2repository") // Packages/com.google.firebase.messaging/Firebase/Editor/MessagingDependencies.xml:20 } maven { url (unityProjectPath + "/Library/PackageCache/[email protected]/Firebase/m2repository") // Packages/com.google.firebase.crashlytics/Firebase/Editor/CrashlyticsDependencies.xml:20 } maven { url (unityProjectPath + "/Library/PackageCache/[email protected]/Firebase/m2repository") // Packages/com.google.firebase.dynamic-links/Firebase/Editor/DynamicLinksDependencies.xml:20 } maven { url (unityProjectPath + "/Library/PackageCache/[email protected]/Firebase/m2repository") // Packages/com.google.firebase.instance-id/Firebase/Editor/InstanceIdDependencies.xml:20 } maven { url (unityProjectPath + "/Library/PackageCache/[email protected]/Firebase/m2repository") // Packages/com.google.firebase.database/Firebase/Editor/DatabaseDependencies.xml:20 } maven { url (unityProjectPath + "/Library/PackageCache/[email protected]/Firebase/m2repository") // Packages/com.google.firebase.remote-config/Firebase/Editor/RemoteConfigDependencies.xml:20 } maven { url (unityProjectPath + "/Library/PackageCache/[email protected]/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 avatar Nov 10 '20 22:11 lfg-ryan

@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); // "[email protected]";            
            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.

lfg-ryan avatar Nov 11 '20 16:11 lfg-ryan

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

  • When mainTemplate.gradle is not used, EDM4U would attempt to figure out the minimum version range of all package, and results in the resolution from firebase-config:19.2.0 to firebase-config:19.2.+, firebase-config:19.+ and eventually to firebase-config:+, potentially due to dependency conflict on some GMS libraries with some other plugins like IronSource. Although EDM4U will print out warning message when this happen, it can be easily missed. And the only way to prevent EDM4U from doing so is to specify a range, like com.google.firebase:firebase-config:[19.2.0]. It is actually pretty tricky problem because giving too restricted range may cause other plugins to break because they may need to use the features from a later or earlier version. Giving too broad range, you may see these recent issues when breaking changes were made. For a middle ground solution, I actually lean toward what @mgrogin proposed: giving a range. But I would like it to be something like [19.2.0, 19.3.0) so that it can at least be locked in with the same minor version. However, when there are many 3rd party plugins in your Unity project, I would say the auto resolution mechanic in EDM4U may not work in your favor. I would recommend you to enable mainTemplate.gradle, disable Auto-Resolution in EDM4U, run resolution manually and work in mainTemplate.gradle to make sure all the version is specify properly.
  • Currently EDM4U does not provide information about which Unity packages are having conflicting dependencies, nor does it offer information about the version ranges required by those packages. This can be a future feature.

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.

chkuang-g avatar Nov 11 '20 20:11 chkuang-g

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?

Guillogika avatar Dec 04 '20 14:12 Guillogika

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.

Whyser avatar Dec 06 '20 13:12 Whyser

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

carlplaylab avatar Dec 10 '20 01:12 carlplaylab

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

trinityxstudio avatar Dec 12 '20 06:12 trinityxstudio

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

emreedemir avatar Dec 15 '20 19:12 emreedemir