玲珑0.0.2

暂时先放我的博客上,因为有一些注意事项,群消息容易刷没

之前群里有朋友调整功率会花屏,我这一直不能复现

下载地址

http://bkkj.cc/0b

0.0.2更新日志

  • 修复创建虚拟显示器马上就没了的问题
  • 支持开机不用连物理显示器也能串流
  • 支持玲珑服务开机自启,这个在任务管理器中看不到,用的任务计划,开机后不用输密码进系统也能自启

玲珑服务会检测当前是否有连接的显示器,如果没有,则会创建一个

开机后用任务管理器搜进程 tiny_server.exe 有存在即可

安装 parsec vdd 驱动

运行解压后的 parsec-vdd-0.45.0.0.exe

管家启动

打开 tiny_manager.exe 即可

需要先打开一次,再重启才支持创建虚拟显示器

再见滴滴研发,你好梦魇兽

前言

哈喽大家,我是一名个人开发者,常用的昵称是梦魇兽,在入职滴滴之前,也有一些技术相关的文章编写在掘金社区。 一个传送门

我是一个热爱代码,音乐的人,MBTI 是 INTP,很好区分我与猫头鹰的区别,因为我的头不能旋转180度。

我在天空之城 B 座,4楼,可能也不少时间吓到过男厕的兄弟们,因为我留了大概齐肩的长发

我的眼神应该常常是呆滞的,偶尔也会带上我的脑花帽子

今天作为离职前的最后一次分享

此篇有凡尔赛,有装逼,如有介意者可直接退出

离职

简单说下离职的原因

2023年度中度抑郁转了重度抑郁,有较多的躯体症状,例如频繁的心悸,长时间的喘不过气,没有精神,情绪不稳定等

这是打印的病例以及药方

抑郁症的原因是由原生家庭导致的,至今我的生父生母不知道我在哪儿工作,不知道我生病,甚至不知道我是否还活着,刚大学毕业,我因为学费,和实习来北京入不敷出,刚毕业负债10多w,这对于当时的我来说,也是一个很大的压力

我从未主动告诉部门同事自己有抑郁症,有两个原因吧,但是Tom翻到了我写的博客

1.我不希望大家把我当成一个病人
2.如果我有任何工作上的失误,我希望直接指责我,不应该由于我有抑郁症就会对我有额外的包容

我想要的,就是公平的和大家在这个公司,并且能够靠自己的能力换来尊重,而不是抑郁症

这个病给我最大的感受就是,孤独,和绝望,整个抗抑的三年,只有自己独自一人,最后加重的时候,也是自己一人在多个医院来回跑,期间还会遇到态度极差的医生

吃抗抑郁药也有极大的副作用,我在2023中,我的精力、智力、记忆力,直接严重折扣

一大波图带你重新认识一下我

音乐

虽然大家对我的印象主要来自于技术,但我最热爱的,始终是音乐,从大一至今六年,从来没有变过,

我是一个完整的人,我的生命中不只是代码,还有很多热爱的东西,我热爱音乐,非常热爱。

我曾把音乐当做是比我生命更重要的东西,可能也是因为我不觉得生命重要,因为我们,明天可能就会死去,这些都是未知的

临走前,学了一手福禄寿的《马》,因为我吉他寄回去了已经,钢琴目前熟练度还没上来,简单弹唱一段,赠予大家,希望大家能够在满是黑夜的世界中,找到属于自己的光明

只是觉得歌词部分应景

对不起,最后几天,这个谱子对我来说太难了,中间副歌用了原版伴奏

B站传送门

么的后来越听越难听,大家可以去同步发布的博客,可以听到多情种、安河桥、余香

大二的我在讲台

大四在寝室

2023的5.1在成都

2023的不知道哪一天在蓝岸友情合作一手余香

技术

分享了我的音乐,我到我的技术了

在公司内的角色,我直接贴一个自评内容好了

