背景
miui+ beta 软件貌似出来蛮久了,这个技术原理和scrcpy差不多,只是miui+ beta是系统软件,所以他可以直接反射,而不需要开发者权限才能反射。
优点
- 支持最多3个独立窗口【APP 独立窗口,不会在手机物理屏幕显示】
不过一些程序屏蔽多个窗口,比喻腾讯视频就不可以,貌似不是技术原因,因为一些斗鱼,虎牙视频类可以开启独立窗口,我用JB逆向分析看他是写了包名做过滤而已, - 复制程序比较方便
- 不用蓝牙就可以传递声音
- 不用开启开发者模式
编码声音传递缺点
- 每次连接基本都要扫码,很容易连接不上,这点我是非常不能理解,我是小米笔记本,这么大一个公司,基本功能做的非常不稳定,所以他的beta 一直没有去掉。貌似起码都出来一年多,产品还这么不稳定,这个点我实在想不明白,我不知道小米投入多少开发,但感觉不应该,一个扫码总是出不来,PC 没有技术兼容性,本身就是只是渲染层,如果考虑其他平台的话,PC端都做不好,其他有什么用呢???
- 不能像scrpcpy类产品直接黑屏,miui+ 只是不锁屏,屏幕还是或多或少亮着,可能考虑安全考虑,但只是wifi能连接,我觉得这个问题不是很大,但有通知提醒,可以一键点击退出,所以安全考虑有点站不住脚。大不了加一个开关,默认关闭,只有需要协同必须手动开启即可。
- 连接必须开启gps定位,这个是我不能忍的功能点,如果安全考虑,为什么要定位呢?难道手机定位移动超过一定范围就停掉吗?但不是只能wifi吗?安全也可以加默认开关,开启gps就会耗电,用一些程序就会获取实时定位,但有的时候并不像开启定位。
- 最新版本不能设置右键快捷,因为我希望返回右键。
- 不能走usb传输数据,必须开启wifi
miui+ 总结
miui+ 用起来还可以,只能说够用,现在改名小米妙传,Miui+ beta 官方不提供现在,酷安有人提供小米妙传的地址, https://www.aliyundrive.com/s/teDgZazeWU5
安装包会检测机型,可以在cmd 拖入安装包,然后增加参数 /i 就可以自动按照。安装后删除miui+ 前一个版本。
目前用自己的协同软件非常舒服,感觉速度比alink和 miui+速度要快一点,我不知道为什么,难道是c++ 性能就是快吗?
我自己的win32+ffmepg api+sdl开发。
miui+ 多窗口技术
我一次用窗口,这样子手机可以同时跑几个APP,好处有什么用,我可以一边看视频,一边微信回复,可以不用小窗口,因为我都用PC,我窗口已经非常大了,我可以放几个窗口。
过程
我要探索这个技术,那么就有逆向miui+ apk
- 我搜索miui+ apk,网上找到一些版本
- 用jadx逆向分析
- 具体代码在display, mirror 包下面
创建窗口逻辑
- 创建virtualdisplay
- 创建成功然后启动指定APP【指定display id】
- 模拟点击和按键要指定display id
如果不指定display id,那么就是默认物理屏幕去了。
技术验证
用最简单代码验证这个逻辑
- 开启手机模拟辅助显示设备【开发者模式】
- 用adb命令找到这个窗口display
dumpsys window displays
找到非0 那个 Display: mDisplayId=57 rootTasks=1
我找到57,你的可能大于0任意一个数字 -
写代码启动知乎到57
PackageManager packageManager = getPackageManager(); String packname = "com.zhihu.android"; Intent intent = packageManager.getLaunchIntentForPackage(packname); Bundle opts=ActivityOptions .makeBasic() .setLaunchDisplayId(57) .toBundle(); startActivity(intent, opts);
这里注意android 是12的话要设置权限获取知乎权限,可以另外代码方式启动知乎。packageManager.getLaunchIntentForPackage(packname); 这个 android 12需要权限。
- 效果图
可以看到副窗口显示知乎,主窗口是没有改变。这个功能有点像小窗口功能,说不定这个技术就是这个原理。
总结
后续我会在自己的写的协同软件增加窗口功能,自己开发软件想加什么功能就加上什么功能。别人写的软件或者功能很难满足自己的需求。
Miui+ 开发者,我感觉他们开发者自己都不怎么用这个产品,做技术的人,应该多用自己开发产品,同时用同类产品。否则很难知道什么是好,是什么是坏。可能小米发展太快,估计只是周边产品,没有投入太多精力。