android插件化開發的框架:CJFrameForAndroid
CJFrameForAndroid 是一個實現android插件化開發的框架。使用CJFrameForAndroid,apk動態加載不再是難題,更重要的是可以輕松實現插件與APP項目之間的解耦。
注: CJFrameForAndroid現已并入Android應用開發框架KJFrameForAndroid中,作為其插件化模塊存在,此處更新將延后。
原理描述
CJFrameForAndroid的實現原理是通過類加載器,動態加載存在于SD卡上的apk包中的Activity。通過使用一個托管所,插件Activity全部事務(包括聲明周期與交互事件)將交由托管所來處理,間接實現插件的運行。更多介紹:CJFrameForAndroid原理介紹
一句話概括:CJFrameForAndroid中的托管所,復制了插件中的Activity,來替代插件中的Activity與用戶交互。
框架使用
●使用 CJFrameForAndroid 插件開發框架需要在你項目的AndroidManifest.xml文件中加入托管所的聲明。
<activity android:name="org.kymjs.aframe.plugin.CJProxyActivity" /> <!-- 如果使用了插件Activity,需要添加 --> <service android:name="org.kymjs.aframe.plugin.service.CJProxyService"/> <!-- 如果使用了插件Service,需要添加 -->
●讓插件應用中的Activity繼承CJActivity,并且一切使用this調用的方法都使用that替代。例如this.setContentView();需要改為that.setContentView();
●插件中涉及到的Android權限,須在APP項目清單中具有聲明。
●插件Activity跳轉時,推薦使用CJActivityUtils類來輔助跳轉。若一定要startActivity或 startActivityForResult,在跳轉過程中的Intent不能自己new,必須使用 CJActivityUtils.getPluginIntent();
●在插件和APP兩個工程中不能引用相同的jar包。解決辦法是:在插件工程的項目中添加一個/cjlibs的文件夾,將需要調用的jar包放到這個文件夾中,并在插件項目目錄下的.classpath中加入如下語句,系統會自動處理相關細節
<classpathentry kind="lib" path="cjlibs"/>