在整个滴滴DiFlutter的建设中,负责多个关键模块,包括Lomo框架,性能采集SDK,以及Flutter热修复平台的全栈开发,凭借自身在Flutter领域的独特经验,能多次且快速的为业务落地遇到的难题,提供正确的解决方案。创新的解决思路为Flutter热修复大幅度减少了包体积,以及支持资源文件的动态加载。极强的自驱力,能够自主,高效学习多个方向的技术,并应用到实际业务落地中,从用户的角度出发,将负责的单一模块当成完整的产品,主动优化各模块在使用上的体验,展现出良好的对技术的深度理解,以及体现出较强的技术广度。

Tom 应该也是比较认可我的,除了在我抑郁犯病状态极差之外,会开始怼一些态度不好的同事

我从大学的时候,就自学多门技术,包括前后端,Android 客户端,Flutter 经验至今已有五年,产品,UI,所以我所有的软件(也可称为产品),我自己一人,便是所有身份的执行者

曾经在酷安上架过6个软件,下载量累计30w,在 Google Play 上架过两个,因为没有精力处理隐私协议,被迫下架,在 App Store 上架一个,没有精力去推广运营,后面会借助自媒体等方式对我的产品进行推广

因为傻逼的我,将我仅有的精力,给了工作

我终究成为了自己讨厌的人,为了几两碎银

在后面的离职生活中,我会复活我所有的软件,开始大量投入 Bug 的修复

开源&个人开发者

我的 Github 主页

我自己的 Organization,里面有基础组件,有完整的 App,有底层的库,整个组织开源代码超过 10W 行,全部由我一人开发维护

个人软件官网 https://nightmare.press

个人软件

这里为大家分享由我自己研发的一些产品,其中部分 App 需求小众,再我将其全部带到应用市场后,

大家有任何问题和建议,可以联系我的邮箱 mengyanshou@gmail.com

其中速享、ADB KIT、Code FA 是开源状态,大家也可以直接提交 issue

整个2023,我无愧于我的工作,朋友,但我有愧于我自己的产品

某一天,小白测评在没有跟我联系的时候,测评了我开发的两款软件,很多极其复杂的情绪一并涌了上来

大部分横跨 Windows、Linux、macOS,像速享则是一套代码横跨 Win/Linux/Mac/iOS/Android/Web

魇工具箱

我最先复活的软件是魇工具箱,这是我大一上学期就开发上架的软件。

可以处理 Google Android 系统的镜像,由于国内的 ROM 都是魔改安卓,所以软件本身支持的是处理 Android ROM,简单形容功能,输入一个 ROM 给这个工具箱,工具箱会吐出一个新的 ROM,新的 ROM 就会带上各种个人很繁琐才能实现的功能。

中间过程有 payload.bin,br 解包,dat 解包,ext4 镜像解包,中间还会有 baksmali 的反编译,framework/services.jar 的核心破解

还有 AVB/AVB2.0 的去除,Root(Magisk) 的集成,全局 Odex(方便XP框架),然后解锁 System 分区等,也可以自定义对一些系统软件进行删除。减少系统分区占用

从大一到大四,这个软件为我带来了4w元的收入,帮我度过了很困难的一段时期,所以这个软件对我的意义,是不一样的,由于去年精力无法再维护这个软件,是我主动下架了,后续这是第一个复活的软件,最近已经在做大量的新代码的开发

支持分布式的远程调用+工作流的方式,用户想要实现自己自定义的功能,只需要一个 yaml 文件即可

速享

  • 速享: 一款类似于 LocalSend 的软件吧,但做得不及它,为了解决局域网下的文件互传问题,
  • 文件互传
    • 像聊天一样在局域网共享文件
    • 断点续传
    • 图片预览,视频极速在线播放
    • 点对点高速下载,不使用服务器中转
    • 多个设备同时分享与查看
    • 文件夹共享(重构中)
  • 远程文件管理
    • 可视化浏览
    • 删除,重命名
  • 文件分类:将接受到的文件按扩展名进行分类
  • 快速连接
    • UDP 自动连接
    • 扫码连接
    • 输入连接
    • 历史连接
  • 文件静态部署:类似 tomcat 或者 nginx,方便设备间使用浏览器查看文件,访问网页
  • 支持浏览器加入客户端
  • 剪切板极速共享
  • 支持多平台:Android、Windows、macOS、Linux
  • 响应式设计:适配各种尺寸,平板、手机、横竖屏切换自动适配布局
  • 支持Android SAF:可以接收任意App分享的文件
  • 桌面端后台运行

