A native, high-performance Android capture, creator studio & screen automation suite built with Modern Android Architecture (Jetpack Compose, CameraX, Foreground Services, Accessibility Gesture Engine, MediaProjection, OpenGL ES, MediaMuxer/MediaExtractor, and MediaCodec). ScreenKit v2.1.0 adds Go Live screen streaming to YouTube, Facebook, and custom RTMP/RTMPS destinations alongside screen recording with Pause & Resume, custom area cropping, Scrolling Long Screenshots ("Stitch Full Page"), built-in MP4 Video Trimmer, Animated GIF Maker & PNG Frame Extractor, sequential multi-target Auto Clicking (1 → 2 → 3 → 4…), directional Auto Scrolling (↑ / ↓ / ← / →), Touch Macro Recorder & Replay, Saved Auto-Clicker Profiles (Slots 1–3), Anti-Detection Human Jitter, Smart Color / Pixel Trigger (#HEX), Floating Teleprompter, On-Screen Magnifier Loupe & Color Eyedropper, Creator Watermark Badge, Shake / Volume-Down Emergency Stop, Live Usage Analytics & One-Tap In-App Updater, live interactive brush annotation, on-screen touch visualization, a draggable floating camera lens, amplified sound recording (Mic / Device Audio / Mixed), and a built-in Black-Screen Bypass Web Capture Browser.
A native iOS 17+ companion now lives in ios/: SwiftUI recording,
local video tools, and a ReplayKit RTMP/RTMPS broadcast extension. It requires Xcode
and Apple signing; it is not an APK conversion or an unsigned iPhone download.
See the iOS setup guide and device-test checklist.
Android-only automation/overlay and protected-capture features are not ported.
⬇️ Download the latest ScreenKit v2.2.0 APK
- Current Version:
v2.2.0(versionCode = 11) - Compatible with Android 7.0 (API 24) to Android 15 (API 35).
- Device Audio & Mixed (
Mic + Device) playback capture supported on Android 10+. - Full screen scope and single-app exclusion selection supported on Android 14+.
- On Android, open the downloaded APK and follow the system prompt. Allow "Install unknown apps" for your browser or file manager if prompted.
Open Network ad filtering → Set up filtering in ScreenKit. Read the disclosure, allow the Android VPN request, and leave floating controls running. After this opt-in, filtering automatically starts with the floating service (even over other apps), and closing the bubble stops it. Turn off in the card or notification also disables future automatic starts. This is not Android's Always-on VPN/lockdown mode.
- A DNS-only, local split VPN routes only its virtual DNS address. Normal web/video traffic stays on the underlying network; no general traffic tunnel, root, installed certificate, HTTP interception, or TLS decryption of other apps.
- A small bundled starter list blocks known advertising domains and their subdomains. It is deliberately not comprehensive and does not fetch remote lists or updates. Allowed questions go to Cloudflare DNS over TLS (port 853, system certificate and hostname validation). Cloudflare receives those domains and the device's public IP; its resolver privacy policy applies. ScreenKit logs/saves no names or DNS history. Counts are in-memory per session.
- Only one VPN can run. ScreenKit won't automatically replace another VPN. Strict Android Private DNS must be turned off first; apps using custom DNS/DoH can bypass the filter. IPv6 application traffic is left alone; ordinary AAAA queries through the virtual DNS resolver can still be filtered. IPv6-only upstream uses Cloudflare's IPv6 address.
- It cannot promise removal of YouTube/Facebook/Instagram video ads, same-host ads, cached/preloaded ads or apps' own encrypted DNS. Domain filtering can break a site/app; use Turn off to restore normal DNS. "Queries blocked" does not mean "ads removed".
- Repeated upstream failures close the VPN and restore normal networking (fail open). No automatic restart loop. Open the card to retry. Android permission revocation turns the preference off. No boot receiver or Android Always-on/lockdown support.
- Adds
ACCESS_NETWORK_STATEand the system-protected VPN service; consent is never requested silently. Notification shows activity and a Turn off action (if notifications are allowed). Build/tests do not substitute for real-device network testing.
See architecture, limitations and device tests.
- Removed Zoom from the floating menu; the underlying magnifier is not deleted. Long SS remains on the third row.
- Smart playback now looks for the button immediately around visible Skip ad text when the text itself is not clickable. Searches remain package-scoped, visible-only, time-bounded, and reject scrollable/broad ancestor containers.
- Ad breaks require two seconds of stable ad-label absence before restarting the content timer. Brief gaps between consecutive ads do not spend the next video's viewing time. Hold or an unknown foreground window restarts this confirmation.
- No root, VPN, DNS interception, TLS interception, or new permissions added. This is visible-control assistance, not universal ad blocking. Network filters can block separate ad domains but cannot reliably separate ads and video on shared endpoints.
- Automated policy tests cover ad-pod flicker, resumed-content timing, interrupted confirmation, and skip cooldown. Social-app/device behavior still requires physical testing.
- Floating Long Screenshot: open the bubble and tap Long SS on its third row. Enable the ScreenKit Accessibility service first. Capture hides overlays, stops automatic scrolling, and samples up to three settled screens (or stops when the page does not change). Long-image stitching is approximate on sticky/dynamic layouts, not guaranteed seamless.
- Real Zoom feed: Zoom now asks for Android whole-screen sharing and reads fresh screen pixels up to 5 times/second. Drag the panel; the sample target is 20dp below it (outside the magnifier itself). The 3× loupe and color sample use this live feed, not a saved image or generated colors. The feed is scaled to a 1600px long edge for memory use; sampled colors are from that scaled feed. Close Zoom or its notification to release capture. No pixels are saved or sent anywhere. Rotate/reopen Zoom to realign coordinates. Zoom is exclusive with recording, broadcasting, and screenshots. Protected screens may remain black. Color-trigger clicks now wait rather than fire when live pixels are unavailable.
- Custom scroll delay: Custom seconds / Smart playback is available in the app and floating Auto Scroll settings. Enter 0.2–3600 seconds (including decimals), e.g. 30, 90, 300 or 900. The first item receives the same viewing delay. Session duration is separate: choose Infinite if you want a delay longer than the total run time.
- Smart playback (experimental, opt-in): while Auto Scroll runs, reads visible accessibility controls in YouTube, Instagram, Facebook/Facebook Lite. Explicit sponsored-feed labels can advance the feed; visible Skip ad buttons can be used; recognised in-video ad/countdown labels hold scrolling until the ad finishes. Exposed playback progress can advance on video end/loop instead of repeating a short video. The timer restarts after an ad when playback information is unavailable. Hold/Resume and Next are always available on the running scroll bar.
- Limits: no bypass of unskippable ads; no guarantee of detecting every app version, language, ad format, or hidden player timeline. When progress is unavailable, the banner explicitly says timed fallback. Unsupported apps do not auto-swipe in Smart mode; use Timed mode there. Manual Hold/Next handles cases the app cannot observe.
- Privacy: the Accessibility service now declares window-content retrieval for Smart mode. Inspection is opt-in, limited to visible controls while automation runs, and bounded to a small node/time budget. No text is logged, persisted or sent. After updating, re-enable ScreenKit in Android Accessibility if the new capability is not active.
- Fixed a separate service-action dispatch bug that rejected the Go Live start action.
Go Live adds RTMP/RTMPS screen streaming with quality settings, microphone/device/mixed audio, live timer and outgoing bitrate, mute/end controls, and private in-memory stream keys. See Go Live setup below.
- Touch Macro Recorder ("Record My Actions & Replay"): Tap
● Macroin the Auto tool, press● Rec, perform any real-time sequence of finger taps and swipes across the screen, tap■ Done, and replay your exact touch choreography (1×toInfinite ∞). - Saved Auto-Clicker Profiles & Presets (Slots 1–3): Save and load named pin positions, delays, speeds, and modes into 3 instant profile slots (pre-loaded with TikTok/Reels Scroll, Game Farming 1→4, and Reader Slow Scroll).
- Smart Color / Pixel Trigger ("Click When Color Appears"): Wait to trigger Pin
#1until the underlying screen pixel matches your chosen#HEXcolor (within RGB tolerance), or bind a live screen color in 1 tap from the Magnifier Eyedropper. - Anti-Detection Randomization (Human Jitter): Optional human-like randomization (
±4pxcoordinate jitter,±12%tap hold duration jitter, and±15%interval jitter) so automated taps and scrolls never hit the exact same pixel or millisecond twice. - Pause & Resume Screen Recording: Pause and resume active screen recordings seamlessly into a single continuous MP4 file from the floating bubble, notification shade, or main app.
- Built-in Video Studio (MP4 Trimmer, Animated GIF Maker & PNG Frame Grabber): Tap ✂ Studio on any recorded video in Recent Captures to losslessly trim start/end times (
MediaExtractor+MediaMuxer), convert clips into looping animated.giffiles, or save high-resolution.pngstill frames. - Scrolling Long Screenshot ("Stitch Full Page"): Tap ⇅ Long Stitch to automatically capture consecutive frames while scrolling down and stitch them into a single tall full-page PNG.
- Floating Teleprompter / Script Overlay: Draggable, semi-transparent auto-scrolling script window with adjustable scroll speed and font size (
A-/A+) that automatically hides during screenshots. - On-Screen Magnifier Loupe & Color Picker (Eyedropper): Draggable crosshair reticle with a
3×live zoom loupe showing exact(X, Y)coordinates,#HEX, andRGBvalues — copy#HEXto clipboard or send directly to the Auto-Clicker Color Trigger. - Custom Creator Watermark Badge: Optional draggable corner watermark badge (e.g.,
@YourHandleorRecorded with ScreenKit) during recordings. - Shake Phone or Volume-Down Shortcut to Stop: Shake your phone (accelerometer) to immediately stop screen recording or auto-clicking, or press physical Volume Down at any time as an instant hardware emergency stop for the Auto Clicker / Scroller / Macro.
- In-App "Check for Updates" & One-Tap Updater: Queries the GitHub Releases API (
sharthak18/screenkit/releases) to compare your installed version against the latest release and download the newestScreenKit.apkin one tap. - Live Usage Counter & GitHub Download Analytics: Tracks local usage telemetry (App Opens, Captures Saved, Auto Gestures Executed) alongside live GitHub Release APK download counts across every published version.
- Multi-Target Sequential Auto Clicker (
⊕ AutoTap):- Place up to 20 numbered draggable target pins (
1,2,3,4…) anywhere on screen and run them in order (1 → 2 → 3 → 4…). - Set the delay between clicks (
100msto5s), clicking speed / tap hold duration (Turbo 25ms,Fast 55ms,Normal 110ms,Slow 250ms,Long Hold 600ms), how many times each position taps before advancing to the next position (1×,2×,3×,5×,10×,20×— or tap any pin directly to set a custom tap count just for that pin), and total repeat cycles (1×to100×orInfinite ∞).
- Place up to 20 numbered draggable target pins (
- Timed Directional Auto Scroller (
⇅ Scroll):- Automatically scroll Down (
⬇), Up (⬆), Left (⬅), or Right (➡) across any app, feed, browser, or reader. - Customize how fast or slow the scroll swipes (
⚡ Very Fast 160ms,Fast 300ms,Normal 450ms,Slow 850ms,🐢 Reading 1400ms), pause delay between scrolls (0.6sto8s), how long scrolling runs (30s,1m,2m,5m,10m,30m, orInfinite ∞), and scroll swipe distance (Short 30%,Medium 55%,Long 75%).
- Automatically scroll Down (
- Configurable from the Main App or Live Floating Bar: Adjust settings in the main app dashboard or tap
⚙on the floating Auto-Click/Scroll bar without leaving your current app.
- Automatic Pop-Up on App Launch: Automatically launches whenever you open ScreenKit — even if you previously closed the floating bubble, returning to the app brings it right back.
- Balanced, Unobtrusive Design: Sleek
42dpcircular floating icon with a crisp34dpinner icon and no bulky border frame when collapsed, expanding into a compact 2×7 quick-action menu (Full,Crop SS,Screen,Crop Rec,Camera,Mute/Mic/Device/Mix,AutoTap,Brush,Touch,Scroll,Lens,Flip,Bypass,Home). - Messenger-Style Drag-to-Bottom Close: Drag the floating bubble down into the bottom
✕target (with magnetic snap-in feedback) to close it, or release anywhere else to smoothly snap to the nearest screen edge.
- No Bubble in Screenshots: Immediately upon tapping Full or Crop Screenshot, ScreenKit hides the floating bubble, auto-clicker pins, touch ripples, and brush toolbars (
View.GONE) before the display frame is captured, restoring visibility immediately after capture. - Full-Resolution Capture: Clean, untouched PNG output saved directly to your chosen destination.
- On-Screen Canvas Annotation (
✎ Brush): Toggle the drawing tool directly from the floating bubble or main app. Includes 7 vibrant colors, a👆 Tap App/✎ Drawpass-through toggle (so you can interact with the underlying app without losing your drawings), eraser, undo, and clear. - Show Touches During Recording (
⊙ Touch): Toggle touch visualization directly from the floating bubble or main app (TouchFeedbackOverlay). Renders smooth animated touch circles and pointer trails during screen recording and auto-clicking without interrupting your session.
- 4.0× (+12 dB) Amplified Microphone Engine: Built-in DSP pre-amplifier with a smooth rational soft-knee limiter, hardware
AutomaticGainControl(AGC), andNoiseSuppressorboosts voiceover clarity without digital clipping. - Synchronized 48 kHz AAC Audio Modes (cycle live on the floating window or in the main app):
- Mute / Silent (
Off): Video only. - Microphone (
Mic): 4.0× amplified voiceover & room commentary. - Device Audio (
Device): Internal app and game sound via AndroidAudioPlaybackCapture. - Mixed Audio (
Mix—Mic + Device): Simultaneous 4.0× amplified microphone commentary and internal device sound mixed in real time at 48 kHz into AAC (128 kbps).
- Mute / Silent (
- Compact Live Camera Lens (
116dp × 154dp): Launch a draggable live CameraX preview overlay anywhere on screen before or during screen recording, with one-tap front/back camera flip (⇄ Flip).
- Hardware OpenGL ES (
GL_TEXTURE_EXTERNAL_OES) Pipeline: Routes screen recording and screenshots through GPU OES textures (GRALLOC_USAGE_HW_TEXTURE), uses resilient public/presentationVirtualDisplayflags, automatically skips initial black compositor warmup frames, and provides a hardware framebuffer (screencap -p) fallback. - Built-in Web Capture Bypass Browser (
🌐 Bypass): Open websites that turn black in external browsers directly via the🌐 Bypassbutton on the floating bubble, the main app, or Android's Share menu (ScreenKit Bypass Capture):- Strips
FLAG_SECUREon the window. - Injects JS hooks to block
blur/visibilitychangeanti-capture blackouts, downgradeHW_SECUREEME/DRM robustness to software (SW_SECURE_CRYPTO), and preserve WebGL drawing buffers (preserveDrawingBuffer: true). - Includes one-tap Direct Hardware
PixelCopyScreenshot (📸 Direct Shot) that captures the webpage directly from hardware memory without needingMediaProjection.
- Strips
- Area Selection Overlay: Interactive bounding box selection to specify any sub-region of the screen.
- Real-Time OpenGL ES Cropping: Cropped screen recording utilizes an internal EGL texture and OpenGL ES external OES shader pipeline (
CropSurfaceRenderer), rendering only the specified coordinates directly into the hardware H.264MediaCodecinput surface. - Crop Screenshots: Saves only the selected sub-rectangle with zero padding.
- Configurable Save Destinations:
- Device MediaStore gallery (
Pictures/ScreenCaptureandMovies/ScreenCapture). - Secondary storage volumes (SD cards) with volume-aware MediaStore indexing.
- Custom SAF folder chosen through Android's Storage Access Framework.
- Device MediaStore gallery (
- Local & Private: All encoding and saving is strictly on-device. No telemetry, no background cloud uploads.
┌─────────────────────────────────────────┐
│ MainActivity (Compose) │
└───────────────────┬─────────────────────┘
│
┌──────────────────────────────────┼──────────────────────────────────┐
▼ ▼ ▼
┌──────────────────────────────┐ ┌──────────────────────────────┐ ┌──────────────────────────────┐
│ FloatingOverlayService │ │ Brush, Touch & AutoOverlay │ │ WebCaptureActivity │
│ - 42dp Messenger-Style Bubble│ │ - Auto Clicker (1 → 2 → 3…) │ │ - Anti-Black-Screen WebView │
│ - Drag-to-Bottom (✕) Close │ │ - Auto Scroller (↑ / ↓ / ←/→)│ │ - JS/EME/WebGL Bypass Hooks │
│ - Auto-Hide on Screenshot │ │ - Interactive Brush & Touch │ │ - Direct PixelCopy Capture │
└──────────────┬───────────────┘ └──────────────┬───────────────┘ └──────────────────────────────┘
│ │
▼ ▼
┌──────────────────────────────┐ ┌──────────────────────────────┐ ┌──────────────────────────────┐
│ CaptureRequestActivity │ │ ScreenKitAutoService │ │ CameraCaptureService │
│ - Transparent Permission Hop │ │ - Accessibility Gesture API │ │ - CameraX Video & Preview │
│ - AreaSelectionOverlay Crop │ │ - Tap & Swipe Dispatcher │ │ - Compact 116x154dp Window │
└──────────────┬───────────────┘ └──────────────────────────────┘ └──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ ScreenCaptureService │
│ - Resilient VirtualDisplay + BlackScreenBypass Pipeline │
│ - CropSurfaceRenderer (EGL14 + GLES20 OES Hardware Texture Pipeline) │
│ - ScreenRecorderEngine (H.264 + 48kHz AAC, 4x Mic Pre-Amp + Device Mix) │
│ - Multi-Frame Anti-Black Screenshot Reader + Framebuffer Fallback │
└─────────────────────────────────────────────────────────────────────────┘
- Clone the repository:
git clone https://github.com/sharthak18/ScreenKit.git cd ScreenKit - Open in Android Studio Ladybug (or newer) with JDK 17.
- Compile SDK: 35, Target SDK: 34, Minimum SDK: 24.
- Build debug APK:
./gradlew assembleDebug
This project is licensed under the Apache License 2.0. See the LICENSE file for details.
ScreenKit can send your screen as H.264 video and AAC audio to a single RTMP/RTMPS server. This is an encoder connection, not YouTube/Facebook OAuth or a guarantee that your account has live-streaming access.
- In YouTube Live Control Room, Facebook Live Producer, or another compatible platform, create a live broadcast and select streaming/encoder software.
- In ScreenKit's Go Live card choose a destination. Paste the exact server
URL and stream key from that platform as separate fields. Presets are
editable starting points. Prefer
rtmps://(TLS) over unencryptedrtmp://. - Choose 480p/720p/1080p, 24/30/60 fps, a video bitrate (500–12000 kbps), and sound: off, microphone, device audio, or mixed. Resolution preserves screen aspect ratio, does not upscale, and is capped at a 1920-pixel long edge; actual frame rate depends on your device and screen updates. A good starting point is 720p / 30 fps / 2500 kbps.
- Enable Do Not Disturb, tap Go Live, review the privacy warning, and approve Android screen sharing. Everything visible in the chosen screen/app can be sent, including overlays and notifications. Protected/DRM content cannot be streamed.
- Wait for LIVE · Sending to server, then check the platform's preview. You may need to click Go Live there to make it public. ScreenKit's timer and outgoing bitrate describe the encoder connection, not viewer count or public visibility.
- Mute audio silences both microphone and device sound while preserving the AAC track; unmute restores the sources chosen at startup. Use End stream, the floating red LIVE bubble's Stop control, or the capture notification to stop. Android's stop-sharing action and enabled shake/volume stop shortcuts also stop it.
- Screen streaming is exclusive with screen recording, screenshots, and camera recording. This version does not save a simultaneous local MP4, stream the camera as a separate source, or send to multiple destinations at once. A visible camera overlay can appear in screen sharing.
- Sound sources are selected before starting. Device playback capture needs Android 10+ and a source app that permits it. Denying audio permission gives a silent stream.
- Watermarks and the teleprompter are ordinary screen overlays: if included in the shared screen, viewers see them too. They are not private presenter-only layers.
- Keys/destinations are held in process memory only, not saved in preferences, bundles, backups, or analytics. The key field is masked and cleared when starting. Re-enter the key for the next broadcast. Never share keys in screenshots, bug reports, or chat.
- A 25-second connection timeout, bounded outgoing queue, and server disconnect/error handling end failed sessions and release screen/audio capture. Reconnection is manual; no stream silently restarts after a process death or network failure.
- Network throughput, thermal limits, codec support, and platform account eligibility affect compatibility. Test with a private/unlisted broadcast before going public.
Transport uses the Apache-2.0 licensed RootEncoder RTMP module, version 2.5.3,
vendored as source for reproducible builds, with TLS hostname verification, credential-safe logging,
and disconnect handling patches documented in third_party/rootencoder/README.md. ScreenKit reuses its own
MediaCodec screen encoder and mixed-audio capture pipeline; streaming does not write a temporary MP4.