ç®äœäžæ | English
"æç¶è®°åœïŒå°œæ¶çŒåº â Silent Capture, Full Control"
åºäºç¹æ shellïŒShizuku / Porter åå端ïŒç Android æªå±/åœå± APP ââ äžç» MediaProjectionãæ ç³»ç»åŒ¹çªãæ ç¶ææ æå倎æç€ºïŒåå° App å®å šæ æç¥è¢«æªå±/åœå±ãæ¯æå¿«æ·è§Šåäžå®å šèªå®ä¹çæªå±/åœå±åæ°ã
screencap/screenrecord (shell uid 2000, u:r:shell:s0)
â äžè§Šå MediaProjection ææåŒ¹çª
â äžè§ŠåãçŠæ¢æªå±ãç±»æç€ºïŒFLAG_SECURE å
容ä»äžºé»åïŒ
â äžè§Šåãå±å¹å
±äº«äžãæç€ºåš
âŒ
RainyScreenShot ç¬äº«ç»æ
RainyScreenShotïŒéšæŽæªå±ïŒâ Silent Screenshot & Screen Recorder · the Rainy Family tools.
| ç¹æ§ | 诎æ |
|---|---|
| ð€« é黿ªå± | shell uid screencap çŽå framebufferïŒåå° App æ ä»»äœåè°äžæç¥ãæ ãçŠæ¢æªå±ãç±»æç€ºïŒå®æµïŒåœå±æéŽ dumpsys media_projection å§ç»äžº nullïŒïŒè¥çªå£è®Ÿäº FLAG_SECUREïŒå
¶å
容åšç»é¢äžäžºé»åââç³»ç»çº§å
å®¹ä¿æ€ïŒä»»äœæ¹æ¡åæ æ³ç»è¿ |
| ð¬ éé»åœå± | shell uid screenrecordïŒv1.4ïŒç³»ç»çº§çŒç åšïŒåŒå§/忢ä»
衚ç°äžºè¿çš SIGINTïŒæ æå±äŒè¯æ³šåãæ éç¥æç€º |
| â¡ å¿«æ·è§Šå | äžæ¹åŒïŒAPP å æé® Â· æ¬æµ®æ§å¶çïŒOverlayManager TYPE_APPLICATION_OVERLAYïŒÂ· å¿«æ·ç£èŽŽïŒTileServiceïŒéå±å¯çšïŒãç£èŽŽåšäž»é¡µæåšæ·»å ïŒäžé®éé»å å ¥ä»»å¡æ ïŒæ éè¿çŒèŸæš¡åŒïŒïŒç¹å»èªåšæ¶èµ·é¢æ¿åæª/åœïŒäžæå°é¢æ¿ |
| ð ïž èªå®ä¹åæ° | æªå±ïŒPNG/RAWãæå® display-idã倿Ÿç€ºåš -aãåœå±ïŒå蟚ç --sizeãç ç --bit-rateïŒé»è®€ 8MïŒãæ¶é¿ --time-limitïŒ0=äžéïŒãbugreport æ¶éŽæ³å å ã--display-id |
| ð¯ åºåæªå± | ïŒé¶æ®µäºïŒå¯¹æªåç»æååçŽ è£åªïŒæ é root |
| âºïž æ¬æµ®æ§å¶ | åœå±æ¶æŸç€ºåéæå°æ§å¶çïŒç¹å»å³åïŒå¯æŽäœéèïŒä» é ç£èŽŽ/APP 忢 |
| ð æ·±è²æš¡åŒ | å šå± Material You èªéåº |
| ð ååç«¯æ¯æ | shell ééç± Shizuku æ PorterïŒShizuku çæŽ»è·ç»Žæ€ forkïŒæäŸïŒè®Ÿçœ®é¡µå¯åæ¢ïŒèªåš / Porter / ShizukuïŒïŒèªåšæš¡åŒäŒå PorterïŒåæ¢åé区å¶åæ¢å¹¶éæ°æåŒçæ |
| ð 纯æ¬å° | é¶èçœãé¶æéäžæ¥ïŒMediaStore ç§æè·¯åŸäº§åº |
æ¬æºïŒshizuku shell uid 2000ïŒu:r:shell:s0ïŒå®æµç»è®ºïŒ
| æ£æµç»ŽåºŠ | MediaProjection æ¹æ¡ | æ¬é¡¹ç®æ¹æ¡ïŒshell çŽè°ïŒ |
|---|---|---|
| ç³»ç»ææåŒ¹çª | æ¯æ¬¡é确讀ïŒAndroid 14+ é»è®€äžå¯è·³è¿ïŒ | â æ åŒ¹çª |
MediaProjectionManager äŒè¯æ³šå |
æïŒApp å¯éè¿ dumpsys media_projection / API æç¥ |
â
åœå±å
šçšå®æµäžº null |
| ç¶ææ ãåœå±/æå±ãåŸæ | æïŒAndroid 14+ äžå¯éèïŒ | â æ ä»»äœæç€º |
| åå° App æç¥åè° | æ çŽæ¥ APIïŒäœååšéŽæ¥ä¿¡å·ïŒèæ Display å建ã麊å é£çŠç¹çïŒ | â æ åè°è·¯åŸ |
| FLAG_SECURE å 容 | æŸç€ºäžºé»å |
â ïž èŸ¹çåŠå®è¯ŽæïŒæ¬æ¹æ¡ç»è¿çæ¯ãåžžè§å¯æç¥ä¿¡å·ããå®äžä¿®æ¹ç®æ Appãäžæ³šå ¥ä»»äœä»£ç ïŒåŠç®æ App éè¿dumpsysç³»ç»çº§èªæ£ïŒé READ_LOGS/adb æéïŒæ®é App äžå ·å€ïŒæå¯¹ç»é¢å 容忰忰Žå°/æš¡ç³æ£æµïŒä»»äœåœå±æ¹æ¡éœæ æ³ä¿è¯äžå¯æ£æµïŒFLAG_SECURE çªå£å 容ïŒé¶è¡ AppãDRM è§é¢çïŒåšä»»äœæè·è·¯åŸäžå䞺é»åïŒå±ç³»ç»çº§å å®¹ä¿æ€ïŒåæ ·æ æ³ç»è¿ãæ¹æ¡ç®æ = ãæ®é App çåžžè§æ£æµææ®µå šéšå€±æãïŒè¿åšå®æµäžå·²æç«ã
ââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Android App â
â â
â âââââââââââââââââââââââââââââââââââââââââââââââ â
â â Compose UI â â
â â éŠé¡µ(æªå±/åœå±ç¶æ) · åå²è®°åœ · 讟眮 â â
â ââââââââââââââââââââââ¬âââââââââââââââââââââââââ â
â â â
â ââââââââââââââââââââââŒââââââââââââââââââââââââââ â
â â RecordingSessionManagerïŒåäŸïŒ â â
â â start/stop · ç¶ææº Â· æ¶é¿ç»è®¡ · èŸåºè·¯åŸ â â
â ââââââââââââââââââââââ¬âââââââââââââââââââââââââ â
â â â
â ââââââââââââââââââââââŒââââââââââââââââââââââââââ â
â â ShellCaptureïŒæ žå¿ïŒ â â
â â Shizuku shell äŒè¯ · stdout 管éååž§ â â
â â · SIGINT 忢åœå¶ · 蜮询/çå¬è¿çšéåº â â
â ââââââââââââââââââââââ¬âââââââââââââââââââââââââ â
â â â
â ââââââââââââââââââââââŒââââââââââââââââââââââââââ â
â â è§Šåå±ïŒApp UI · OverlayManager æ¬æµ®ç â â
â â · TileService å¿«æ·ç£èŽŽ â â
â âââââââââââââââââââââââââââââââââââââââââââââââ â
ââââââââââââââââââââââââââââââââââââââââââââââââââââ
å ³é®ææ¯å³çïŒ
- shell çŽè°èé Shizuku Binder APIïŒ
screencap/screenrecordäœäº/system/binïŒshell uid å ·å€æ§è¡æïŒå®æµéè¿ïŒãéè¿Shizuku.newProcess()å»ºç«æä¹ shell äŒè¯ïŒSDK ç± Porter å Œå®¹å±æäŸïŒrikka.shizuku.*API ä¿æå Œå®¹ïŒæ¯æ Shizuku / Porter åå端ïŒïŒèŸåºç» stdout 管éåäŒ ïŒäžèœå ¬å ±ç®åœã - åœå±åæ¢æºå¶ïŒ
screenrecordæ stop åæ°ïŒé åç®æ è¿çšåSIGINTå®æå®¹åš moov box å®çš¿ïŒå®æµïŒè¿çš SIGINT â mp4 æ£åžžå ³éã坿æŸïŒãéè¿åäŒè¯ shell ææ pidïŒkill -INT <pid>忢ã - äŒè¯ä¿æŽ»ïŒShizuku shell è¿çšäž APP è¿çšç¬ç«ïŒåœå±æéŽ APP 被æäžåœ±ååœå¶ïŒåæ¢é æ¬æµ®ç/ç£èŽŽ/è¶ æ¶äžéå åºã
- æ åå°æå¡çéé³è®Ÿè®¡ïŒåœå±æ§è¡äœåš shell uid äžïŒAPP èªèº«äžæåå°æå¡ãäžæŸç€ºä»»äœéç¥ïŒAndroid 14+ 对 FGS ç区å¶éç¥å æ€äžéçšïŒã
RainyScreenShot/
âââ app/src/main/java/com/rainy/screenshot/
â âââ capture/ # æ žå¿
â â âââ ShellExecutor.kt # ç¹æ shellïŒShizuku/PorterïŒäŒè¯ç®¡çïŒstdout/exitcode/pidïŒ
â â âââ ScreenshotEngine.kt # screencap å°è£
ïŒPNG/RAW/display-id/-aïŒ
â â âââ RecordingEngine.kt # screenrecord å°è£
ïŒSIGINT 忢/è¶
æ¶å
åºïŒ
â â âââ CaptureConfig.kt # æªå±/åœå±åæ°æš¡å
â âââ session/
â â âââ RecordingSessionManager.kt # åœå¶äŒè¯ç¶ææº + æ¶é¿ç»è®¡
â âââ trigger/
â â âââ ScreenshotTileService.kt # æªå±å¿«æ·ç£èŽŽïŒç¹å»æ¶é¢æ¿åæªïŒ
â â âââ RecordTileService.kt # åœå±å¿«æ·ç£èŽŽïŒå¯å忶颿¿ïŒ
â âââ overlay/
â â âââ FloatingBallService.kt # æ¬æµ®æ§å¶çïŒOverlayManagerïŒ
â â âââ FloatingBallController.kt # æ¬æµ®çåŒå
³æ§å¶ïŒShizuku é黿æïŒ
â âââ ui/
â â âââ home/ # éŠé¡µïŒç¶æå¡ + å¿«æ·æªå±/åœå± + ç£èŽŽç®¡ç
â â âââ history/ # ç»ææµè§ïŒç§æ MediaStore/åºçšç®åœïŒ
â â âââ preview/ # åŸç/è§é¢é¢è§ïŒFileProvider å享ïŒ
â â âââ settings/ # åæ°èªå®ä¹é¡µ
â â âââ theme/ # éšæŽç²äž»é¢
â âââ data/
â âââ local/ # DataStore/SharedPreferences æä¹
å
âââ gradle/libs.versions.toml
âââ docs/
âââ TECH_NOTES.md # 宿µè®°åœåœæ¡£ïŒåœä»€è¡äžºãéåºç ã蟹çïŒ
å 眮äžè¯èšïŒç®äœäžæïŒé»è®€ïŒãç¹é«äžæãEnglishãè·éç³»ç»è¯èšèªåšåæ¢ïŒAndroid 13+ è¿å¯åšç³»ç»è®Ÿçœ®éæåºçšåç¬æå®ïŒè¯èš â éšæŽæªå±ïŒã
# äž RainyToken çžåç ARM64 Proot å
Œå®¹é
眮
./gradlew assembleDebug
# APK èŸåºïŒapp/build/outputs/apk/debug/app-debug.apkè¿è¡åæïŒè®Ÿå€å·²æ¿æŽ» Shizuku æ PorterïŒADB æ Root æ¹åŒïŒïŒå¹¶åšå¯¹åºæå¡äžæææ¬åºçšãæå¡å端å¯åšè®Ÿçœ®é¡µåæ¢ïŒèªåš / Porter / ShizukuïŒé区å¶åæ¢å¹¶éæ°æåŒçæïŒã
RainyScreenShotïŒéšæŽæªå±ïŒæ¯ãéšæŽç³»åãå·¥å ·æåïŒç± éšæŽåµ åŒå绎æ€ïŒ
- RainyLLM â 纯犻线 Android æ¬å° LLM æšçæå¡åš
- RainyScanner â äžæŠæªäžè·³èœ¬ç Android æ«ç å·¥å ·
- Rainy2FA â 纯æ¬å° · é¶èçœ Â· çç©è¯å«ä¿æ€ç TOTP éªè¯åš
- RainyToken â AI äœé¢äžçšéæ¥è¯¢ APP
- RainyScreenShot â é黿ªå±/åœå±å·¥å ·ïŒæ¬é¡¹ç®ïŒ
éææå°æ¥ïŒéææå°åœ ð·
MIT License © 2026 Rainy