360 黑科技 Droid Plugin
Droid Plugin 详细介绍
DroidPlugin 是360手机助手在 Android 系统上实现了一种新的插件机制:它可以在无需安装、修改的情况下运行APK文件,此机制对改进大型APP的架构,实现多团队协作开发具有一定的好处。
定义:
HOST程序:插件的宿主。
插件:免安装运行的APK
限制和缺陷:
- 无法在插件中发送具有自定义资源的Notification,例如: a. 带自定义RemoteLayout的Notification b. 图标通过R.drawable.XXX指定的通知(插件系统会自动将其转化为Bitmap)
- 无法在插件中注册一些具有特殊Intent Filter的Service、Activity、BroadcastReceiver、ContentProvider等组件以供Android系统、已经安装的其他APP调用。
- 对Activity的LaunchMode支持不够好,Activity Stack管理存在一定缺陷。Activity的onNewIntent函数可能不会被触发。 (此为BUG,未来会修复)
- 缺乏对Native层的Hook,对某些带native代码的apk支持不好,可能无法运行。比如一部分游戏无法当作插件运行。
特点:
- 支持Androd 2.3以上系统
- 插件APK完全不需做任何修改,可以独立安装运行、也可以做插件运行。要以插件模式运行某个APK,你无需重新编译、无需知道其源码。
- 插件的四大组件完全不需要在Host程序中注册,支持Service、Activity、BroadcastReceiver、ContentProvider四大组件
- 插件之间、Host程序与插件之间会互相认为对方已经"安装"在系统上了。
- API低侵入性:极少的API。HOST程序只是需要一行代码即可集成Droid Plugin
- 超强隔离:插件之间、插件与Host之间完全的代码级别的隔离:不能互相调用对方的代码。通讯只能使用Android系统级别的通讯方法。
- 支持所有系统API
- 资源完全隔离:插件之间、与Host之间实现了资源完全隔离,不会出现资源窜用的情况。
- 实现了进程管理,插件的空进程会被及时回收,占用内存低。
- 插件的静态广播会被当作动态处理,如果插件没有运行(即没有插件进程运行),其静态广播也永远不回被触发。
使用方法:
集成
在host中集成Droid Plugin项目非常简单:
- 我们只是需要将Droid Plugin当作一个lib工程应用到主项目中,然后:
- 在AndroidManifest.xml中使用插件的com.morgoo.droidplugin.PluginApplication:
<application android:name="com.morgoo.droidplugin.PluginApplication" android:label="@string/app_name" android:icon="@drawable/ic_launcher"
- 如果你使用自定义的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); }
- 将插件中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" />
- 集成完成。
安装、卸载插件:
- 安装、更新插件,使用如下方法:
int PluginManager.getInstance().installPackage(String filepath, int flags)
说明:安装插件到插件系统中,filepath为插件apk路径,flags可以设置为0,如果要更新插件,则设置为PackageManagerCompat.INSTALL_REPLACE_EXISTING返回值及其含义请参见PackageManagerCompat类中的相关字段。
- 卸载插件,使用如下方法:
int PluginManager.getInstance().deletePackage(String packageName,int flags);
说明:从插件系统中卸载某个插件,packageName传插件包名即可,flags传0。
- 启动插件:启动插件的Activity、Service等都和你启动一个以及安装在系统中的app一样,使用系统提供的相关API即可。组件间通讯也是如此。
实现原理:
请参见源码
支持:
任何问题可以在项目中提交bug报告,也可以发送邮件以寻求帮助。
文章转载自 开源中国社区[https://www.oschina.net]
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Project Astoria 项目的路还很长
应用程序数量少,应用质量不高,这是 Windows Phone 一直要面对的问题。为了改变这样的局面,微软一方面加快 Windows 10 统一平台的建设。另一方面微软也瞄准了其他平台的开发者,希望利用应用移植的方式来为 Windows 10 吸引更多的开发者,推动生态发展。 “Project Astoria”项目就是微软推出的可用于移植 Android 应用的项目。今年5月,微软正式上线了该项目的主页,允许开发者注册并参与到此项目中。该项目的功能在于,开发者可以直接将现有的 .apk 应用安装包提交至 Windows Store,微软会将 Android 应用编译为 Windows 通用应用。 不过现在又相关消息指出,Windows 10 Mobile 上运行移植的 Android 应用,功能上还存在一些局限性。 想“借”点 App 可不容易 虽然“Project Astoria”项目可以实现 Android 应用的移植,但是其本身还存在许多不足。简单来说,移植到 Windows 10 Mobile 上的 Android 应用,一些常用功能暂时还无法等到很好地支持,这些功能包括: 屏...
- 下一篇
Tiny4412 Android5.0 定制MTP显示的名字
找到frameworks/base/media/java/android/mtp/MtpDatabase.java 找到以下方法: private int getDeviceProperty(int property, long[] outIntValue, char[] outStringValue) 对应的一个switch语句,找到以下case分支: case MtpConstants.DEVICE_PROPERTY_DEVICE_FRIENDLY_NAME: 一般会看到这样的语句: String value = mDeviceProperties.getString(Integer.toString(property), ""); 在""中添加自己想要在PC上显示的内容即可。
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8安装Docker,最新的服务器搭配容器使用
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装