ADB KIT

  • 快捷管理多设备调试
  • 扫码、局域网发现等快速连接设备
  • 快捷上传,安装应用
  • 为设备免 Root 开启 ADB
  • 安卓免root连接另一台安卓
  • 将 ADB 安装到系统
  • 历史记录
  • 应用管理器,桌面启动器
  • 快捷启动
    • scene
    • 黑域
    • 冰箱
    • shizuku


无界(Uncon)

关于这个软件,其实是看不惯厂商生态下的各种东西,例如小米妙想,华为应用流转,因为这种功能可以跨生态的,所以无界诞生了,这个软件有一个介绍视频

无界

类似鸿蒙的应用流转,但是不限制品牌,机型

可以 Android To Android 的镜像/控制/应用流转,可以实现 Android To PC(Windows、macOS、Linux) 的镜像/控制/应用流转

需要特殊提的是,即使是 Android To Android,也能够拥有完整的 adb 能力,也就是说,完整的支持 otg

这是通过 termux_api 实现的

同样支持非 root 实现adb的软件在 google play 需要6美元

Code FA

这个软件有一个掘金的文章

传送门

简单说,就是将 VS Code 带到了安卓,以最小内存占用的方式,本地运行

当然,很多功能不及 PC 的 VS Code,

SuLa

在2023病情加重前的一个东西,实现类似 TNT,三星 DEX 等功能,但是仍然,不限制机型

最后

如开头所说,我同样热爱吉他,钢琴,也爱唱歌

希望大家,能够坚持自己热爱的事,尽管那会异常的艰难

我将在接下来的生活中,一边养病,一边继续开发我的个人软件,博客会持续分享技术。

也可能会直播玩游戏,毕竟失去了固定收入,当很长一段时间远程乞丐,居家讨饭

大家看到可以赏口饭吃,刷到视频点个赞即可。

一直喜欢的一句话,与大家共勉

偏信则暗,兼听则明

偶然拍到的,昏暗的职场,也会有一束亮到刺眼的光,我大抵是想要讽刺些什么,是啊,想讽刺些什么

希望你们能够在昏暗的世界中,找到属于自己的光亮

无Context调用services

无Context调用 Services 的一点经验分享

##从DisplayManagerGlobal入手
这是一个单例,但却能构造出IDisplayManager对象。
public static DisplayManagerGlobal getInstance() {
synchronized (DisplayManagerGlobal.class) {
if (sInstance == null) {
IBinder b = ServiceManager.getService(Context.DISPLAY_SERVICE);
if (b != null) {
sInstance = new DisplayManagerGlobal(IDisplayManager.Stub.asInterface(b));
}
}
return sInstance;
}
}

    private static IServiceManager getIServiceManager() {
    if (sServiceManager != null) {
        return sServiceManager;
    }
    // Find the service manager
    sServiceManager = ServiceManagerNative.asInterface(BinderInternal.getContextObject());
    return sServiceManager;
}

所以在没有Acitivity的Context的时候,我们也可以用这种方法来反射出各种service

也就是平时我们所看到的

其实还有第二种方法,反射出系统的Context,然后通过这个Context getService,

无论是以上哪一种方法,都会有一个限制,

例如createDisplay方法

会校验uid查询出来的packagename和context中拿到的packagename是否一致

而反射出的context的packagename是android

而我们如果通过shell运行的dex,packagename是com.android.shell

实现经历

虽然在无 root 的情况下支持 adb 不是一个特别大众的需求,但是我仍在为此做努力,这个已经是前两周实现了,但是没时间写相关文章。

解释一下 adb 编译成 arm64 二进制后,为什么不能无 root 通过 OTG 去连接另一台设备,因为 adb 在最初设计就没有考虑会运行在安卓设备上,在安卓上,进程不能直接读写 /dev/bus/usb 节点,而在 PC 上是扫描这个节点(linux),这和安卓其它一堆动态权限类似,安卓为了做权限控制,修改了了 Linux 内核,加了 Linux 原本不会有的限制,例如 Linux 上普通进程本就是可以读写 usb 的,但在安卓上,我们只能通过编写 java 代码动态申请安卓权限,然后用 android 的 java api 去读写。
所以c语言层不能读写 usb,而 java 可以,而这二者如何结合,就是问题所在,也是实现的难点所在。

