w2016561536 / android_virtual_cam

xposed安卓虚拟摄像头 android virtual camera on xposed hook
MIT License
1.35k stars 375 forks source link

视频不存在 #60

Closed xiaren2 closed 2 years ago

xiaren2 commented 2 years ago

3.4正常,3.5,3.6提示视频不存在,但是Camera1文件夹我根本就没动,卸载重新安装3.4,又能正常使用。

xiaren2 commented 2 years ago

安卓9,miui12

w2016561536 commented 2 years ago

有提示未授权吗,很长的一串

w2016561536 commented 2 years ago

请问问题解决了吗 三日后无回复默认已解决,将关闭issue

xiaren2 commented 2 years ago

打开vcam,提示"vcam:不存在替换视频",没有很长的未授权啥的字符串。使用的vcam3.8

w2016561536 commented 2 years ago

是edxp吗

如果是全局模式的话,可能是因为其他应用程序没有权限读取相册,在私有目录下也未发现视频,但不影响正常使用。

xiaren2 commented 2 years ago

lsp,不是全局,只针对某些应用生效。反正自从3.4,体积缩小以后就不能用了。打开vcam会有那个提示,打来作用的app,也会有那个提示。3.4就正常。

w2016561536 commented 2 years ago

这个功能是3.5加进去的 检查一下目标应用在系统设置里的权限?

在 2021年11月30日,上午7:29,xiaren2 @.***> 写道:

lsp,不是全局,只针对某些应用生效。反正自从3.4,体积缩小以后就不能用了。打开vcam会有那个提示,打来作用的app,也会有那个提示。3.4就正常。

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

w2016561536 commented 2 years ago

如果已经授权读取本地目录,那么请发一下xposed日志

Atomos-X commented 2 years ago

at com.android.internal.util.Preconditions.checkNotNull(Preconditions.java:167) at android.widget.Toast.getLooper(Toast.java:182) at android.widget.Toast.<init>(Toast.java:167) at android.widget.Toast.makeText(Toast.java:500) at android.widget.Toast.makeText(Toast.java:483) at com.example.vcam.HookMain.handleLoadPackage(HookMain.java:143) at de.robv.android.xposed.IXposedHookLoadPackage$Wrapper.handleLoadPackage(Unknown Source:2) at de.robv.android.xposed.callbacks.XC_LoadPackage.call(Unknown Source:6) at de.robv.android.xposed.callbacks.XCallback.callAll(Unknown Source:28) at D1.afterHookedMethod(Unknown Source:111) at de.robv.android.xposed.LspHooker.handleHookedMethod(Unknown Source:136) at LspHooker_.getClassLoader(Unknown Source:8) at android.app.ContextImpl.getClassLoader(ContextImpl.java:453) at android.webkit.WebViewFactory.getProviderClass(WebViewFactory.java:508) at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:348) at android.webkit.WebSettings.getDefaultUserAgent(WebSettings.java:1365) at com.tencent.mm.normsg.c$p.aa(Native Method) at com.tencent.mm.plugin.normsg.b.fGT(SourceFile:12030) at com.tencent.mm.plugin.normsg.a.d.fGT(SourceFile:425) at com.tencent.mm.protocal.j$a.toProtoBuf(SourceFile:143) at com.tencent.mm.al.x.a(SourceFile:144) at com.tencent.mm.protocal.h$a.onTransact(SourceFile:180) at android.os.Binder.execTransactInternal(Binder.java:1179) at android.os.Binder.execTransact(Binder.java:1143)

w2016561536 commented 2 years ago

首先日志只复制了一半,最关键的前面是什么导致的这个问题,没有复制。

不过微信应该没有这个bug,我测试过

Atomos-X commented 2 years ago

