CJFrameForAndroid安卓插件開發(fā)框架
CJFrameForAndroid 是一個(gè)實(shí)現(xiàn)android插件化開發(fā)的框架。使用CJFrameForAndroid,apk動(dòng)態(tài)加載不再是難題,更重要的是可以輕松實(shí)現(xiàn)插件與APP項(xiàng)目之間的解耦。
原理描述
CJFrameForAndroid的實(shí)現(xiàn)原理是通過類加載器,動(dòng)態(tài)加載存在于SD卡上的apk包中的Activity。通過使用一個(gè)托管所,插件Activity全部事務(wù)(包括聲明周期與交互事件)將交由托管所來處理,間接實(shí)現(xiàn)插件的運(yùn)行。
一句話描述:CJFrameForAndroid中的托管所,復(fù)制了插件中的Activity,來替代插件中的Activity與用戶交互。
框架使用
●使用 CJFrameForAndroid 插件開發(fā)框架需要在你項(xiàng)目的AndroidManifest.xml文件中加入托管所的聲明。
<activity android:name="org.kymjs.aframe.plugin.CJProxy" />
●讓插件應(yīng)用中的Activity繼承CJActivity,并且一切使用this調(diào)用的方法都使用that替代。例如this.setContentView();需要改為that.setContentView();
●插件中涉及到的Android權(quán)限,須在APP項(xiàng)目清單中具有聲明。
●插件Activity跳轉(zhuǎn)時(shí),推薦使用CJActivityUtils類來輔助跳轉(zhuǎn)。若一定要startActivity或 startActivityForResult,在跳轉(zhuǎn)過程中的Intent不能自己new,必須使用 CJActivityUtils.getPluginIntent();
●在插件和APP兩個(gè)工程中不能引用相同的jar包。解決辦法是:在插件工程的項(xiàng)目中添加一個(gè)/cjlibs的文件夾,將需要調(diào)用的jar包放到這個(gè)文件夾中,并在插件項(xiàng)目目錄下的.classpath中加入如下語句,系統(tǒng)會(huì)自動(dòng)處理相關(guān)細(xì)節(jié)
<classpathentry kind="lib" path="cjlibs"/>
