Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android插件開發——基礎篇

Android插件開發——基礎篇

編輯:關於Android編程

Android插件開發初探 對於Android的插件化其實已經討論已久了,但是市面上還沒有非常靠譜成熟的插件框架供我們使用。這裡我們就嘗試性的對比一下Java中,我們使用插件化該是一個怎麼樣的流程,且我們如何將此流程移植到Android框架上去使用。很多代碼都是內部資料,不喜勿噴,謝謝~

為什麼要插件化
•功能越來越多 •代碼、安裝包越來越大 •小的更新也需要重新發布 •更新頻繁 •用戶無法選擇性加載需要的模塊 •。。。
插件化的好處

•主安裝包較小 •強制模塊化,降低耦合度 •減少整體更新的次數 •插件可單獨靜默更新 •用戶可以有所選擇 •。。。
插件化的要求

•沒有獨立運行的入口 •主應用控制,下載、安裝、刪除、靜默升級、打開和關閉 •主應用和插件資源共享
安裝包的組成

\



需要安裝的插件
•主應用可以以Intent方式啟動具體的插件,同時帶入Map類型參數或者json串參數 •使用相同的android:sharedUserId,資源數據共享 •根據sharedUserId來查找插件 •queryIntentActivities查找符合這個action的所有activity(或其它)即插件 •query方式可以獲得插件的路徑以及實現接口類的類名 •通過檢索sharedUserId能夠得到路徑卻無法獲得到類名 •通常可以使用一個描述文件(xml、json)描述插件結構 •createPackageContext() •getResourcesForApplication()
動態加載普通
•Java 可以用 ClassLoader 動態加載.jar 中的Class文件,android可以嗎? •PathClassLoader •DexClassLoader
•接口類

 

	package com.plug;
	public interface InterfacePlug {
 	    public String function_01();
 	    public int function_02(int a,int b);
	}


 

 

 

•實現類

 

 

import com.plug.InterfacePlug;
public class PlugImpl  implements InterfacePlug{
	@Override
	public String function_01() {
		return null;
	}

	@Override
	public int function_02(int a, int b) {
		return a+b;
	}
}

 

 

 

 

主應用類

 


 

 

package com.host;

public class MyhostActivity extends Activity {
    public void useDexClassLoader() {
        DexClassLoader cDexClassLoader =
                new DexClassLoader(/mnt/sdcard/Myplugdex.jar, /data/data/com.host, null, this.getClass()
                        .getClassLoader());
        try {
            Class class1 = cDexClassLoader.loadClass(com.plug.PlugImpl);
            InterfacePlug interfacePlug = (InterfacePlug) class1.newInstance();
            int ret = interfacePlug.function_02(12, 13);
            tv.setText( return value : + ret);
        } catch (Exception e) {
        }
    }
}

 

 

\

 


•導出插件包時只能導出實現類,否則會出現 Classref in pre-verified class resolvedtounexpected implementation

重復定義錯誤


 

•不是普通類怎麼辦? •系統組件如何接收回調? •如何加載資源? •PackageInfo? •Resources? •Assets?

動態加載系統組件和資源



•PluginLib

\

•PluginHost

\



•PluginTest
\

\


•主應用列出安裝的Plugins,點擊啟動對應的PluginActivity
\


•可以基本完整實現一個Activity •可以繼續增加其他組件的插件,完成更多的功能(Service,Receiver,ContentProvider,Application?) •缺點 –Manifest中注冊的信息由系統控制,因此插件需要權限信息需要預先注冊在主程序中。 –目前實現有一定的限制

 

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