[ 2021-12-03T09:48:58.268 10266: 9179: 9179 I/LSPosed-Bridge ] Loading class eu.faircode.xlua.XLua [ 2021-12-03T09:48:58.284 10266: 9179: 9179 I/LSPosed-Bridge ] Loading module com.example.vcam from /data/app/~~MlXA6b14fqqou6RlTjhVOQ==/com.example.vcam-hb4IpYOn57uw6TFtf_LY4Q==/base.apk [ 2021-12-03T09:48:58.286 10266: 9179: 9179 I/LSPosed-Bridge ] Loading class com.example.vcam.HookMain [ 2021-12-03T09:48:58.617 10266: 9198: 9198 I/LSPosed-Bridge ] Loading module eu.faircode.xlua from /data/app/~~Dfc3HzSu7aalj14EdvudoA==/eu.faircode.xlua-59VTZgBaHr_9p8GHKwaFUw==/base.apk [ 2021-12-03T09:48:58.662 10266: 9198: 9198 I/LSPosed-Bridge ] Loading class eu.faircode.xlua.XLua [ 2021-12-03T09:48:58.680 10266: 9198: 9198 I/LSPosed-Bridge ] Loading module com.example.vcam from /data/app/~~MlXA6b14fqqou6RlTjhVOQ==/com.example.vcam-hb4IpYOn57uw6TFtf_LY4Q==/base.apk [ 2021-12-03T09:48:58.682 10266: 9198: 9198 I/LSPosed-Bridge ] Loading class com.example.vcam.HookMain [ 2021-12-03T09:49:00.095 10266: 8805: 8823 E/LSPosed-Bridge ] java.lang.NullPointerException: Can't toast on a thread that has not called Looper.prepare() at com.android.internal.util.Preconditions.checkNotNull(Preconditions.java:167) at android.widget.Toast.getLooper(Toast.java:182) at android.widget.Toast.<init>(Toast.java:167) at android.widget.Toast.makeText(Toast.java:500) at android.widget.Toast.makeText(Toast.java:483) at com.example.vcam.HookMain.handleLoadPackage(HookMain.java:143) at de.robv.android.xposed.IXposedHookLoadPackage$Wrapper.handleLoadPackage(Unknown Source:2) at de.robv.android.xposed.callbacks.XC_LoadPackage.call(Unknown Source:6) at de.robv.android.xposed.callbacks.XCallback.callAll(Unknown Source:28) at D1.afterHookedMethod(Unknown Source:111) at de.robv.android.xposed.LspHooker.handleHookedMethod(Unknown Source:136) at LspHooker_.getClassLoader(Unknown Source:8) at android.app.ContextImpl.getClassLoader(ContextImpl.java:453) at android.webkit.WebViewFactory.getProviderClass(WebViewFactory.java:508) at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:348) at android.webkit.WebSettings.getDefaultUserAgent(WebSettings.java:1365) at com.tencent.mm.normsg.c$p.aa(Native Method) at com.tencent.mm.plugin.normsg.b.fGT(SourceFile:12030) at com.tencent.mm.plugin.normsg.a.d.fGT(SourceFile:425) at com.tencent.mm.protocal.j$a.toProtoBuf(SourceFile:143) at com.tencent.mm.al.x.a(SourceFile:144) at com.tencent.mm.protocal.h$a.onTransact(SourceFile:180) at android.os.Binder.execTransactInternal(Binder.java:1179) at android.os.Binder.execTransact(Binder.java:1143) 模块日志就这么点。运行环境android 12,安装了存储空间隔离。 同样一个视频文件,更新到3.8之后,放在相机目录camera1下面能正常使用。禁止存储权限之后放在/Android/data/com.tencent.mm/file/camera1/virtual.mp4就无法使用了。

w2016561536 commented 2 years ago

