Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android下apkplug通用主題(皮膚)切換解決方案之主題包開發-02

android下apkplug通用主題(皮膚)切換解決方案之主題包開發-02

編輯:關於Android編程

該文章是基於apkplug V1.6.8 進行說明的

 

該 IMThemeDemo 實現了簡單的聊天泡泡切換功能,同時主題包(插件)是托管在apkplug的雲服務器上的。所以要閱讀項目的完整代碼可以先看插件托管服務開發系列文章 <插件托管服務開發指南>

demo運行效果圖:

data-cke-saved-src=https://www.android5.online/Android/UploadFiles_5356/201702/2017022317012432.gif

 

上一篇文章我們實現了主應用的開發,本篇應用我們開發主題包(插件)。

一,主題包說明

apkplug主題(換膚)解決方案中的主題包本質上是一個完整的apk應用程序或者說是apkplug的插件,但它有以下的不同

1.主題包對外提供主題樣式資源。

2.主題包必須上傳apkplug官網進行編譯,生成的apk才能提供主題切換。否則即為普通apk

二,主題包(插件)搭建

1.按照普通app創建流程創建安卓工程

data-cke-saved-src=https://www.android5.online/Android/UploadFiles_5356/201702/2017022317012408.png

2.按照apkplug插件開發流程添加必要文件

osgi.jar應使用osgi1.6.8.jar

data-cke-saved-src=https://www.android5.online/Android/UploadFiles_5356/201702/2017022317012491.png

3.將主應用導出的主題切換接口jar包(IMTheme.jar)導入工程

com.apkplug.imthemedemo.themeinterface.chatstyles

三,創建主題控件樣式資源

與普通app開發一樣,我們創建一些用於聊天泡泡按鈕背景的資源,它們可以是圖片或者xml樣式,最終都將以R.id的形式傳遞給主應用進行替換

data-cke-saved-src=https://www.android5.online/Android/UploadFiles_5356/201702/2017022317012440.png

四,添加主應用約定的chatstyles服務

com.apkplug.imtheme1.SimpleBundle

 

01 ServiceReference reference=mcontext.getServiceReference(ThemeControl.class.getName()); 02 if(null!=reference){ 03 ThemeControl service=(ThemeControl) mcontext.getService(reference); 04 if(service!=null){ 05 service.addStyles(mcontext, chatstyles.class.getName(), 06 new chatstyles(){ 07 @Override 08 public int chat_left_msg_background() { 09 return R.drawable.chat_btn_left; 10 } 11 @Override 12 public int chat_right_msg_background() { 13 return R.drawable.chat_btn_right; 14 } 15 @Override 16 public int Version() { 17 return 0; 18 } 19 @Override 20 public int chatbackground() { 21 return R.drawable.menu_background; 22 } 23 }); 24 } 25 } 26 mcontext.ungetService(reference);

 

 

注意:此時僅是添加並未真正設置為可替換的樣式(主應用ThemeChengFactory接口監聽不到)。只有當該主題包被設置為主題以後才會真正注冊。

五,將主題包設置為apkplug框架當前可用替換主題包

com.apkplug.imtheme1.MainActivity

 

01 public void setTheme1(int themeid) throws Exception{ 02 BundleContext mcontext=BundleContextFactory.getInstance().getBundleContext(); 03 ServiceReference reference=mcontext.getServiceReference(ThemeControl.class.getName()); 04 if(null!=reference){ 05 ThemeControl service=(ThemeControl) mcontext.getService(reference); 06 if(service!=null){ 07 //設置自身為apkplug框架當前可用主題包 08 service.setTheme(mcontext, mcontext.getBundle(),themeid); 09 } 10 mcontext.ungetService(reference); 11 } 12 }

 

 

這一步在界面表現為用戶點擊以下按鈕:

data-cke-saved-src=https://www.android5.online/Android/UploadFiles_5356/201702/2017022317012592.png

用戶點擊此按鈕以後該主題包被設置為apkplug層主題,且ThemeChengFactory也將監聽到該主題包SimpleBundle中所提供的chatstyles接口服務,同時com.apkplug.imthemedemo.activity.MainActivity也將監聽到主題切換事件從而重繪界面。

六,注意事項

主題包之間如果資源重用會引起資源沖突,所以我們應當隔離兩個主題包之間的資源。通過在主題包

AndroidManifest.xml 文件中配置

禁止主題包activity使用apkplug層的主題,從而防止資源沖突

 

1 <activity 2 android:name=com.apkplug.imtheme1.MainActivity 3 android:label=@string/app_name > 4 <meta-data android:name=apkplug-theme android:value=Main-Bundle-Hide>meta-data> 5 <intent-filter> 6 <action android:name=android.intent.action.MAIN /> 7 <category android:name=android.intent.category.LAUNCHER /> 8 intent-filter> 9 activity>

 

七,打包源碼包並上傳服務器編譯

主題包與普通插件有所不同,不能在本地編譯器進行編譯,需要將源碼包上傳服務器進行編譯生成apk文件

1.打包源碼包

注意:源碼包內不能包含中文名稱的文件或路徑,打包文件zip格式且為根路徑

data-cke-saved-src=https://www.android5.online/Android/UploadFiles_5356/201702/2017022317012591.png

2.上傳雲服務器編譯生成apk主題包

data-cke-saved-src=https://www.android5.online/Android/UploadFiles_5356/201702/2017022317012544.pngdata-cke-saved-src=https://www.android5.online/Android/UploadFiles_5356/201702/2017022317012696.png

3.編譯成功以後下載apk主題包

該主題包是未簽名主題包,開發者可用簽名工具自行簽名,主題包所有的資源與文件版權都歸開發者所有

八,將主題包(插件)安裝到主應用中

我們得到的主題包apk文件是一個完整的app插件,通過apkplug提供的接口可以安裝到主應用中

 

九,IMThemeDemo項目簡單說明

IMThemeDemo插件管理與安裝是使用的apkplug插件托管服務,可查看相關教程了解

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved