360 黑科技 Droid Plugin

简介:
+关注继续查看

Droid Plugin 详细介绍

DroidPlugin 是360手机助手在 Android 系统上实现了一种新的插件机制:它可以在无需安装、修改的情况下运行APK文件,此机制对改进大型APP的架构,实现多团队协作开发具有一定的好处。

定义:

HOST程序:插件的宿主。

插件:免安装运行的APK

限制和缺陷:

  1. 无法在插件中发送具有自定义资源的Notification,例如: a. 带自定义RemoteLayout的Notification b. 图标通过R.drawable.XXX指定的通知(插件系统会自动将其转化为Bitmap)
  2. 无法在插件中注册一些具有特殊Intent Filter的Service、Activity、BroadcastReceiver、ContentProvider等组件以供Android系统、已经安装的其他APP调用。
  3. 对Activity的LaunchMode支持不够好,Activity Stack管理存在一定缺陷。Activity的onNewIntent函数可能不会被触发。 (此为BUG,未来会修复)
  4. 缺乏对Native层的Hook,对某些带native代码的apk支持不好,可能无法运行。比如一部分游戏无法当作插件运行。

特点:

  1. 支持Androd 2.3以上系统
  2. 插件APK完全不需做任何修改,可以独立安装运行、也可以做插件运行。要以插件模式运行某个APK,你无需重新编译、无需知道其源码。
  3. 插件的四大组件完全不需要在Host程序中注册,支持Service、Activity、BroadcastReceiver、ContentProvider四大组件
  4. 插件之间、Host程序与插件之间会互相认为对方已经"安装"在系统上了。
  5. API低侵入性:极少的API。HOST程序只是需要一行代码即可集成Droid Plugin
  6. 超强隔离:插件之间、插件与Host之间完全的代码级别的隔离:不能互相调用对方的代码。通讯只能使用Android系统级别的通讯方法。
  7. 支持所有系统API
  8. 资源完全隔离:插件之间、与Host之间实现了资源完全隔离,不会出现资源窜用的情况。
  9. 实现了进程管理,插件的空进程会被及时回收,占用内存低。
  10. 插件的静态广播会被当作动态处理,如果插件没有运行(即没有插件进程运行),其静态广播也永远不回被触发。

使用方法:

集成

在host中集成Droid Plugin项目非常简单:

  1. 我们只是需要将Droid Plugin当作一个lib工程应用到主项目中,然后:
  2. 在AndroidManifest.xml中使用插件的com.morgoo.droidplugin.PluginApplication:
    <application android:name="com.morgoo.droidplugin.PluginApplication" 
                 android:label="@string/app_name"
                 android:icon="@drawable/ic_launcher"
  1. 如果你使用自定义的Application,那么你需要在自定义的Application class onCreate和attachBaseContext方法中添加如下代码:
    @Override
    public void onCreate() {
        super.onCreate();
        //这里必须在super.onCreate方法之后,顺序不能变
        PluginHelper.getInstance().applicationOnCreate(getBaseContext());
    }

    @Override
    protected void attachBaseContext(Context base) {
        PluginHelper.getInstance().applicationAttachBaseContext(base);
    }
  1. 将插件中LibrariesDroidPluginAndroidManifest.xml中所有的provider对应的authorities修改成自己的,默认为com.morgoo.droidplugin_stub_P00,如下:
    <provider
        android:name="com.morgoo.droidplugin.stub.ContentProviderStub$StubP00"
        android:authorities="com.morgoo.droidplugin_stub_P00"
        android:exported="false"
        android:label="@string/stub_name_povider" />

可以修改为自己的包名,如: com.example.droidplugin_stub_P00 防止跟其它本插件使用者冲突:

    <provider
        android:name="com.morgoo.droidplugin.stub.ContentProviderStub$StubP00"
        android:authorities="com.example.droidplugin_stub_P00"
        android:exported="false"
        android:label="@string/stub_name_povider" />
  1. 集成完成。