`[ 2021-12-03T09:48:58.268 10266: 9179: 9179 I/LSPosed-Bridge ] Loading class eu.faircode.xlua.XLua

[ 2021-12-03T09:48:58.284 10266: 9179: 9179 I/LSPosed-Bridge ] Loading module com.example.vcam from /data/app/~~MlXA6b14fqqou6RlTjhVOQ==/com.example.vcam-hb4IpYOn57uw6TFtf_LY4Q==/base.apk

[ 2021-12-03T09:48:58.286 10266: 9179: 9179 I/LSPosed-Bridge ] Loading class com.example.vcam.HookMain

[ 2021-12-03T09:48:58.617 10266: 9198: 9198 I/LSPosed-Bridge ] Loading module eu.faircode.xlua from /data/app/~~Dfc3HzSu7aalj14EdvudoA==/eu.faircode.xlua-59VTZgBaHr_9p8GHKwaFUw==/base.apk

[ 2021-12-03T09:48:58.662 10266: 9198: 9198 I/LSPosed-Bridge ] Loading class eu.faircode.xlua.XLua

[ 2021-12-03T09:48:58.680 10266: 9198: 9198 I/LSPosed-Bridge ] Loading module com.example.vcam from /data/app/~~MlXA6b14fqqou6RlTjhVOQ==/com.example.vcam-hb4IpYOn57uw6TFtf_LY4Q==/base.apk

[ 2021-12-03T09:48:58.682 10266: 9198: 9198 I/LSPosed-Bridge ] Loading class com.example.vcam.HookMain

[ 2021-12-03T09:49:00.095 10266: 8805: 8823 E/LSPosed-Bridge ] java.lang.NullPointerException: Can't toast on a thread that has not called Looper.prepare()

at com.android.internal.util.Preconditions.checkNotNull(Preconditions.java:167)

at android.widget.Toast.getLooper(Toast.java:182)

at android.widget.Toast.(Toast.java:167)

at android.widget.Toast.makeText(Toast.java:500)

at android.widget.Toast.makeText(Toast.java:483)

at com.example.vcam.HookMain.handleLoadPackage(HookMain.java:143)

at de.robv.android.xposed.IXposedHookLoadPackage$Wrapper.handleLoadPackage(Unknown Source:2)

at de.robv.android.xposed.callbacks.XC_LoadPackage.call(Unknown Source:6)

at de.robv.android.xposed.callbacks.XCallback.callAll(Unknown Source:28)

at D1.afterHookedMethod(Unknown Source:111)

at de.robv.android.xposed.LspHooker.handleHookedMethod(Unknown Source:136)

at LspHooker_.getClassLoader(Unknown Source:8)

at android.app.ContextImpl.getClassLoader(ContextImpl.java:453)

at android.webkit.WebViewFactory.getProviderClass(WebViewFactory.java:508)

at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:348)

at android.webkit.WebSettings.getDefaultUserAgent(WebSettings.java:1365)

at com.tencent.mm.normsg.c$p.aa(Native Method)

at com.tencent.mm.plugin.normsg.b.fGT(SourceFile:12030)

at com.tencent.mm.plugin.normsg.a.d.fGT(SourceFile:425)

at com.tencent.mm.protocal.j$a.toProtoBuf(SourceFile:143)

at com.tencent.mm.al.x.a(SourceFile:144)

at com.tencent.mm.protocal.h$a.onTransact(SourceFile:180)

at android.os.Binder.execTransactInternal(Binder.java:1179)

at android.os.Binder.execTransact(Binder.java:1143)

`

模块日志就这么点。运行环境android 12,安装了存储空间隔离。

同样一个视频文件,更新到3.8之后,放在相机目录camera1下面能正常使用。禁止存储权限之后放在/Android/data/com.tencent.mm/file/camera1/virtual.mp4就无法使用了。

首先,请注意大小写,然后文件夹叫files,不是file(谷歌规定的) 日志里体现的错误将在下个版本修复

w2016561536 commented 2 years ago

3.4正常,3.5,3.6提示视频不存在,但是Camera1文件夹我根本就没动,卸载重新安装3.4,又能正常使用。

问题解决了吗?蓝奏云链接取消了。

Atomos-X commented 2 years ago

[ 2021-12-03T09:48:58.268 10266: 9179: 9179 I/LSPosed-Bridge ] Loading class eu.faircode.xlua.XLua [ 2021-12-03T09:48:58.284 10266: 9179: 9179 I/LSPosed-Bridge ] Loading module com.example.vcam from /data/app/~~MlXA6b14fqqou6RlTjhVOQ==/com.example.vcam-hb4IpYOn57uw6TFtf_LY4Q==/base.apk [ 2021-12-03T09:48:58.286 10266: 9179: 9179 I/LSPosed-Bridge ] Loading class com.example.vcam.HookMain [ 2021-12-03T09:48:58.617 10266: 9198: 9198 I/LSPosed-Bridge ] Loading module eu.faircode.xlua from /data/app/~~Dfc3HzSu7aalj14EdvudoA==/eu.faircode.xlua-59VTZgBaHr_9p8GHKwaFUw==/base.apk [ 2021-12-03T09:48:58.662 10266: 9198: 9198 I/LSPosed-Bridge ] Loading class eu.faircode.xlua.XLua [ 2021-12-03T09:48:58.680 10266: 9198: 9198 I/LSPosed-Bridge ] Loading module com.example.vcam from /data/app/~~MlXA6b14fqqou6RlTjhVOQ==/com.example.vcam-hb4IpYOn57uw6TFtf_LY4Q==/base.apk [ 2021-12-03T09:48:58.682 10266: 9198: 9198 I/LSPosed-Bridge ] Loading class com.example.vcam.HookMain [ 2021-12-03T09:49:00.095 10266: 8805: 8823 E/LSPosed-Bridge ] java.lang.NullPointerException: Can't toast on a thread that has not called Looper.prepare() at com.android.internal.util.Preconditions.checkNotNull(Preconditions.java:167) at android.widget.Toast.getLooper(Toast.java:182) at android.widget.Toast.(Toast.java:167) at android.widget.Toast.makeText(Toast.java:500) at android.widget.Toast.makeText(Toast.java:483) at com.example.vcam.HookMain.handleLoadPackage(HookMain.java:143) at de.robv.android.xposed.IXposedHookLoadPackage$Wrapper.handleLoadPackage(Unknown Source:2) at de.robv.android.xposed.callbacks.XC_LoadPackage.call(Unknown Source:6) at de.robv.android.xposed.callbacks.XCallback.callAll(Unknown Source:28) at D1.afterHookedMethod(Unknown Source:111) at de.robv.android.xposed.LspHooker.handleHookedMethod(Unknown Source:136) at LspHooker_.getClassLoader(Unknown Source:8) at android.app.ContextImpl.getClassLoader(ContextImpl.java:453) at android.webkit.WebViewFactory.getProviderClass(WebViewFactory.java:508) at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:348) at android.webkit.WebSettings.getDefaultUserAgent(WebSettings.java:1365) at com.tencent.mm.normsg.c$p.aa(Native Method) at com.tencent.mm.plugin.normsg.b.fGT(SourceFile:12030) at com.tencent.mm.plugin.normsg.a.d.fGT(SourceFile:425) at com.tencent.mm.protocal.j$a.toProtoBuf(SourceFile:143) at com.tencent.mm.al.x.a(SourceFile:144) at com.tencent.mm.protocal.h$a.onTransact(SourceFile:180) at android.os.Binder.execTransactInternal(Binder.java:1179) at android.os.Binder.execTransact(Binder.java:1143) 模块日志就这么点。运行环境android 12,安装了存储空间隔离。 同样一个视频文件,更新到3.8之后,放在相机目录camera1下面能正常使用。禁止存储权限之后放在/Android/data/com.tencent.mm/file/camera1/virtual.mp4就无法使用了。

