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

    

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

    咱們提供了一個demo作爲參考,項目下載地址爲:http://git.oschina.net/plug/IMThemeDemo android

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

demo運行效果圖: 服務器

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

一,主題包說明 框架

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

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

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

二,主題包(插件)搭建 spa

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

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

        osgi.jar應使用osgi1.6.8.jar

       

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

        com.apkplug.imthemedemo.themeinterface.chatstyles

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

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

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

    com.apkplug.imtheme1.SimpleBundle    

ServiceReference reference=mcontext.getServiceReference(ThemeControl.class.getName());
if(null!=reference){
	ThemeControl service=(ThemeControl) mcontext.getService(reference);
    if(service!=null){
	    service.addStyles(mcontext, chatstyles.class.getName(), 
	    new chatstyles(){
		@Override
		public int chat_left_msg_background() {
			return R.drawable.chat_btn_left;
		}
		@Override
		public int chat_right_msg_background() {
			return R.drawable.chat_btn_right;
		}
		@Override
		public int Version() {
				return 0;
		}
		@Override
		public int chatbackground() {
				return R.drawable.menu_background;
		}
	});
   }
}
mcontext.ungetService(reference);



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

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

    com.apkplug.imtheme1.MainActivity

public void setTheme1(int themeid) throws Exception{
BundleContext mcontext=BundleContextFactory.getInstance().getBundleContext();
ServiceReference reference=mcontext.getServiceReference(ThemeControl.class.getName());
    if(null!=reference){
    	ThemeControl service=(ThemeControl) mcontext.getService(reference);
    	if(service!=null){
    		//設置自身爲apkplug框架當前可用主題包
    	service.setTheme(mcontext, mcontext.getBundle(),themeid);
    	}
    mcontext.ungetService(reference);
    }
}

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

    

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

六,注意事項

    主題包之間若是資源重用會引發資源衝突,因此咱們應當隔離兩個主題包之間的資源。經過在主題包

AndroidManifest.xml 文件中配置

<meta-data android:name="apkplug-theme" android:value="Main-Bundle-Hide"></meta-data>

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

<activity
      android:name="com.apkplug.imtheme1.MainActivity"
      android:label="@string/app_name" >
      <meta-data android:name="apkplug-theme" android:value="Main-Bundle-Hide"></meta-data>
      <intent-filter>
          <action android:name="android.intent.action.MAIN" />
          <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
</activity>

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

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

    1.打包源碼包

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

    

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

    

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

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

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

    咱們獲得的主題包apk文件是一個完整的app插件,經過apkplug提供的接口能夠安裝到主應用中<apkplug插件安裝>

九,IMThemeDemo項目簡單說明

     IMThemeDemo插件管理與安裝是使用的apkplug插件託管服務,可查看相關教程瞭解<apkplug插件託管服務系列教程>

     
相關文章
相關標籤/搜索