所以在之前的 ADB KIT中,我也是这样做的,并用 java 代码实现了部分 adb 协议,包括握手,鉴权,文件上传,软件安装,终端交互。这部分是开源的,文章在掘金 -> https://juejin.cn/post/7034799230086545445,所以我对 adb 本身的理解,本就已经超出绝大部分人了,你们给我提的思路和建议,都是我四五年前能想到的东西了,我们做东西要的是实现,而不是谁都能想到的想法。

但是这种效率极低,上传文件龟速,不也不太清楚是为什么,可能是我实现得不好,也可能是 java 效率本就不如 c。
并且协议很难实现完整,例如投屏所需要的关键协议,adb forward 等

最终方案,将 termux-adb 进行了改造,结合 termux-api,在命令行中实现动态申请 usb 权限,然后获得文件的描述符,然后 hook adb 在代码中的 open opendir 等方法,让它以为读取到的就是串口设备,这样的效率是极高的。

经过了很久的尝试,花了我的一整个周末,熬了几个大夜,说实话,我不太想把这作为一个免费的功能,但是最终,它是免费的,在当前版本是,我不会限制你使用的版本,如果后续它成为一个付费的功能,你也可以使用历史版本。

总是会有人来说,“都是用的开源的东西你凭什么收费,都是能查到的资料写的你凭什么收费,尽管不是能查到的资料,那你也是凭现有的资料总结出来的,你凭什么收费”,有个人之前在酷安的评论区一直喷我这点(最近又来一个),我屏蔽后去我的B站喷,这世上最可怕的生物,是人。

我就收费了,我写个 hello world 我也收费999元怎么了?你敢说我错了?没逼着你买,我的软件都是我付出过极多精力的东西,很多都一直免费到现在,我上班工资一个月几w,下班还要来伺候这群人(指的态度不好的),真是不讨好。当然友好的用户,我还是很愿意为他们提供好的软件的。

如果我喜欢某一个软件,我希望它是收费的,如果它一直免费,我反而会担心,用爱发电总有终止的那一天,除非开发者财富自由,不然开发者总是会陷入一个困境“写这个又没钱,要不我不写好好上班算了”。

的确,目前我所开发的软件,都给我带来很多的精神内耗,加上最近了解了一下我升职后的工资,大概升两职后,工资大概能到4w一个月,我为什么不把自己写软件的精力也投入到工作上呢?然后一天一天。

哦最后关于我的软件为什么还不收费,是因为一个软件要收费,需要做的事情也是很多的,后端接口,鉴权方式等,最近公司的压力太大,我能拿来自己开发的时间极少。

我不太清楚甲壳虫和bug的方式,但我敢说,目前 ADB KIT OTG 的效率是大于它俩的。

如何使用

1.保证需要调试的设备开启了 USB 调试
2.使用 OTG 数据线连接两个设备
这个地方有个小坑, type c to c 的线总是没办法区分谁连谁,全靠运气,所以有条件的可以用 USB to Type c 再加一个 OTG转接头解决

ADB KIT 将绝大部分的工作都自己完成了,使用 OTG 调试设备几乎和 PC 连接 Android 一样

数据线插上,然后打开 ADB KIT
如图,注意点确定哈,点完后,被调试的设备会出现 ADB 的弹窗,也注意点确定哈(如果是MIUI没点到这个弹窗,后面都不会弹了,重启和开关 USB 调试可以解决)

无 Root 使用 ADB 带来的好处

只要自己有两个设备即可激活 Shizuku、Scene、冰箱等软件,就算需要激活的设备没有自带的无线调试
可以更方便的为其他的设备安装/卸载软件,上传文件,例如车机,手表

无界也马上支持无 Root OTG 控制另一台安卓(车机,手表),最近工作压力稍微有点大,精力缺乏。

终于,ADB KIT、Uncon支持无root OTG

实现经历

虽然在无 root 的情况下支持 adb 不是一个特别大众的需求,但是我仍在为此做努力,这个已经是前两周实现了,但是没时间写相关文章。

