Search Unity

Addressables and App Thinning / App Slicing on iOS + Android App Bundle

Discussion in 'Addressables' started by 5argon, Oct 31, 2018.

  1. 5argon

    5argon

    Joined:
    Jun 10, 2013
    Posts:
    1,019
    iOS do app slicing so that non-iPad may get lower resolution texture. Previously in Unity this mechanism is heavily relying on adding a tag on the (old) asset bundle system then setup in Player Settings > Variant Map For App Slicing

    https://docs.unity3d.com/Manual/AppThinning.html

    https://blogs.unity3d.com/2015/12/28/optimizing-ios-app-size-with-resource-slicing/

    Now that Addressables system make asset bundle too and pack together with the app, what is the recommended way to utilize app slicing now? Any newer ways going forward?

    My idea use case would be :
    1. I have some textures I made into a SpriteAtlas. My atlas has a variant with smaller scale.
    2. 2 atlases are in the separated Addressable group. Both has the same addressable key for load. The original separated textures are not in any of the addressable group.
    3. When building to Xcode they would be both in the Xcode project's output side of StreamingAssets/com.unity.addressables, and then both uploaded to the store. Later when player download the game they would only get one Addressable bundle according to their device.
    4. In the game I use Addressables.LoadAsset<SpriteAtlas>(key) with the same key. Because only one bundle comes with the app thining it would load the appropriate one.

    The onto Android, I am also wondering how this would bridge to Android's new App Bundle / Dynamic Delivery.

    AAB works by assembling many smaller split APK into one large app. Ideally I would like each of the Addressables group to be its own split APK which player will get depending on device's resolution via the new App Bundle support.

    https://medium.com/google-developer-experts/exploring-the-android-app-bundle-ca16846fa3d7

    You can see it is able to split up by density (hdpi, mdpi, ldpi, etc.) Looks like the split was automatic based on `res/` folder's qualifier (https://developer.android.com/guide/topics/resources/providing-resources#BestMatch)

    But Addressables output (StreamingAssets's content) was put in `main/assets/com.unity.addressables/...` and not `main/res`. I believe it is not possible for the bundle builder to split anything in the `main/assets/`. It would be great if addressable can utilize this too. There is `main/assets/raw` folder support which could be appropriate for the bundle to be in.
     
    Last edited: Oct 31, 2018
    icatt23 likes this.
  2. unity_bill

    unity_bill

    Unity Technologies

    Joined:
    Apr 11, 2017
    Posts:
    361
    Thank you for reaching out. All of the things you are describing can be done by extending the addressables system with custom providers, and in some instances, a custom build script. Long term, we definitely don't want users to have to create custom systems to handle this, but for now you must. Apple ODR support is probably one of the first one's we'll tackle, but all of it is on the list.

    -Bill
     
    5argon likes this.
  3. Armin262

    Armin262

    Joined:
    Jan 29, 2015
    Posts:
    3
    Hi,

    @unity_bill since it's already 4 months from your replay, I'm wondering how far is Apple ODR addressable builder and provider?

    We're working with addressable and we want to put it together with Apple ODR so I'm wondering if it's better to write our own build and provider script or are you already finalizing it?

    Thanks, Armin