[IN-75879] Random failures when building Addressables

Using Addressables 1.21.20
Unity 2022.3.25

Sometimes Addressables fails to build with these errors logged at the end of the process.

Object reference not set to an instance of an object
UnityEngine.StackTraceUtility:ExtractStackTrace ()
UnityEngine.DebugLogHandler:LogFormat (UnityEngine.LogType,UnityEngine.Object,string,object[])
UnityEngine.Logger:Log (UnityEngine.LogType,object)
UnityEngine.Debug:LogError (object)
UnityEditor.AddressableAssets.Build.DataBuilders.BuildScriptBase:BuildData<UnityEditor.AddressableAssets.Build.AddressablesPlayerBuildResult> (UnityEditor.AddressableAssets.Build.AddressablesDataBuilderInput) (at ./Library/PackageCache/com.unity.addressables@1.21.20/Editor/Build/DataBuilders/BuildScriptBase.cs:102)
UnityEditor.AddressableAssets.Settings.AddressableAssetSettings:BuildPlayerContentImpl (UnityEditor.AddressableAssets.Build.AddressablesDataBuilderInput,bool) (at ./Library/PackageCache/com.unity.addressables@1.21.20/Editor/Settings/AddressableAssetSettings.cs:2847)
UnityEditor.AddressableAssets.Settings.AddressableAssetSettings:BuildPlayerContent (UnityEditor.AddressableAssets.Build.AddressablesPlayerBuildResult&,UnityEditor.AddressableAssets.Build.AddressablesDataBuilderInput) (at ./Library/PackageCache/com.unity.addressables@1.21.20/Editor/Settings/AddressableAssetSettings.cs:2810)
UnityEditor.AddressableAssets.GUI.AddressableAssetsSettingsGroupEditor:OnBuildAddressables (UnityEditor.AddressableAssets.GUI.AddressableAssetsSettingsGroupEditor/BuildMenuContext) (at ./Library/PackageCache/com.unity.addressables@1.21.20/Editor/GUI/AddressableAssetsSettingsGroupEditor.cs:568)
UnityEditor.AddressableAssets.GUI.AddressableAssetsSettingsGroupEditor:OnBuildAddressables (object) (at ./Library/PackageCache/com.unity.addressables@1.21.20/Editor/GUI/AddressableAssetsSettingsGroupEditor.cs:549)
UnityEditor.GenericMenu:CatchMenu (object,string[],int)

(Filename: ./Library/PackageCache/com.unity.addressables@1.21.20/Editor/Build/DataBuilders/BuildScriptBase.cs Line: 102)

Object reference not set to an instance of an object
UnityEngine.StackTraceUtility:ExtractStackTrace ()
UnityEngine.DebugLogHandler:LogFormat (UnityEngine.LogType,UnityEngine.Object,string,object[])
UnityEngine.Logger:Log (UnityEngine.LogType,object)
UnityEngine.Debug:LogError (object)
UnityEditor.AddressableAssets.Settings.AddressableAssetSettings:BuildPlayerContentImpl (UnityEditor.AddressableAssets.Build.AddressablesDataBuilderInput,bool) (at ./Library/PackageCache/com.unity.addressables@1.21.20/Editor/Settings/AddressableAssetSettings.cs:2850)
UnityEditor.AddressableAssets.Settings.AddressableAssetSettings:BuildPlayerContent (UnityEditor.AddressableAssets.Build.AddressablesPlayerBuildResult&,UnityEditor.AddressableAssets.Build.AddressablesDataBuilderInput) (at ./Library/PackageCache/com.unity.addressables@1.21.20/Editor/Settings/AddressableAssetSettings.cs:2810)
UnityEditor.AddressableAssets.GUI.AddressableAssetsSettingsGroupEditor:OnBuildAddressables (UnityEditor.AddressableAssets.GUI.AddressableAssetsSettingsGroupEditor/BuildMenuContext) (at ./Library/PackageCache/com.unity.addressables@1.21.20/Editor/GUI/AddressableAssetsSettingsGroupEditor.cs:568)
UnityEditor.AddressableAssets.GUI.AddressableAssetsSettingsGroupEditor:OnBuildAddressables (object) (at ./Library/PackageCache/com.unity.addressables@1.21.20/Editor/GUI/AddressableAssetsSettingsGroupEditor.cs:549)
UnityEditor.GenericMenu:CatchMenu (object,string[],int)

(Filename: ./Library/PackageCache/com.unity.addressables@1.21.20/Editor/Settings/AddressableAssetSettings.cs Line: 2850)

