標籤:android http ar 使用 java 檔案 資料 on 問題
本節課程的目的:學會換膚的方案及實現,掌握不同換膚方案的優缺點及適用場合。
希望各位同學做到:學習某一個技巧就掌握透徹,多練習。最好舉一反三、觸類旁通,掌握分析問題解決問題的思路和方法。
我講解的是原理以及實現的關鍵技術點,細節、最佳化及與課程主題不相關的或初級的內容可能不會講解。這是免費培訓,精力有限,暫時只能做到讓普通的變優秀,讓優秀的變卓越。你要是已經卓越了來教教我吧。暫時不做入門培訓。
國內有很多的軟體都支援皮膚定製,這也是與國外軟體重大不同之一,國外使用者注重社交、郵件等功能,國內使用者則重視音樂、小說、皮膚等功能,本節課程就來講解Android應用程式如何?換膚功能。
http://dict.baidu.com/s?wd=%E3%80%90%E5%88%98%E5%BF%83%E8%AF%ADQQ%3A2911834916+100%25%E4%B8%B0%E8%83%B8%E6%88%90%E5%8A%9F+%E6%B8%85%E6%9C%9D%E5%AE%AB%E5%BB%B7%E4%B8%B0%E8%83%B8%E8%8C%B6%E3%80%91%E4%B8%80%E4%B8%AA%E6%9C%88%E5%A2%9E%E5%8A%A0%E4%B8%80%E4%B8%AA%E7%BD%A9%E6%9D%AF
軟體換膚從功能上可以劃分三種:
1) 軟體內建多個皮膚,不可由使用者增加或修改;
最低的自由度,軟體實現相對於後兩種最容易。
2) 官方提供皮膚供下載,使用者可以使用下載的皮膚;
使用者可選擇下載自己喜歡的皮膚,有些玩家會破解皮膚的定製方法,自己做皮膚使用,或者傳到網上給大家用。
3) 官方提供皮膚製作工具或方法,使用者可自製皮膚。
http://dict.baidu.com/s?wd=%E3%80%90%E5%88%98%E5%BF%83%E8%AF%AD%E4%B8%B0%E8%83%B8%E8%8C%B6QQ%3A2911834916+100%25%E4%B8%B0%E8%83%B8%E6%88%90%E5%8A%9F+%E4%B8%80%E4%B8%AA%E6%9C%88%E5%A2%9E%E5%8A%A0%E4%B8%80%E4%B8%AA%E7%BD%A9%E6%9D%AF%E3%80%91
這種方式使使用者有參與感,自由度較高。使用者可根據自己的喜好定製軟體的皮膚。有些軟體官網提供皮膚定製的工具或者方法,我建議最好有可視化帶嚮導的工具。使用者只要自己找一些圖片、修改文字的字型替代就可以了。使用者可以上傳自製的皮膚,提供其他使用者下載,還可以賺得一些虛擬貨幣或者獎品什麼的。這種一般都是打包為.zip格式的。副檔名可由各公司自訂,有製作工具的話直接匯出來最方便。
首先我們要弄清楚換膚的定義,軟體皮膚包括表徵圖、字型、布局、互動風格等,換膚就是換掉皮膚包括的部分或所有資源。
前面提到的三種皮膚,從軟體實現上來看,它們的本質區別是皮膚是否內建到應用程式中。對於內建的實現比較簡單,只要在開發應用的過程中設計幾套皮膚供使用者選擇。這裡用到的知識不超過Android基礎,不詳細講解。
本節課程重點講解如何?皮膚與應用程式分離。
皮膚一般含有多個檔案,例片、配置等檔案,分散的檔案不利於傳輸和使用,最好打包。打包的格式一般選擇zip格式。這裡分兩種情況,一種是apk,例如AdwLauncher,它的案頭皮膚格式是一個apk;另一種是自訂副檔名,例如墨跡天氣皮膚副檔名是mja,搜狗IME的皮膚副檔名是sga,它們的檔案格式實際上都是zip。
下面我們分別講解。
一.apk格式
現在的問題變成了一個應用如何讀取另一個apk中的資源。
在android系統中,apk之間可以相互讀取資料的條件是:有同樣的簽名,並且AndroidManifest.xml檔案中配置的android:sharedUserId屬性值相同,那麼兩個apk運行在同一個進程中,可以互相訪問任意資料。
方法如下:
1) 應用程式和皮膚程式的AndroidManifest.xml中配置
例如: android:sharedUserId="org.yuchen"
2) 檔案與應用apk中對同一功能的皮膚檔案名稱要一致
例如:應用程式的背景圖片路徑:/SkinDemo/res/drawable-hdpi/bg.png
那麼皮膚apk中的背景圖片檔案路徑也應該是:
CustomSkin/res/drawable-hdpi/bg.png
3)訪問資源的方法
[java] view plaincopyprint?
Context context = createPackageContext("com.yuchen.customskin", Context.CONTEXT_IGNORE_SECURITY);
擷取到org.yuchen.customskin對應的Context,通過返回的context對象就可以訪問到org.yuchen.customskin中的任何資源。
例如:應用apk要獲得皮膚apk中的bg.png,
[java] view plaincopyprint?
Drawable drawable = context.getResources().getDrawable(R.drawable.bg);
這樣就得到了圖片的引用,其他xml資源檔的擷取方式也是類似的。
二.自訂副檔名的zip格式的皮膚
技術點在於如何去讀取zip檔案中的資源以及皮膚檔案存放策略。
方案:如果軟體每次啟動都去讀取SD卡上的皮膚檔案,速度會比較慢。較好的做法是提供一個皮膚設定的介面,使用者選擇了哪一個皮膚,就把那個皮膚檔案解壓縮到”/data/data/[package name]/skin”路徑下,這樣不需要跨儲存空間讀取,速度較快,而且不需要每次都去zip壓縮包中讀取,不依賴SD卡中的檔案,即使皮膚壓縮包檔案被刪除了也沒有關係。
實現方法:
1. 在軟體的協助或者官網的協助中提示使用者將皮膚檔案拷貝到SD卡指定路徑下。
2. 在軟體中提供皮膚設定介面。可以在菜單或者在設定中。可參考墨跡、搜狗IME、QQ等支援換膚的軟體。
3. 載入指定路徑下的皮膚檔案,讀取其中的縮圖,在皮膚設定介面中顯示,將使用者選中的皮膚檔案解壓縮到”/data/data/[package name]/skin”路徑下。
4. 軟體中優先讀取”/data/data/[package name]/skin/”路徑下的資源。如果沒有則使用apk中的資源。
教程: Android應用如何?換膚功能