首先,请注意大小写,然后文件夹叫files,不是file(谷歌规定的) 日志里体现的错误将在下个版本修复

确实是files和Camera1,昨天手机打字没注意检查。抱歉!

w2016561536 commented 2 years ago

请问3.9版本有解决吗?

Atomos-X commented 2 years ago

[ 2021-12-11T04:11:45.703 10211: 28515: 28515 I/LSPosed-Bridge ] Loading module com.example.vcam from /data/app/~~HrlRugxt2ysIBezqRzYyDg==/com.example.vcam-MFqAeFuQsOrznMT1ceh-CQ==/base.apk [ 2021-12-11T04:11:45.705 10211: 28515: 28515 I/LSPosed-Bridge ] Loading class com.example.vcam.HookMain [ 2021-12-11T04:11:49.138 10211: 28515: 28515 I/LSPosed-Bridge ] 【VCAM】应用创建了渲染器:宽:3840 高:2160格式256 [ 2021-12-11T04:11:49.587 10211: 28515: 28574 I/LSPosed-Bridge ] 【VCAM】[toast]java.lang.NullPointerException: Can't toast on a thread that has not called Looper.prepare() [ 2021-12-11T04:12:01.675 10211: 28515: 28515 I/LSPosed-Bridge ] 【VCAM】应用创建了渲染器:宽:3840 高:2160格式256 [ 2021-12-11T04:12:01.837 10211: 28515: 28572 I/LSPosed-Bridge ] 【VCAM】[toast]java.lang.NullPointerException: Can't toast on a thread that has not called Looper.prepare()

我使用了存储空间隔离这个软件隔离了微信。vcam认为微信使用了存储权限,跑去DCIM/Camera1下寻找virtual.mp4。而不是我在/Android/data/微信目录的files/Camera1下去寻找。 因为在实际应用场景中很有可能针对复数的app指定不同的视频。我个人建议app的主界面给用户两个选择 1:使用/DCIM/Camera1/virtual.mp4 2:使用/Android/data/[app包名]/files/Camera1/virtual.mp4

或者更极端一点的vcam采用自己存储目录,hook了app之后,在vcam存储目录下建立被hookapp包名的子目录,在子目录下放置需要的virtual.mp4和bmp文件。 缺点就是复数app使用同一个视频文件,会有重复文件占用空间。优点就是针对各个app hook的管理方便,无需判断其他app存储权限之类的

w2016561536 commented 2 years ago

