universal-tools / UTNotificationsFeedback

7 stars 0 forks source link

UnityCompat.cs line 58 Null Reference when trying to resolve Android dependencies #130

Open rgordon-sg opened 3 years ago

rgordon-sg commented 3 years ago

Step to reproduce

  1. Create a new 2D Unity project in Unity 2018.3.14f1
  2. In Build Settings, change the platform to Android and the Build System to Gradle
  3. In Player Settings, change the Android Target API Level to "API Level 29"
  4. Import UTNotifications v1.8.4 into the project
  5. Assets > Play Services Resolver > Android Resolver > Resolve

The resolve process fails with the following stack trace:

NullReferenceException: Object reference not set to an instance of an object
GooglePlayServices.UnityCompat.VersionFromAndroidSDKVersionsEnum (System.String enumName, System.String fallbackPrefKey, System.Int32 fallbackValue) (at /Users/smiles/dev/src/unity-jar-resolver/source/PlayServicesResolver/src/UnityCompat.cs:58)
GooglePlayServices.UnityCompat.GetAndroidTargetSDKVersion () (at /Users/smiles/dev/src/unity-jar-resolver/source/PlayServicesResolver/src/UnityCompat.cs:116)
GooglePlayServices.PlayServicesResolver.CanEnableJetifierOrPromptUser (System.String titlePrefix) (at /Users/smiles/dev/src/unity-jar-resolver/source/PlayServicesResolver/src/PlayServicesResolver.cs:2240)
GooglePlayServices.PlayServicesResolver.ResolveUnsafe (System.Action`1[T] resolutionComplete, System.Boolean forceResolution, System.Boolean isAutoResolveJob, System.Boolean closeWindowOnCompletion) (at /Users/smiles/dev/src/unity-jar-resolver/source/PlayServicesResolver/src/PlayServicesResolver.cs:1621)
GooglePlayServices.PlayServicesResolver+<ScheduleResolve>c__AnonStorey1E.<>m__3F () (at /Users/smiles/dev/src/unity-jar-resolver/source/PlayServicesResolver/src/PlayServicesResolver.cs:1590)
GooglePlayServices.PlayServicesResolver.ExecuteNextResolveJob () (at /Users/smiles/dev/src/unity-jar-resolver/source/PlayServicesResolver/src/PlayServicesResolver.cs:1449)
GooglePlayServices.PlayServicesResolver.ScheduleResolve (System.Boolean forceResolution, System.Boolean closeWindowOnCompletion, System.Action`1[T] resolutionCompleteWithResult, System.Boolean isAutoResolveJob) (at /Users/smiles/dev/src/unity-jar-resolver/source/PlayServicesResolver/src/PlayServicesResolver.cs:1603)
GooglePlayServices.PlayServicesResolver.ExecuteMenuResolve (System.Boolean forceResolution) (at /Users/smiles/dev/src/unity-jar-resolver/source/PlayServicesResolver/src/PlayServicesResolver.cs:1810)
GooglePlayServices.PlayServicesResolver.MenuResolve () (at /Users/smiles/dev/src/unity-jar-resolver/source/PlayServicesResolver/src/PlayServicesResolver.cs:1825)

So this seems to be an issue with an older version of the Play Services Resolver not being able to handle API level 29 or greater in Unity 2018.3.14. I'm curious if later versions of Unity exhibit the same problem.

rgordon-sg commented 3 years ago

I was able to replicate this in Unity 2019.4.7 as well.

rgordon-sg commented 3 years ago

This seems to be an issue with the External Dependency Manager for Unity. Version 1.2.129 is what is included in the latest version of the UTNotifications plugin. Version 1.2.137 of the External Dependency Manager for Unity changed the name of the package, which makes it harder to try to integrate new versions of the External Dependency Manager into an existing version of UTNotifications in a Unity project. The fix for this bug seems to be in version 1.2.145, but it is unclear if I, as an end-user of UTNotifications, can easily switch to the newer version of the External Dependency Manager for Unity.

With Google requiring new versions of Android apps to target Android SDK 29 (aka Android 10) as of Nov 2, 2020, this bug will become a blocker for distributing our app.