GKD is an open-source Android application that automates UI interactions, primarily to skip ads, auto-confirm dialogs, and perform custom click actions. It operates as an accessibility service, using a custom selector language (similar to CSS) to match UI nodes and execute actions defined in remote subscription rules. The app is built with Kotlin and Jetpack Compose, leveraging Room for local persistence, Ktor for HTTP, and Coroutines/Flow for reactive state management. It also integrates with Shizuku for privileged operations like input injection and screenshot capture. The architecture is modular: the main `gkd-app` module contains the UI, services, and rule engine; `gkd-selector` is a Kotlin Multiplatform library for parsing and matching the custom selector syntax; `gkd-db` provides a multiplatform database layer; and `gkd-hidden-api` contains stubs for Android hidden APIs used for automation. Key entry points include the accessibility service (`A11yService`), the subscription repository (`SubscriptionRepository`), and the snapshot capture system. Data flows involve downloading subscription rules, parsing them into internal representations, matching against accessibility node trees, and executing actions (click, swipe, etc.). External dependencies include AndroidX libraries, Ktor, Kotlin Serialization, Coil, and the Shizuku privilege library. The codebase demonstrates strong engineering practices with extensive unit tests, a well-defined selector engine, and reusable patterns like `Loadable` for async state and `MutexState` for concurrency. However, it relies heavily on hidden Android APIs and a custom DSL, which introduces maintenance risk. Overall, it is a high-quality, actively maintained project with significant reuse potential in its selector engine and utility components.
Curbox is a digital wellbeing Android application that leverages AccessibilityService to monitor and intervene in user behavior. It blocks distracting apps, websites, keywords, and short-form videos (reels/shorts), enforces focus sessions (with pomodoro), applies grayscale filters, displays mindful message overlays, and hides UI elements via a custom domain-specific script engine. The app tracks detailed usage statistics (app, website, reel, focus) locally in Room and optionally synchronizes across devices using Supabase with end-to-end encryption (paywalled subscription). It provides anti-tamper features including device admin protection, uninstall prevention, and a settings change delay mechanism. The architecture is a monolithic Android app with multiple build flavors (F-Droid, Play Store, full) that gate features like cloud sync, UI hider, and device admin. It exposes an AIDL-based API for external apps. The codebase demonstrates strong engineering with reusable components like a custom script interpreter, encryption utilities, and pattern-based accessibility node selectors, but carries technical drift from deprecated Android APIs and hardcoded app-specific identifiers.
AutoDing is an Android application that automates DingTalk (a Chinese workplace communication and time-tracking app) clock-in operations. It offers two primary features: (1) scheduled clock-in, where users set a specific time and the app will automatically open DingTalk and trigger the 'quick clock-in' feature, and (2) remote push-based clock-in, where a user can send a command via JPush (a push notification service) from one phone to another, causing the receiving phone to wake up, unlock, and launch DingTalk for clock-in. The app also includes notification monitoring to capture clock-in results, email notifications via QQ mail (using javax.mail), and status reporting (battery level, lock screen state). The architecture is a standard Android monolithic app with multiple services: BaseAccessibilityService and GestureService for UI automation, NotificationMonitorService for listening to DingTalk notifications, and PushCoreService for handling custom push messages. The UI is built with Fragments (ViewPager2) and uses ViewBinding/DataBinding, GreenDAO for local database storage of clock-in history, and Retrofit for network calls to the JPush API and a workday API. The app is written in both Kotlin and Java, with Kotlin being the dominant language for new code. The codebase is functional and demonstrates a working solution for a specific niche problem (automating DingTalk clock-in). However, it is not actively maintained; the author has stopped providing APK builds and recommends users rebuild the app themselves to avoid package name blocking. The code contains several hardcoded credentials (signing keys, JPush appKey/masterSecret) and outdated dependencies (compileSdk 33, AndroidX 1.4.0). While the overall architecture is coherent, the code quality is average with some reusable utility classes but also significant boilerplate and tight coupling to the DingTalk package name.