解释一下 adb 编译成 arm64 二进制后,为什么不能无 root 通过 OTG 去连接另一台设备,因为 adb 在最初设计就没有考虑会运行在安卓设备上,在安卓上,进程不能直接读写 /dev/bus/usb 节点,而在 PC 上是扫描这个节点(linux),这和安卓其它一堆动态权限类似,安卓为了做权限控制,修改了了 Linux 内核,加了 Linux 原本不会有的限制,例如 Linux 上普通进程本就是可以读写 usb 的,但在安卓上,我们只能通过编写 java 代码动态申请安卓权限,然后用 android 的 java api 去读写。
所以c语言层不能读写 usb,而 java 可以,而这二者如何结合,就是问题所在,也是实现的难点所在。

所以在之前的 ADB KIT中,我也是这样做的,并用 java 代码实现了部分 adb 协议,包括握手,鉴权,文件上传,软件安装,终端交互。这部分是开源的,文章在掘金 -> https://juejin.cn/post/7034799230086545445,所以我对 adb 本身的理解,本就已经超出绝大部分人了,你们给我提的思路和建议,都是我四五年前能想到的东西了,我们做东西要的是实现,而不是谁都能想到的想法。

但是这种效率极低,上传文件龟速,不也不太清楚是为什么,可能是我实现得不好,也可能是 java 效率本就不如 c。
并且协议很难实现完整,例如投屏所需要的关键协议,adb forward 等

最终方案,将 termux-adb 进行了改造,结合 termux-api,在命令行中实现动态申请 usb 权限,然后获得文件的描述符,然后 hook adb 在代码中的 open opendir 等方法,让它以为读取到的就是串口设备,这样的效率是极高的。

经过了很久的尝试,花了我的一整个周末,熬了几个大夜,说实话,我不太想把这作为一个免费的功能,但是最终,它是免费的,在当前版本是,我不会限制你使用的版本,如果后续它成为一个付费的功能,你也可以使用历史版本。

总是会有人来说,“都是用的开源的东西你凭什么收费,都是能查到的资料写的你凭什么收费,尽管不是能查到的资料,那你也是凭现有的资料总结出来的,你凭什么收费”,有个人之前在酷安的评论区一直喷我这点(最近又来一个),我屏蔽后去我的B站喷,这世上最可怕的生物,是人。

我就收费了,我写个 hello world 我也收费999元怎么了?你敢说我错了?没逼着你买,我的软件都是我付出过极多精力的东西,很多都一直免费到现在,我上班工资一个月几w,下班还要来伺候这群人(指的态度不好的),真是不讨好。当然友好的用户,我还是很愿意为他们提供好的软件的。

如果我喜欢某一个软件,我希望它是收费的,如果它一直免费,我反而会担心,用爱发电总有终止的那一天,除非开发者财富自由,不然开发者总是会陷入一个困境“写这个又没钱,要不我不写好好上班算了”。

的确,目前我所开发的软件,都给我带来很多的精神内耗,加上最近了解了一下我升职后的工资,大概升两职后,工资大概能到4w一个月,我为什么不把自己写软件的精力也投入到工作上呢?然后一天一天。

哦最后关于我的软件为什么还不收费,是因为一个软件要收费,需要做的事情也是很多的,后端接口,鉴权方式等,最近公司的压力太大,我能拿来自己开发的时间极少。

我不太清楚甲壳虫和bug的方式,但我敢说,目前 ADB KIT OTG 的效率是大于它俩的。

如何使用

1.保证需要调试的设备开启了 USB 调试
2.使用 OTG 数据线连接两个设备
这个地方有个小坑, type c to c 的线总是没办法区分谁连谁,全靠运气,所以有条件的可以用 USB to Type c 再加一个 OTG转接头解决

ADB KIT 将绝大部分的工作都自己完成了,使用 OTG 调试设备几乎和 PC 连接 Android 一样

数据线插上,然后打开 ADB KIT
如图,注意点确定哈,点完后,被调试的设备会出现 ADB 的弹窗,也注意点确定哈(如果是MIUI没点到这个弹窗,后面都不会弹了,重启和开关 USB 调试可以解决)

