Android 10 起每次启动都要重新授权屏幕捕获,可用 adb appops 命令一次性放行;远程控制需手动在系统设置里启用该应用的 AccessibilityService;从互联网访问时除密码外流量不加密,需自行在路由器做端口转发(默认 5900)。
droidVNC-NG
bk138GPL-2.0活跃维护在 Android 手机上跑一个 VNC 服务端,通过 MediaProjection 抓屏,让局域网内的电脑用 VNC 客户端直接远程查看和操作手机桌面。
Android VNC remote desktop server for local networks
git submodule update --init
./gradlew assembleDebug运行 Android 7 及以上的 Android 设备;README 未说明 CPU/GPU 或显存要求,设备需支持 MediaProjection 截屏(Android-x86 已知不支持)。
在 Android 7+ 上免 root 运行的 VNC 服务端,让局域网内远程查看和操控手机
在 Android 手机上跑一个 VNC 服务端,通过 MediaProjection 抓屏,让局域网内的电脑用 VNC 客户端直接远程查看和操作手机桌面。
核心能力
- 用 Android 7+ 的 MediaProjection API 截屏,无需 root
- 通过 AccessibilityService 实现鼠标键盘远程控制
- 内置 noVNC,浏览器直接连,无需另装 VNC 客户端
- 支持反向连接监听型 viewer 或 UltraVNC Mode-2 repeater
- 用 Zeroconf/Bonjour 在局域网自动发现设备
容易踩的坑
- v2.22.2最新正式版2026-10-29 · 2026-10-29 16:19 UTC
🛠️ Fixes
- Fixed crash on network interface disappear.
- Fixed leaving keyboard and DPAD input ineffective on some TV implementations #403.
- Fixed
ForegroundServiceStartNotAllowedExceptions when app was in background-restricted mode.
Full Changelog: https://github.com/bk138/droidVNC-NG/compare/v2.22.1...v2.22.2
- v2.22.12026-10-16 · 2026-10-16 06:27 UTC
查看更新说明
🛠️ Fixes
- Fixed some TV apps not receiving Enter keys #397.
- Fixed CPU going to 100% when a specifically selected network interface became unavailable #402.
- Fixed missing interface name appearance in MDM #404.
🤝 New Contributors
- @Ahteshaam2 made their first contribution in https://github.com/bk138/droidVNC-NG/pull/397
- @JulienUsson made their first contribution in https://github.com/bk138/droidVNC-NG/pull/405
Full Changelog: https://github.com/bk138/droidVNC-NG/compare/v2.22.0...v2.22.1
- v2.22.02026-09-17 · 2026-09-17 20:04 UTC
查看更新说明
🌅 New Features
- Added handling of Cyrillic and other Unicode keysyms, not just Latin-1.
- Added functionality to make keyboard shortcuts user-configurable from the UI as well as from JSON and/or MDM.
- Added support for screen zooming/magnification via Ctrl-Scroll from a VNC viewer.
🛠️ Fixes
- Fixed scrolling amount to be display-specific on multi-display systems.
🤝 New Contributors
- @EndoTouma made their first contribution in https://github.com/bk138/droidVNC-NG/pull/390
- @AzazelSensei made their first contribution in https://github.com/bk138/droidVNC-NG/pull/391
Full Changelog: https://github.com/bk138/droidVNC-NG/compare/v2.21.0...v2.22.0
- v2.21.02026-08-25 · 2026-08-25 20:13 UTC
查看更新说明
🌅 New Features
- Added extending of text selection on Shift+Left/Shift-Right when using Android 14 or newer #385.
🛠️ Fixes
- Fixed Numpad key handling depending on NumLock state #363.
🤝 New Contributors
- @slab-tsuchiya made their first contribution in https://github.com/bk138/droidVNC-NG/pull/386
Full Changelog: https://github.com/bk138/droidVNC-NG/compare/v2.20.3...v2.21.0
- v2.20.32026-08-03 · 2026-08-03 17:47 UTC
查看更新说明
🛠️ Fixes
- Fixed possible crash while updating list of connected clients under high load.
Full Changelog: https://github.com/bk138/droidVNC-NG/compare/v2.20.2...v2.20.3
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
droidVNC-NG
This is an Android VNC server using contemporary Android 7+ APIs. It therefore does not require root access. In reverence to the venerable droid-VNC-server it is called droidVNC-NG.
If you have a general question, it's best to ask in the community chat. If your concern is about a bug or feature request instead, please use the issue tracker.
Features
- View your Android device remotely with optional screen scaling for better performance.
- Remote-control your Android device with mouse and keyboard (for keyboard Latin-1 charset plus some special keys, supporting any kind of UI widget on Android 14 and newer, on older devices into EditText widgets only). To enable this, you need to activate the AccessibilityService for the app on your device.
- Copy text from a VNC viewer and paste it to your Android device. Server-to-client copy & paste works automatically for text selected in editable text fields or manually by sharing text to droidVNC-NG via Android's Share-To functionality.
- Use keyboard shortcuts to trigger 'Recent Apps' overview, Home, Back, Power, and volume controls.
- Magnify/zoom the screen with Ctrl plus scroll wheel.
- Transfer files between an Android device and computer using TightVNC viewer for Windows version 1.3.x.
- Secure your connection with a password. Note that setting a password is mandatory in case you want to access the server using MacOS's built-in Screen Sharing app.
- Choose a custom port for the VNC server.
- Start the server automatically when your Android device boots. On Android 11 and newer this also works with kiosk-mode launchers and lock task mode.
- Connect from your Android device to a listening VNC viewer without opening ports on your router.
- Connect to a UltraVNC-style Mode-2 repeater for remote access through a mediator server.
- Pre-configure default settings via a JSON file or Mobile Device Management.
- Discover your device automatically on the local network via Zeroconf/Bonjour.
- See individual mouse pointers for each connected client on your device.
- Control your Android device directly from any web browser using the built-in noVNC client — no separate VNC viewer required.
How to use
Keyboard Shortcuts From a VNC Viewer
- Ctrl-Shift-Esc triggers 'Recent Apps' overview
- Home/Pos1 acts as Home button
- End acts as Power button
- Escape acts as Back button
- Ctrl-Alt-PageUp increases audio volume
- Ctrl-Alt-PageDown decreases audio volume
Within a Local Area Network
- Install the app from either marketplace.
- Get it all the permissions required.
- Set a good password and consider turning the
Start on Bootoff. - Connect to your local Wi-Fi. For accepting a connection your device should be connected to some Local Area Network that you can control, normally it is a router.
- Click
Startand connect to your device.
From The Internet
Disclaimer: Anything else than password exchange is currently not encrypted, so use at your own risk!
If you want to accept incoming connections from VNC viewers:
-
You should allow Port Forwarding in your router's Firewall settings. Either find a UPnP supported app to open ports dynamically or log in to your router's settings (usually open 192.168.1.1 in your browser, some routers have password written on them).
-
Find Port Forwarding, usually it's somewhere in Network - Firewall - Port Forwards.
-
Create a new rule, this is an example from OpenWRT firmware.
Name: VNC forwarding
Protocol: TCP
Source zone: wan may be "internet", "modem", something that suggests the external source.
External port: 5900 by default or whatever you specified in the app.
Destination zone: lan something that suggests local network.
Internal IP address: your device's local IP address, leaving any is less secure. The device's address may change over time! You can look it up in your routers' connected clients info.
Internal port: same as external port.
-
Apply the settings, sometimes it requires rebooting a router.
-
Figure out your public address i.e. https://www.hashemian.com/whoami/.
-
Use this address and port from above to connect to your device.
Reverse VNC
Here's how to connect to a listening VNC viewer or repeater without opening a server port:
- Leave the VNC port blank, which will get the Admin Panel to state the server isn't listening for incoming connections.
- Make outbound connections by choosing either "Connect to a listening viewer" or "Connect to a repeater".
- Optionally fill Max. reconnect tries. If you leave it empty, the default is 0 (no reconnect). Connections started from the Intent Interface can set
EXTRA_RECONNECT_TRIESinstead.
How to Pre-seed Preferences
DroidVNC-NG can be supplied with defaults for preferences that apply if preferences were not changed by the user.
See the Preseed Preferences Docs for more details.
Remote Control via the Intent Interface
droidVNC-NG features a remote control interface by means of Intents. This allows starting the VNC server from other apps or on certain events. It is designed to be working with automation apps like MacroDroid, Automate or Tasker as well as to be called from code.
See the Intent Interface Docs for more details.
Building
- After cloning the repo, make sure you have the required git submodules set up via
git submodule update --init. - Then simply build via Android Studio or
gradlew.
Contributing
Contributions to the project are very welcome and encouraged! They can come in many forms. You can:
- Submit a feature request or bug report as an issue.
- Provide info for issues that require feedback.
- Add features or fix bugs via pull requests. Please note there's a list of issues where contributions are especially welcome. Also, please adhere to the contribution guidelines.
Notes
-
Requires at least Android 7.
-
Since Android 10, the permission to access the screen contents has to be given on each start and is not saved. You can, however, work around this by installing adb (or simply Android Studio) on a PC, connecting the device running droidVNC-NG to that PC and running
adb shell cmd appops set net.christianbeier.droidvnc_ng PROJECT_MEDIA allowonce. Alternatively, if using the intent interface, you can also start withnet.christianbeier.droidvnc_ng.EXTRA_FALLBACK_SCREEN_CAPTUREset to true. -
You can also use adb to manually give input permission prior to app start via
adb shell settings put secure enabled_accessibility_services net.christianbeier.droidvnc_ng/.InputService:$(adb shell settings get secure enabled_accessibility_services). -
If you are getting a black screen in a connected VNC viewer despite having given all permissions, it might be that your device does not support Android's MediaProjection API correctly. To find out, you can try screen recording with another app, ScreenRecorder. If it fails as well, your device most likely does not support screen recording via MediaProjection. This is known to be the case for Android-x86.
-
In case you happen to have a board with an Ethernet interface and experience strange hangs during a VNC session, setting the interface to a slower speed might help. This workaround can be applied with mii-tool, for instance.
-
If you see a a floating button similar to this on your screen after enabling accessibility, make sure you have the "shortcut" option in accessibility settings turned to off.
-
Due to limitations in Android API, secondary displays are not supported.
-
On some Android TVs, mouse input is not routed through. This seems to be an OS issue caused by the manufacturer's build config. You can still navigate the TV user interface via a VNC viewer by using cursor keys and Enter.
-
Starting with Android 16, app components can opt-out of of accepting input from AccessibilityService, so these will not be getting input from droidVNC-NG.
-
On Android 7 to 9, typing text into text fields with active autocomplete, most notably the Google search box, may come out in the wrong order, e.g. typing
halloyieldsollah. This is an issue in the respective apps in combination with remote input and only occurs on these Android versions.