安装、卸载插件:

  1. 安装、更新插件,使用如下方法:
    int PluginManager.getInstance().installPackage(String filepath, int flags)
说明:安装插件到插件系统中,filepath为插件apk路径,flags可以设置为0,如果要更新插件,则设置为PackageManagerCompat.INSTALL_REPLACE_EXISTING返回值及其含义请参见PackageManagerCompat类中的相关字段。
  1. 卸载插件,使用如下方法:
    int PluginManager.getInstance().deletePackage(String packageName,int flags);
说明:从插件系统中卸载某个插件,packageName传插件包名即可,flags传0。
  1. 启动插件:启动插件的Activity、Service等都和你启动一个以及安装在系统中的app一样,使用系统提供的相关API即可。组件间通讯也是如此。

实现原理:

请参见源码

支持:

任何问题可以在项目中提交bug报告,也可以发送邮件以寻求帮助。

文章转载自 开源中国社区[https://www.oschina.net]

相关文章
|
27天前
|
设计模式 前端开发 C#
Helix Toolkit:为.NET开发者带来的3D视觉盛宴
Helix Toolkit:为.NET开发者带来的3D视觉盛宴
14 0
|
11月前
|
Linux C++ Windows
Notepad--国产开源编辑器,横空出世!
作为一个来自中国的、支持windows/linux/mac、绿色免费的、开源的文本编辑器,目标是要替换notepad++。该项目是采用了C++进行开发,针对NotePad++中比较受欢迎的诸多功能与特点进行了分析和吸收,逐渐在项目中加以实现。
4296 0
Notepad--国产开源编辑器,横空出世!
|
12月前
|
存储 缓存 Java
打造酷炫AndroidStudio插件
打造酷炫AndroidStudio插件
打造酷炫AndroidStudio插件
|
12月前
|
人工智能 图形学
Unity Rain Ai 插件的使用入门(三)
Unity Rain Ai 插件的使用入门
156 0
Unity Rain Ai 插件的使用入门(三)
|
12月前
|
人工智能 图形学
Unity Rain Ai 插件的使用入门(二)
Unity Rain Ai 插件的使用入门
73 0
Unity Rain Ai 插件的使用入门(二)
|
12月前
|
人工智能 图形学
Unity Rain Ai 插件的使用入门(一)
Unity Rain Ai 插件的使用入门
337 1
Unity Rain Ai 插件的使用入门(一)
|
编解码 iOS开发 异构计算
PS2022顶级插件Alien Skin Exposure X7中文版
Exposure 结合了专业级的照片调整,庞大的华丽照片外观库以及高效的设计,使其使用起来很愉悦。新的自动调整功能可简化您的工作流程,并使用户进入创意区。
1055 0
|
IDE Java 开发工具
Jetbrains New UI 尝鲜
前一段时间各种公众号宣传 Jetbrains 新的 UI 插件提供体验申请。 自己也提交了申请,今天才收到申请成功的邮件,下载插件并安装体验了一把,感觉挺清爽,更容易专注于代码编写和阅读。 这里分享下两种安装体验方法。
294 0
Jetbrains New UI 尝鲜
|
Ubuntu Java Apache
Maven官宣:干掉Maven和Gradle!推出更强更快更牛逼的新一代构建工具,炸裂!
相信作为Java开发者的你早已经受够了maven的编译缓慢,但是又由于历史包袱、使用习惯等问题暂时切换不了其他更快的构建工具,这里笔者将给你介绍一款更快的maven——maven-mvnd。
Maven官宣:干掉Maven和Gradle!推出更强更快更牛逼的新一代构建工具,炸裂!
|
人工智能 数据可视化 图形学
Unity火爆插件Behavior Designer行为树插件学习
如果要让游戏里的角色或者NPC能执行预设的AI逻辑,最简单的用IF..ELSE...神器既可以实现, 但是再复杂的一般用经典的状态机来切换状态,但是写起来比较麻烦。相对的,行为树(Behavior Tree)理解和编辑起来就非常简单了。
热门文章
最新文章
相关产品
云迁移中心
推荐文章
更多