利用資源分割優化iOS包裝大小
来源:互联网 发布:快压mac版 编辑:程序博客网 时间:2024/05/01 12:02
POVILAS KANAPICKAS 原文
App分割(App Slicing)是iOS9.0和tvOS開始加入的一個新功能,主要為了減小主要App包的大小。開發者可以根據不同蘋果設備上傳不同的版本的包到App Store, 只有符合使用者設備的版本才會被下載。
App分割在iOS平台上很有用,因為這將幫助開發者包入更多的資源(Asset)到主要的包內還能不超過100MB。要達到這個目的,你當然也可以採用我們之前介紹的動態載入資源(On-demand Resource)方法。但就代表產品必須連著網路隨時動態下載所需資源,不是很方便做法也需要一些技術。App分割沒有這些問題。
App分割可分為兩類:可執行程式的分割和資源的分割。前者分割後會移除執行檔中不需要的可執行程式。App Store對於所有iOS/tvOS 9.0及以上版本的App會自動執行這動作。而後者會移除不需要的資源,開發者需要設定些東西來達成這個功能,本文將會說明如何實現。
資源分割的主要目標是解決相同資源各種不同形式的使用下減少浪費空間和頻寬,頻繁的重複利用資源是很常發生的,各種不同新舊程度的iOS設備也仍在廣泛使用中,它們硬體版本之間存在許多效能的差異。所以開發者常會因為要在不同設備表現最佳品質需要使用不同的資源(例如:不同解析度的圖片),好照顧到不同效能的設備。在iOS 9.0之前,資源需要包含在主App包中,這既浪費設備空間也浪費頻寬,因為最後只會用到所有資源的一部分。透過App資源分割,用不到的資源都能被排除在外。
資源分割最簡單的方法就是透過Asset Bundle,這是最有效也最簡單的方案。Asset Bundle是Unity內建的功能,效能和載入一般普通檔案的效能沒差別。Asset Bundle也能用於剛剛提到動態載入資源的後端,所以對一個已經使用了動態載入的App要額外幫App瘦身就很方便,反之亦然。當Asset Bundle設定完成後,基本不需要做額外修改就能讓App資源分割。本篇文章不會說明如何使用Asset Bundle,如果你有興趣可以參考這裡。
要使用應用資源分割,開發者必須先指定哪些設備要使用哪些資源,然後在App啟動時載入這些資源,在iOS App開發設定,你需要先在資源目錄裡建立資料集(Data Set)或圖像集(Image Set),設定裝置變數然後指定包含哪些資源。在Unity裡,你需要設定Asset Bundle變數(即多個含有相同資源集的不同包裝)。並在程式中用UnityEditor.iOS.BuildPipeline.collectResources 來註冊所有參與App資源分割的資源包。然後在Player Settings中指定設備要求。最後在App啟動時使用AssetBundle.CreateFromFile 手動載入資源包。
下面兩段範例說明App資源分割的做法:
註冊要使用App資源分割的資源(編輯器腳本)
簡單入門Asset Bundle和App分割的方法就是研究Asset Bundle 範例。我們已經放在BitBucket讓開發者下載,裡面也有詳細描述如何使用這些Demo。
App分割(App Slicing)是iOS9.0和tvOS開始加入的一個新功能,主要為了減小主要App包的大小。開發者可以根據不同蘋果設備上傳不同的版本的包到App Store, 只有符合使用者設備的版本才會被下載。
App分割在iOS平台上很有用,因為這將幫助開發者包入更多的資源(Asset)到主要的包內還能不超過100MB。要達到這個目的,你當然也可以採用我們之前介紹的動態載入資源(On-demand Resource)方法。但就代表產品必須連著網路隨時動態下載所需資源,不是很方便做法也需要一些技術。App分割沒有這些問題。
App分割可分為兩類:可執行程式的分割和資源的分割。前者分割後會移除執行檔中不需要的可執行程式。App Store對於所有iOS/tvOS 9.0及以上版本的App會自動執行這動作。而後者會移除不需要的資源,開發者需要設定些東西來達成這個功能,本文將會說明如何實現。
資源分割的主要目標是解決相同資源各種不同形式的使用下減少浪費空間和頻寬,頻繁的重複利用資源是很常發生的,各種不同新舊程度的iOS設備也仍在廣泛使用中,它們硬體版本之間存在許多效能的差異。所以開發者常會因為要在不同設備表現最佳品質需要使用不同的資源(例如:不同解析度的圖片),好照顧到不同效能的設備。在iOS 9.0之前,資源需要包含在主App包中,這既浪費設備空間也浪費頻寬,因為最後只會用到所有資源的一部分。透過App資源分割,用不到的資源都能被排除在外。
資源分割最簡單的方法就是透過Asset Bundle,這是最有效也最簡單的方案。Asset Bundle是Unity內建的功能,效能和載入一般普通檔案的效能沒差別。Asset Bundle也能用於剛剛提到動態載入資源的後端,所以對一個已經使用了動態載入的App要額外幫App瘦身就很方便,反之亦然。當Asset Bundle設定完成後,基本不需要做額外修改就能讓App資源分割。本篇文章不會說明如何使用Asset Bundle,如果你有興趣可以參考這裡。
要使用應用資源分割,開發者必須先指定哪些設備要使用哪些資源,然後在App啟動時載入這些資源,在iOS App開發設定,你需要先在資源目錄裡建立資料集(Data Set)或圖像集(Image Set),設定裝置變數然後指定包含哪些資源。在Unity裡,你需要設定Asset Bundle變數(即多個含有相同資源集的不同包裝)。並在程式中用UnityEditor.iOS.BuildPipeline.collectResources 來註冊所有參與App資源分割的資源包。然後在Player Settings中指定設備要求。最後在App啟動時使用AssetBundle.CreateFromFile 手動載入資源包。
下面兩段範例說明App資源分割的做法:
註冊要使用App資源分割的資源(編輯器腳本)
using UnityEditor.iOS;#if ENABLE_IOS_APP_SLICINGpublic class BuildResources{ [InitializeOnLoadMethod] static void SetupResourcesBuild() { UnityEditor.iOS.BuildPipeline.collectResources += CollectResources; } static UnityEditor.iOS.Resource[] CollectResources() { return new Resource[] { new Resource("asset-bundle-name").BindVariant("path/to/asset-bundle.hd"), "hd") .BindVariant("path/to/asset-bundle.md"), "md") .BindVariant("path/to/asset-bundle.sd"), "sd"), }; }
在啟動時載入資源包< ...>var bundle = AssetBundle.LoadFromFile("res://asset-bundle-name");// now use AssetBundle APIs to load assets// or Application.LoadLevel to load scenesvar asset = bundle.LoadAsset("Asset");< ...>
簡單入門Asset Bundle和App分割的方法就是研究Asset Bundle 範例。我們已經放在BitBucket讓開發者下載,裡面也有詳細描述如何使用這些Demo。
0 0
- 利用資源分割優化iOS包裝大小
- iOS 安装包大小优化
- iOS包大小分析和减包大小
- iOS ipa包减少大小方法
- 减小unity iOS版包大小方法
- 利用LIBRTMP直播时 更改发送数据的包大小
- 利用LIBRTMP直播时 更改发送数据的包大小
- iphone ios 如何减少安装包的大小
- iphone ios 如何减少安装包的大小
- 怎么减少iOS应用程序安装包大小技巧?
- 【IOS】APP瘦身,减小包大小的方法
- 如何优化Android/iOS应用安装包大小?
- 基于clang插件的一种iOS包大小瘦身方案
- Unity之IOS和Android安装包大小优化
- iOS 如何缩小包体的大小 (IPA)
- iOS Appstore打出的包为啥偏大?怎么样减小iOS包的大小?
- 利用WinRAR 分割压缩文件
- release包分割
- iOS 多线程自己的理解
- EditeText的maxlength中文、字符长度限制
- 关于 jQuery,什么叫隐式迭代(implicit iteration)?
- 使用TCP协议写一个可以上传文件的服务器和客户端
- Android面试回忆录
- 利用資源分割優化iOS包裝大小
- orcale基本函数1_--NULL值校验
- 从无到有系列之Hive-入门操作及简单应用02
- Java微信公众平台开发【番外篇】(七)——公众平台测试帐号的申请
- Tcp上传文件 服务器端
- Android开发之WebView和JS交互详解
- Windows下使用code::blocks开发cocos2dx
- 打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。
- 获取iPhone iPad UDID的方法