Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android插件化-apkplugdemo源碼閱讀指南-10

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

編輯:關於Android編程

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

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

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

apkplugdemo演示圖

\

一 apkplugdemo工程源碼結構

src

"-com.apkplugdemo.adapter --插件列表Adapter

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

|-com.apkplugdemo.FileUtil --文件操作類

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

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

|-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啟動插件

01 public void onCreate() { 02 super.onCreate(); 03 try{ 04 List activators=new java.util.ArrayList(); 05 //將服務加入框架,框架將在啟動時啟動這些服務 06 activators.add(new appServiceManager()); 07 frame=FrameworkFactory.getInstance().start(activators,this,new MyProperty(this.getApplicationContext())); 08 BundleContext context =frame.getSystemBundleContext(); 09 //安裝assets文件夾下的插件 該類替代了MyProperty.AutoStart()方法 ,1.6.7以上建議使用新方式 10 InstallBundle ib=new InstallBundle(); 11 ib.installBundle(getApplicationContext(), context, 12 new installCallback(){ 13 @Override 14 public void callback(int arg0, Bundle arg1) { 15 if(arg0==installCallback.stutas5||arg0==installCallback.stutas7){ 16 Log.d("",String.format("插件安裝 %s : %d",arg1.getName(),arg0)); 17 return; 18 }else{ 19 Log.d("","插件安裝失敗 :%s"+arg1.getName()); 20 } 21 } 22 }); 23 }catch (Exception ex){ 24 System.err.println("Could not create : " + ex); 25 ex.printStackTrace(); 26 int nPid = android.os.Process.myPid(); 27 android.os.Process.killProcess(nPid); 28 } 29 }


四 InstallBundle 安裝插件實現

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

//從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框架的調用就是這些了,其他工具性的代碼感興趣的同學可以自己看。

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