android插件化-apkplugdemo源碼閱讀指南-10

閱讀本節內容前可先了解 apkplug基礎教程

本教程是基於apkplug V1.6.8 版本編寫  最新開發方式以官網爲準 java

可下載最新的apkplugdemo源碼http://git.oschina.net/plug/apkplugDemos android

apkplugdemo演示圖 git

 

一 apkplugdemo工程源碼結構 設計模式

    src app

        |-com.apkplugdemo.adapter             --插件列表Adapter 框架

        |-com.apkplugdemo.adapter.base      --adapter 基類 ide

        |-com.apkplugdemo.FileUtil               --文件操做類 函數

        |-com.apkplugdemo.FileUtil.filter        --文件類型過濾類 工具

        |-com.apkplugdemo.util                    --項目通用工具類 post

        |-com.apkplugdemo.util.Observer       --java觀察者設計模式類

        |-com.apkplugdemo.util.preferencesFactory  --preferences操做類

        |-com.example.apkplugdemo             --項目application 和activity類

        |-huahua.viewpager                         --與com.example.apkplugdemo功能相同 只是提供fragment方式展現

二 閱讀方式

    根據以上結構能夠看出除去工具類咱們須要閱讀的代碼並很少

    com.apkplugdemo.adapter.ListBundleAdapter    --負責首頁列表Item展現以及 "運行"按鈕事件

    com.example.apkplugdemo.ProxyApplication     --負責啓動apkplug框架,以及安裝assets目錄下的插件 (經過InstallBundle類安裝)

    com.example.apkplugdemo.MyProperty            --啓動框架須要的接口類,爲框架提供本地化變量保存於獲取的接口 (老版本還提供自啓插件的安裝  v1.6.8版本用BundleControl服務替代)

    com.example.apkplugdemo.MainActivity           --項目啓動類,展現已安裝插件列表,提供安裝SD卡中插件的按鈕等功能 

    com.example.apkplugdemo.InstallBundle    --啓動assets目錄下的插件      

三 ProxyApplication

    ProxyApplication 只啓動框架 而後調用InstallBundle啓動插件

public void onCreate() {   
    super.onCreate(); 
    try{
        List activators=new java.util.ArrayList<BundleActivator>();
        //將服務加入框架,框架將在啓動時啓動這些服務
        activators.add(new appServiceManager());
       frame=FrameworkFactory.getInstance().start(activators,this,new MyProperty(this.getApplicationContext()));
        BundleContext context =frame.getSystemBundleContext();
   //安裝assets文件夾下的插件 該類替代了MyProperty.AutoStart()方法 ,1.6.7以上建議使用新方式
        InstallBundle ib=new InstallBundle();
       ib.installBundle(getApplicationContext(), context, 
            new installCallback(){
                @Override
                public void callback(int arg0, Bundle arg1) {
                    if(arg0==installCallback.stutas5||arg0==installCallback.stutas7){
		    Log.d("",String.format("插件安裝 %s : %d",arg1.getName(),arg0));
                    return;
                    }else{
                        Log.d("","插件安裝失敗 :%s"+arg1.getName());
                    }
                }
        });
       }catch (Exception ex){
            System.err.println("Could not create : " + ex);
            ex.printStackTrace();
	   int nPid = android.os.Process.myPid();
            android.os.Process.killProcess(nPid);
        }
}


  

四 InstallBundle 安裝插件實現

    InstallBundle 是調用BundleControl實現將assets目錄中的apk文件安裝到宿主應用中的,詳細可看 <apkplug插件安裝-04>

//從assets目錄中複製apk文件到SD卡中
InputStream in=context.getAssets().open("BundleDemoOSGIService1.apk");
File f0=new File(context.getFilesDir(),"BundleDemoOSGIService1.apk");
if(!f0.exists()){
    copy(in, f0);
    //第一次啓動時執行安裝,之後就不執行了
    // startlevel設置爲1插件會自啓 isCheckVersion不檢測插件版本覆蓋更新
    this.install(mBundleContext,"file:"+f0.getAbsolutePath(),callback,1,false);
}


五 MainActivity 界面代碼

    MainActivity 初始化函數

        initBundleList()              -- 獲取已安裝插件  <獲取apkplug已安裝插件-03>

        ListenerBundleEvent()    --監聽插件安裝事件 <監聽apkplug插件安裝事件>

apkplugdemo有關於apkplug框架的調用就是這些了,其餘工具性的代碼感興趣的同窗能夠本身看。

相關文章
相關標籤/搜索