无 Root 使用 ADB 带来的好处

只要自己有两个设备即可激活 Shizuku、Scene、冰箱等软件,就算需要激活的设备没有自带的无线调试
可以更方便的为其他的设备安装/卸载软件,上传文件,例如车机,手表

无界也马上支持无 Root OTG 控制另一台安卓(车机,手表),最近工作压力稍微有点大,精力缺乏。

Android双屏异显简单上手

获得 Display

1.一、使用MediaRouter选择演示显示

1
2
3
4
5
6
7
8
MediaRouter mediaRouter = (MediaRouter) context.getSystemService(Context.MEDIA_ROUTER_SERVICE);
MediaRouter.RouteInfo route = mediaRouter.getSelectedRoute();
if (route != null) {
Display presentationDisplay = route.getPresentationDisplay();
if (presentationDisplay != null) {
// ***
}
}
阅读更多

梦魇兽软件反馈指南

软件反馈

目前个人软件两个群,总共2000多人,处理反馈信息压力属实太大,时不时一个好友请求过来,几句话啥也说不明白就开始慰问我全家。

酷安私信也是,我平时工作偶尔就想放松一下,当个社区刷一下,就发现私信态度不好的,评论态度不好的,态度不好还指责我的,说其他的开发者是又厉害有热心,我的确做不到…

所以后续我QQ禁止加好友,酷安禁止私聊。

后续反馈优先处理邮箱(mengyanshou@gmail.com)和Github Issue中的信息。

不要一上来就一段简单的文字,说这是为什么为什么!我甚至都不知道你使用的软件是哪一个

反馈带上最基本的信息。

手机系统类型:MIUI,Flyme

Android 版本:10,11,12

所使用的软件版本:以应用在系统内为主,就是你在桌面长按软件进入应用详情看到的那个

复现逻辑:如果是bug,你得让我复现,我才能通过调试代码进行修复

开发维护多难

魇·工具箱代码是1.7w行

速享是1.6w行

ADB KIT 是1.7w行

Uncon 是1.6w行

Code FA 的代码很少,相比上面几个可以忽略不计

除了闭源的魇·工具箱和 Uncon 以外,其他项目都是开源的,觉得不真实的话可以自己去对应的开源地址看。

每个工程有大量的上下文,所以我每次维护一个软件,都有一些时间是在读之前的代码,我如果一天维护一个软件,可能才把当前代码读懂,就该维护下一个软件了。

所以我基本是好几周专一维护同一个软件。

维护的时间

由于我目前**的问题比较严重,平时下班基本没有精力再写代码,周末也是很少的时间维护,所以大家购买会员慎重考虑。

一些闲话

我在滴滴加实习工作了一年,也和多个部门协作过,至今我没有遇见一个人还用业余时间搞个人项目的,一个也没有!

也许在他们眼中我才是那个傻子。明明拿着比大多数同龄人都要高的工资,却要一边上班一边伺候我的用户。

平时上班本就烦躁,一些一加群就@我啥也说不明白的人,我真的会更烦躁。

个人软件对我的意义

是爱好,是执念,我遇见一些需求场景找不到好的软件,我便会尝试自己开发,当前脑子里面还有非常多的想开发的软件。

自然是因为时间不允许,所以才没开发。

我也想不工作专心写自己的项目,可我还需要生活,需要还债。

Flutter实战项目-Android生态互联

背景

目前各大厂商的多设备协同大都做得差强人意,并且都只是自己生态下的产物,不能实现跨生态互联。

为什么厂商不真正将生态覆盖到其他设备?是技术支持不够吗?
技术不是问题,以每个厂商的实力,像鸿蒙的互联,小米妙想,应该是能够跨厂商互联的,但是这样做了,用户就不会为了使用这项功能,
而对整个生态的设备消费了,这甚至会直接影响设备的销量,例如我有小米手机,华为平板,如果华为平板已经支持小米妙想的话,我再买小米平板的概率就被降低了。

软件截图

在视频渲染上,

屏幕的渲染氛围硬解和软件,在前面的版本,是通过 C/C++ 自实现代码,

从大的视角看 Uncon

Flutter 承载了前面的视图界面,用户最先看到的主页,菜单,响应各种动画