[ 2021-12-11T04:11:45.703 10211: 28515: 28515 I/LSPosed-Bridge ] Loading module com.example.vcam from /data/app/~~HrlRugxt2ysIBezqRzYyDg==/com.example.vcam-MFqAeFuQsOrznMT1ceh-CQ==/base.apk [ 2021-12-11T04:11:45.705 10211: 28515: 28515 I/LSPosed-Bridge ] Loading class com.example.vcam.HookMain [ 2021-12-11T04:11:49.138 10211: 28515: 28515 I/LSPosed-Bridge ] 【VCAM】应用创建了渲染器:宽:3840 高:2160格式256 [ 2021-12-11T04:11:49.587 10211: 28515: 28574 I/LSPosed-Bridge ] 【VCAM】[toast]java.lang.NullPointerException: Can't toast on a thread that has not called Looper.prepare() [ 2021-12-11T04:12:01.675 10211: 28515: 28515 I/LSPosed-Bridge ] 【VCAM】应用创建了渲染器:宽:3840 高:2160格式256 [ 2021-12-11T04:12:01.837 10211: 28515: 28572 I/LSPosed-Bridge ] 【VCAM】[toast]java.lang.NullPointerException: Can't toast on a thread that has not called Looper.prepare()

我使用了存储空间隔离这个软件隔离了微信。vcam认为微信使用了存储权限,跑去DCIM/Camera1下寻找virtual.mp4。而不是我在/Android/data/微信目录的files/Camera1下去寻找。 因为在实际应用场景中很有可能针对复数的app指定不同的视频。我个人建议app的主界面给用户两个选择 1:使用/DCIM/Camera1/virtual.mp4 2:使用/Android/data/[app包名]/files/Camera1/virtual.mp4

或者更极端一点的vcam采用自己存储目录,hook了app之后,在vcam存储目录下建立被hookapp包名的子目录,在子目录下放置需要的virtual.mp4和bmp文件。 缺点就是复数app使用同一个视频文件,会有重复文件占用空间。优点就是针对各个app hook的管理方便,无需判断其他app存储权限之类的

就是因为每一个应用独立设置太麻烦,所以才使用相册目录,因为读取相册权限还是比较低的。 但是VCAM创建的私有目录不行,除非软件向用户申请,否则不允许跨应用读取私有目录(安卓11) 至于你说的存储重定向,给重定向的目录底下搞个DCIM目录试下?

Atomos-X commented 2 years ago

唔,尝试了一下。因为使用存储空间隔离之后,默认软件就获得了访问存储空间权限。 实际上是存储空间隔离有选项开启软件访问相册的功能,不过我针对Tencent全家桶全部禁止访问了,单独开启授权/DCIM/Camera1/文件夹就可以。但是还是未解决复数app使用不同virtual.mp4的场景。如果切换使用的话需要不停的进目录改修改文件名和杀进程。

还有部分软件譬如telegram x,禁止文件和媒体权限在saved message下聊天框点击使用相机功能直接没反应,必须授权之后才能使用该功能,但是授权之后都在app包的files/Camera1下面就无法调用,强制去找了/DCIM/Camera1/virtual.mp4。


如果创建私有目录不可行的话,在/DCIM/Camera1下使用对应软件包名的视频文件:com.tencent.mm.mp4表示微信使用,org.thunderdog.challegram.mp4表示telegram x使用,这种方式是否可行?但又会存在一个问题,复数app使用同一个视频就需要两份一模一样的视频文件。不知道创建软链接能不能解决。

w2016561536 commented 2 years ago

唔,尝试了一下。因为使用存储空间隔离之后,默认软件就获得了访问存储空间权限。 实际上是存储空间隔离有选项开启软件访问相册的功能,不过我针对Tencent全家桶全部禁止访问了,单独开启授权/DCIM/Camera1/文件夹就可以。但是还是未解决复数app使用不同virtual.mp4的场景。如果切换使用的话需要不停的进目录改修改文件名和杀进程。

还有部分软件譬如telegram x,禁止文件和媒体权限在saved message下聊天框点击使用相机功能直接没反应,必须授权之后才能使用该功能,但是授权之后都在app包的files/Camera1下面就无法调用,强制去找了/DCIM/Camera1/virtual.mp4。

如果创建私有目录不可行的话,在/DCIM/Camera1下使用对应软件包名的视频文件:com.tencent.mm.mp4表示微信使用,org.thunderdog.challegram.mp4表示telegram x使用,这种方式是否可行?但又会存在一个问题,复数app使用同一个视频就需要两份一模一样的视频文件。不知道创建软链接能不能解决。

目前最方便的方法独立每个应用的视频就是ban掉存储权限 软链接这个不现实,sdacrd目录下貌似不可以,而且不是谁都有权限的。 之后可能会加一个手动切换。