DL插件开发笔记

DL的插件和宿主有三种开发模式,我们这里讨论的是DL插件和宿主程序完全独立的开发模式,至于其余两种,可以到官网了解。

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);








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值