DL插件开发笔记
2015-02-03 10:44
197 查看
DL的插件和宿主有三种开发模式,我们这里讨论的是DL插件和宿主程序完全独立的开发模式,至于其余两种,可以到官网了解。
CodeBox客户端就是一个宿主程序,开发插件的同学可以完全不去管宿主是如何开发的。这篇文章也是专门讨论插件的开发。
DL插件开发其实非常简单,只需要修改三个地方。
主题
dl的插件必须每个activity都单独设置主题(插件的作者说的是也可以在application上设置主题),但我实际测试,即使application设置了主题也必须每个activity都单独设置主题。
也就是说这样是不行的:
注意的是 插件只能用系统主题 不能直接定义主题
不能这样
虽然在某些插件上可能不按照此规则也可以正确运行 ,但是我试过绝大多数多需要满足此条件。
引入DL库
先下载DL库
https://github.com/singwhatiwanna/dynamic-load-apk
将下载的源码导入eclipse,找到lib 目录下的工程,如果eclipse是自动编译的,应该在lib的bin里面就有了dl-lib.jar,我们需要的就是这个。
因为DL插件需要用到DL库的类(),所以需要引入DL库,但是插件是最终要加载到宿主程序中的,宿主程序中也是引入了DL库的,如果常规办法导入DL库,则会有两份DL的拷贝,为了解决这个问题,我们让插件中的DL只是编译的时候用,但是不打包进apk。如何让它参与编译却不被打包进apk呢?在Eclipse中可以这样做:
只需要在插件工程中创建一个目录,比如external-jars,然后把dl-lib.jar和放进去,同时在.classpath中追加如下代码即可:
插件的java代码修改
插件中的所有Activity 必须是继承自DLBasePluginActivity或者是DLBasePluginFragmentActivity。如果原有的为Activity,这里需要改为继承DLBasePluginActivity,如果原来为FragmentActivity,那么需要继承DLBasePluginFragmentActivity。
继承DLBasePluginActivity
另外原有activity中所有代表context引用的this都必须改写为that
如果要调用另外一个activity,不能使用startActivity(),而是使用startPluginActivity,并且intent也要变为
CodeBox客户端就是一个宿主程序,开发插件的同学可以完全不去管宿主是如何开发的。这篇文章也是专门讨论插件的开发。
DL插件开发其实非常简单,只需要修改三个地方。
主题
dl的插件必须每个activity都单独设置主题(插件的作者说的是也可以在application上设置主题),但我实际测试,即使application设置了主题也必须每个activity都单独设置主题。
也就是说这样是不行的:
<application android:allowBackup="true" android:theme="@android:style/Theme.Holo.Light" android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".SampleActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>必须这样:
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".SampleActivity" android:theme="@android:style/Theme.Holo.Light.DarkActionBar" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
注意的是 插件只能用系统主题 不能直接定义主题
不能这样
android:theme="@style/AppTheme"只能这样
android:theme="@android:style/Theme.Light"
虽然在某些插件上可能不按照此规则也可以正确运行 ,但是我试过绝大多数多需要满足此条件。
引入DL库
先下载DL库
https://github.com/singwhatiwanna/dynamic-load-apk
将下载的源码导入eclipse,找到lib 目录下的工程,如果eclipse是自动编译的,应该在lib的bin里面就有了dl-lib.jar,我们需要的就是这个。
因为DL插件需要用到DL库的类(),所以需要引入DL库,但是插件是最终要加载到宿主程序中的,宿主程序中也是引入了DL库的,如果常规办法导入DL库,则会有两份DL的拷贝,为了解决这个问题,我们让插件中的DL只是编译的时候用,但是不打包进apk。如何让它参与编译却不被打包进apk呢?在Eclipse中可以这样做:
只需要在插件工程中创建一个目录,比如external-jars,然后把dl-lib.jar和放进去,同时在.classpath中追加如下代码即可:
<classpathentry kind="lib" path="external-jars/dl-lib.jar"/>同样的如果宿主程序中用了support-v4.jar,那么插件中原有的support-v4.jar也不能被打包进去,也需要将support-v4.jar放到external-jars同时追加
<classpathentry kind="lib" path="external-jars/android-support-v4.jar"/>CodeBox宿主是用了support-v4.jar的。
插件的java代码修改
插件中的所有Activity 必须是继承自DLBasePluginActivity或者是DLBasePluginFragmentActivity。如果原有的为Activity,这里需要改为继承DLBasePluginActivity,如果原来为FragmentActivity,那么需要继承DLBasePluginFragmentActivity。
继承DLBasePluginActivity
public class MainActivity extends DLBasePluginActivity继承DLBasePluginFragmentActivity
TestFragmentActivity extends DLBasePluginFragmentActivity
另外原有activity中所有代表context引用的this都必须改写为that
如果要调用另外一个activity,不能使用startActivity(),而是使用startPluginActivity,并且intent也要变为
DLIntent:
DLIntent intent = new DLIntent(getPackageName(), ListActivity.class); intent.putExtra(TYPE, item.getNavigationInfo()); startPluginActivity(intent);
相关文章推荐
- Windows下Eclipse的Tomcat插件安装过程_Ealon的开发笔记
- Eclipse插件开发之Facet开发笔记
- hudson插件开发笔记
- Spark研究笔记19:插件体系开发
- jquery 插件开发笔记
- Eclipse插件开发学习笔记 (一)
- OpenFire插件开发笔记
- eclipse插件开发笔记
- chrome插件开发笔记1
- openfire开发笔记三-openfire主要插件介绍
- vs插件开发笔记
- Eclipse插件开发笔记二:命令与操作
- Eclipse插件开发笔记一:对Eclipse的理解
- eclipse插件开发笔记
- Jquery插件按开发学习笔记(一)
- groovy笔记之一:搭建开发环境,在eclipse中安装插件
- Chrome插件开发学习笔记(二)
- Eclipse插件开发笔记四:Wizard与WizardPage
- 时间轴插件开发笔记
- [开发笔记]-flowplayer视频播放插件