Addressables errors with Android split binary

We’re using Unity 2020.3.18f1 and Addressables 1.19.4 (we’ve also tried 1.18.15)

Google requires us to split the game up before uploading it to the google play store. We built the game into an .apk and an .obb file and after installing it, the game crashes immediately with Addressables errors.

Installation Procedure:

  • Build the game with split binary option checked
  • adb install game.apk
  • adb push main.4.studio.shortsleeve.game.obb /sdcard/Android/obb/studio.shortsleeve.game/

I verify that the obb file is there, then I run the game and get the following errors.

09-15 10:50:56.639 27740  2255 E Unity   : RemoteProviderException : TextDataProvider : unable to load from url : jar:file:///data/app/~~689q54a8zSXXloEqeqgmbA==/studio.shortsleeve.voodoodetective-XMFOqP0J2uMakI-c6HOVJQ==/base.apk!/assets/aa/settings.json
09-15 10:50:56.639 27740  2255 E Unity   : UnityWebRequest result : ProtocolError : HTTP/1.1 404 Not Found
09-15 10:50:56.639 27740  2255 E Unity   : ResponseCode : 404, Method : GET
09-15 10:50:56.639 27740  2255 E Unity   : url : jar:file:///data/app/~~689q54a8zSXXloEqeqgmbA==/studio.shortsleeve.voodoodetective-XMFOqP0J2uMakI-c6HOVJQ==/base.apk!/assets/aa/settings.json
09-15 10:50:56.639 27740  2255 E Unity   :
09-15 10:50:56.639 27740  2255 E Unity   : System.Action`2:Invoke(T1, T2)
09-15 10:50:56.639 27740  2255 E Unity   : UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationBase`1:set_OperationException(Exception)
09-15 10:50:56.639 27740  2255 E Unity   : UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationBase`1:Complete(TObject, Boolean, Exception, Boolean)
09-15 10:50:56.639 27740  2255 E Unity   : UnityEngine.ResourceManagement.ResourceProviders.InternalOp:CompleteOperation(String, Exception)
09-15 10:50:56.639 27740  2255 E Unity   : UnityEngine.ResourceManagement.ResourceProviders.InternalOp:RequestOperation_completed(AsyncOperation)
09-15 10:50:56.639 27740  2255 E Unity   : System.Action`1:Invoke(T)
09-15 10:50:56.639 27740  2255 E Unity   : UnityEngine.AsyncOperation:InvokeCompletionEvent()
09-15 10:50:56.639 27740  2255 E Unity   :
09-15 10:50:56.640 27740  2255 E Unity   : RuntimeData is null.  Please ensure you have built the correct Player Content.
09-15 10:50:56.640 27740  2255 E Unity   : UnityEngine.ResourceManagement.AsyncOperations.InitalizationObjectsOperation:Execute()
09-15 10:50:56.640 27740  2255 E Unity   : UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationBase`1:InvokeExecute()
09-15 10:50:56.640 27740  2255 E Unity   : System.Action`1:Invoke(T)
09-15 10:50:56.640 27740  2255 E Unity   : UnityEngine.ResourceManagement.AsyncOperations.<>c__DisplayClass57_0:<add_CompletedTypeless>b__0(AsyncOperationHandle`1)
09-15 10:50:56.640 27740  2255 E Unity   : System.Action`1:Invoke(T)
09-15 10:50:56.640 27740  2255 E Unity   : DelegateList`1:Invoke(T)
09-15 10:50:56.640 27740  2255 E Unity   : UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationBase`1:InvokeCompletionEvent()
09-15 10:50:56.640 27740  2255 E Unity   : UnityEngine.ResourceManagement.ResourceManager:ExecuteDeferredCallbacks()
09-15 10:50:56.640 27740  2255 E Unity   : UnityEngine.ResourceManagement.ResourceManager:Update(Single)
09-15 10:50:56.640 27740  2255 E Unity   : System.Action`1:Invoke(T)
09-15 10:50:56.640 27740  2255 E Unity   :
09-15 10:50:56.641 27740  2255 E Unity   : OperationException : Addressables - Unable to load runtime data at location UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle`1[[UnityEngine.AddressableAssets.Initialization.ResourceManagerRuntimeData, Unity.Addressables, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]].
09-15 10:50:56.641 27740  2255 E Unity   : System.Action`2:Invoke(T1, T2)
09-15 10:50:56.641 27740  2255 E Unity   : UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationBase`1:set_OperationException(Exception)
09-15 10:50:56.641 27740  2255 E Unity   : UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationBase`1:Complete(TObject, Boolean, Exception, Boolean)
09-15 10:50:56.641 27740  2255 E Unity   : UnityEngine.AddressableAssets.Initialization.InitializationOperation:Execute()
09-15 10:50:56.641 27740  2255 E Unity   : UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationBase`1:InvokeExecute()
09-15 10:50:56.641 27740  2255 E Unity   : System.Action`1:Invoke(T)
09-15 10:50:56.641 27740  2255 E Unity   : UnityEngine.ResourceManagement.AsyncOperations.<>c__DisplayClass57_0:<add_CompletedTypeless>b__0(AsyncOperationHandle`1)
09-15 10:50:56.641 27740  2255 E Unity   : System.Action`1:Invoke(T)
09-15 10:50:56.641 27740  2255 E Unity   : DelegateList`1:Invoke(T)
09-15 10:50:56.641 27740  2255 E Unity   : UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationBase`1:InvokeCompletionEvent()
09-15 10:50:56.641 27740  2255 E Unity   : UnityEngine.ResourceManag

I’ve just noticed that all called to Resources.Load() seem to be failing to load data.

I’ll kick this to the team for their guidance.

1 Like

Awesome, thanks! We really appreciate any help you can give. We can’t sell our game on Google Play until this issue is resolved.

Hi @VoodooDetective if you inspect the APK file (you can add .zip to the file name to view it), does it contain the assets/aa folder? It might be located in the OBB file instead.

At runtime Addressables will try to load that folder from Application.streamingAssetsPath. Based on your logs, Application.streamingAssetsPath is pointing to the APK.

@pillakirsten Thanks for your reply!

I looked in the APK and it does not contain a folder under assets called “aa.” I opened the OBB archive, and there is a folder called “aa” there. So you’re correct, the addressables and resources and streaming assets are all in the OBB. Which, as I understand it, is expected behavior.

That said, there’s still nothing is loading. If you use the split binary option, addressables stop functioning.

Please let me know what I need to do to make Split Binary and Addressables work together.

Does it work if you do “Build and Run” in Unity instead of installing APK + OBB manually? Similarly, have you tried to upload APK + OBB to the Play store’s test track and install from the Play store directly?

Hi @JuliusM !

Yep, I’ve tried both of those. They both fail identically.
Please let me know if there’s more information I can provide, this has held up testing for several weeks now. It’s become the biggest issue for our company.

What devices are affected? Is it reproducible with all of your test devices or just some of them? I’ve heard about some OBB loading issues on Samsung Galaxy S21 and Pixel 5 devices, but I haven’t seen any bug reports yet. Could you submit a bug report, so our QA would try to reproduce it?

Hi @JuliusM !

Just another update. I’ve tried printing out these two variables in a very simple test project:

        Debug.Log("Streaming Assets Path: " + Application.streamingAssetsPath);
        Debug.Log("Data Path: " + Application.dataPath);

What it printed out was:

Streaming Assets Path: jar:file:///data/app/~~nq_9qkqNnWVGAtQIw7mKnA==/com.DefaultCompany.Myproject-Bsioa18RZ8WMDCVfWBlT1g==/base.apk!/assets
Data Path: /data/app/~~nq_9qkqNnWVGAtQIw7mKnA==/com.DefaultCompany.Myproject-Bsioa18RZ8WMDCVfWBlT1g==/base.apk

Which of course won’t work because those resources are located in the OBB file. So either this is a bug in Unity, or Addressables needs to account for the fact that neither of these two variables will update even if the locations they reference have changed to an OBB file. I can share a that reproduction project with you if that’s helpful.

EDIT: I just saw your last message. I’m currently testing on a Samsung Galaxy S21 Ultra.

Hi @VoodooDetective if you haven’t already, please do submit a bug report with the reproduction project. We’ll take a look at it.

1 Like

Thanks! It’s a bug after all.

https://issuetracker.unity3d.com/is…-obb-when-split-application-binary-is-enabled

1 Like

Perfect thank you!

1 Like