Addressable content build failure (duration : 0:00:00)
UnityEngine.StackTraceUtility:ExtractStackTrace ()
UnityEngine.DebugLogHandler:LogFormat (UnityEngine.LogType,UnityEngine.Object,string,object[])
UnityEngine.Logger:Log (UnityEngine.LogType,object)
UnityEngine.Debug:LogError (object)
UnityEditor.AddressableAssets.Settings.AddressableAssetSettings:BuildPlayerContentImpl (UnityEditor.AddressableAssets.Build.AddressablesDataBuilderInput,bool) (at ./Library/PackageCache/com.unity.addressables@1.21.20/Editor/Settings/AddressableAssetSettings.cs:2851)
UnityEditor.AddressableAssets.Settings.AddressableAssetSettings:BuildPlayerContent (UnityEditor.AddressableAssets.Build.AddressablesPlayerBuildResult&,UnityEditor.AddressableAssets.Build.AddressablesDataBuilderInput) (at ./Library/PackageCache/com.unity.addressables@1.21.20/Editor/Settings/AddressableAssetSettings.cs:2810)
UnityEditor.AddressableAssets.GUI.AddressableAssetsSettingsGroupEditor:OnBuildAddressables (UnityEditor.AddressableAssets.GUI.AddressableAssetsSettingsGroupEditor/BuildMenuContext) (at ./Library/PackageCache/com.unity.addressables@1.21.20/Editor/GUI/AddressableAssetsSettingsGroupEditor.cs:568)
UnityEditor.AddressableAssets.GUI.AddressableAssetsSettingsGroupEditor:OnBuildAddressables (object) (at ./Library/PackageCache/com.unity.addressables@1.21.20/Editor/GUI/AddressableAssetsSettingsGroupEditor.cs:549)
UnityEditor.GenericMenu:CatchMenu (object,string[],int)

The only option is to close and re-open Unity. Otherwise the errors just keep happening.
This seems to happen more frequently when switching build targets.

Any idea what could be causing this? Some kind of cache issue perhaps?

The errors are not helpful at all.

It seems like you’re encountering an issue with Unity’s Addressable Assets system, specifically related to building failures with errors like “Object reference not set to an instance of an object.” This can be frustrating, especially when it seems to happen more frequently during build target switches. I recommend you to read this https://forum.unity.com/threads/how-to-not-include-certain-addressablegroups-in - mybkexperience-cafe-server-build.1412490/

One possible cause of this issue could indeed be related to cache. Unity’s caching system can sometimes cause unexpected behavior, particularly when it comes to asset management during builds.

Ok, managed to log the exception that occurs. It’s coming from here:

NullReferenceException: Object reference not set to an instance of an object
UnityEditor.AddressableAssets.Build.DataBuilders.BuildScriptPackedMode.SetAssetEntriesBundleFileIdToCatalogEntryBundleFileId (System.Collections.Generic.ICollection`1[T] assetEntries, System.Collections.Generic.Dictionary`2[TKey,TValue] bundleNameToInternalBundleIdMap, UnityEditor.Build.Pipeline.Interfaces.IBundleWriteData writeData, System.Collections.Generic.Dictionary`2[TKey,TValue] locationIdToCatalogEntryMap) (at ./Library/PackageCache/com.unity.addressables@1.21.20/Editor/Build/DataBuilders/BuildScriptPackedMode.cs:957)
UnityEditor.AddressableAssets.Build.DataBuilders.BuildScriptPackedMode.ProcessCatalogEntriesForBuild (UnityEditor.AddressableAssets.Build.DataBuilders.AddressableAssetsBuildContext aaContext, System.Collections.Generic.IEnumerable`1[T] validGroups, UnityEditor.AddressableAssets.Build.AddressablesDataBuilderInput builderInput, UnityEditor.Build.Pipeline.Interfaces.IBundleWriteData writeData, UnityEditor.AddressableAssets.Build.ContentUpdateScript+ContentUpdateContext contentUpdateContext, System.Collections.Generic.Dictionary`2[TKey,TValue] bundleToInternalId, System.Collections.Generic.Dictionary`2[TKey,TValue] locationIdToCatalogEntryMap) (at ./Library/PackageCache/com.unity.addressables@1.21.20/Editor/Build/DataBuilders/BuildScriptPackedMode.cs:580)
UnityEditor.AddressableAssets.Build.DataBuilders.BuildScriptPackedMode.DoBuild[TResult] (UnityEditor.AddressableAssets.Build.AddressablesDataBuilderInput builderInput, UnityEditor.AddressableAssets.Build.DataBuilders.AddressableAssetsBuildContext aaContext) (at ./Library/PackageCache/com.unity.addressables@1.21.20/Editor/Build/DataBuilders/BuildScriptPackedMode.cs:358)
UnityEditor.AddressableAssets.Build.DataBuilders.BuildScriptPackedMode.BuildDataImplementation[TResult] (UnityEditor.AddressableAssets.Build.AddressablesDataBuilderInput builderInput) (at ./Library/PackageCache/com.unity.addressables@1.21.20/Editor/Build/DataBuilders/BuildScriptPackedMode.cs:91)

There’s an Addressable entry that is a Folder but SubAssets array is null

Ok I think I’ve nailed this down to having some Addressable bundles that have IncludeInBuild as false, that contain folder entries.

The BuildScriptPackedMode does not call GatherAllAssets on entries in these excluded groups, which is the method to populate and set the SubAssets array.

When the BuildScriptPackedMode ends, regardless of whether a group is included or not, it’s checking the SubAssets array. And because it isn’t serialized, it’s null.

Will try and get a bug report up

Unless @davidla_unity this is already known?

Bug Submitted: IN-75879

I recommend you to clear caches and restart, but it’s not a consistent fix. I suggest you to read this instead https://forum.unity.com/threads/how-to-not-include-certain-addressablegroups-in- mcdtalks-com-server-build.1412490/ It’s definitely something that needs attention from Unity or Addressables developers. It’s hard to debug when the errors themselves are not very informative.