Android应用双开实现
来源:互联网 发布:天猫销售数据怎么看到 编辑:程序博客网 时间:2024/04/29 23:00
Android应用双开是某些特殊人群的需要,目前已知的双开方案个人终结为3种:
1.反编译apk,然后修改uid等相关信息让系统弄认为apk有不同,然后重新安装。这个方法是简单粗暴的,不过目前主流的app估计都会预防这种修改方法的。对于手机厂商来说,拥有整个系统的代码权限,不会用这么低级的手段。此种方法我个人也无深入研究。
2.插件化,在启动代理apk后动态加载需要双开的apk,此种方法是双开实现中最复杂最有技术含量的实现方式。插件化开源的有360 发布的DroidPlugin,未开源最有名气的就是lbe的MultiDroid,据我所知MultiDroid也是诸多手机厂商使用的较多的方案。此种方案的好处是无需修改系统代码,问题隔离的完善,对已有系统没有任何影响。关于插件化的原理见http://www.jianshu.com/u/e347b97e2f0c,weishu的多篇文章讲解的很透彻了。
3.多用户,小米使用的是这种实现方案,也是我个人想到双开第一个冒出的想法就是多用户。用户系统是Android系统支持的完整的一套东西,基于此开发就相当于站在巨人的肩膀上。基于账户系统的双开本来以为有一定的难度,要改不少地方,最近看了不少UserManagerService的文章和相关源码,最后发现一行代码不改就能看到双开的效果。
见原生代码的demo
development/samples/browseable/BasicManagedProfile
此demo的本意是展示android5.0的新特性,设备管理managed profiles 。源码相关就是DevicePolicyManager,它可以限制app的行为,例如无法使用摄像头,浏览器只能打开固定几个网页等等。基本原理是新建了一个拥有FLAG_MANAGED_PROFILE flag的user,并且创建想要控制的app到该user,然后控制app行为。该user的app和原有的app都会显示在launcher上面,这个是市面主流的双开app需要的所要的效果是一样一样的.......
不仅桌面同时显示,按history键显示的历史堆栈会显示所有打开的app,两个user的同app也都会显示。
原生的demo只显示了system app的使用,如果是三方app需要修改几行代码。
development/samples/browseable/BasicManagedProfile/src/com/example/android/basicmanagedprofile/BasicManagedProfileFragment.java
private void setAppEnabled(String packageName, boolean enabled) { // devicePolicyManager.enableSystemApp(// BasicDeviceAdminReceiver.getComponentName(activity), packageName); int userId = UserHandle.myUserId(); packageManager.installExistingPackageAsUser(packageName, userId); }注释的代码是原有代码,后面的是我针对三方app写的代码。注意AndroidManifest中要加相应的权限
<uses-permission android:name="android.permission.INSTALL_PACKAGES"/> <uses-permission android:name="android.permission.DELETE_PACKAGES"/> <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" /> <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
基本功能ok了,其余的双开需求就是苦力活了。
再次证明了对系统代码熟悉的话,实现功能可能异常的简单。
- Android应用双开实现
- android应用双开
- 如何使用Android原生接口,实现“应用双开”
- 如何使用Android原生接口,实现“应用双开”
- android 5.0 创建多用户 双开多开应用(1)
- android 5.0 创建多用户 双开多开应用(2)
- 夏书祥-安卓Android双开
- 黑科技!Android应用程序双开!!!
- 黑科技!Android应用程序双开!!!
- Mac 上实现 微信双开
- 安卓应用双启动工具 双开助手v2.0.10
- 解决关闭禁止小米MIUI8调试时候应用自动双开
- VirtualApp原理解析(3)--安装双开应用流程
- VirtualApp原理解析(4)--双开应用启动过程
- Android 双开沙箱 VirtualApp 源码分析(一)
- Android 双开沙箱 VirtualApp 源码分析(二)
- Android 双开沙箱 VirtualApp 源码分析(五)BroadcastReceiver
- Android 双开沙箱 VirtualApp 源码分析(六)ContentProvider
- android5.1-在系统设置里添加设置选项 以及 USB-OTG 模式切换
- Android系统服务------WMS和AMS
- MySQL(Data)->Hive (Analyze&Statistics)->MySQL
- opencv-用分水岭算法进行图像分割
- MacOS 下连接以太网出现的错误解决方法
- Android应用双开实现
- spring security的原理及教程
- ES6学习笔记(四)
- 无埋点数据收集SDK
- CSDN爬虫(二)——博客列表分页爬虫+数据表设计
- 从入门到不放弃:多浏览器的自动化测试(1)- 本地测试
- Array.prototype方法
- 阿里早期Android加固代码的实现分析
- [日推荐]你不理财, 财就不理你! 这3款小程序教你学会理财