{"id":45454525,"url":"https://github.com/gaiuszzang/logmeow","last_synced_at":"2026-04-14T14:00:57.029Z","repository":{"id":339881801,"uuid":"1127600505","full_name":"gaiuszzang/LogMeow","owner":"gaiuszzang","description":"Android Log Viewer","archived":false,"fork":false,"pushed_at":"2026-04-01T23:30:13.000Z","size":4994,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-02T11:12:58.722Z","etag":null,"topics":["android-log","android-logcat","android-network-mocking","android-network-monitoring","kotlin","kotlin-multiplatform"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gaiuszzang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-04T08:08:09.000Z","updated_at":"2026-04-01T23:27:21.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/gaiuszzang/LogMeow","commit_stats":null,"previous_names":["gaiuszzang/logmeow"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/gaiuszzang/LogMeow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gaiuszzang%2FLogMeow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gaiuszzang%2FLogMeow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gaiuszzang%2FLogMeow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gaiuszzang%2FLogMeow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gaiuszzang","download_url":"https://codeload.github.com/gaiuszzang/LogMeow/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gaiuszzang%2FLogMeow/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31799411,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T11:13:53.975Z","status":"ssl_error","status_checked_at":"2026-04-14T11:13:53.299Z","response_time":153,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android-log","android-logcat","android-network-mocking","android-network-monitoring","kotlin","kotlin-multiplatform"],"created_at":"2026-02-22T06:01:10.502Z","updated_at":"2026-04-14T14:00:57.015Z","avatar_url":"https://github.com/gaiuszzang.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LogMeow\n\nAndroid logcat viewer for Desktop (macOS, Windows, Linux)\n\n![LogMeow](.docs/logmeow-default.png)\n\n## Features\n\n- **Logcat Viewer**: Real-time Android logcat monitoring with filtering\n- **Log Bookmark**: Bookmark important log lines for quick navigation\n- **Network Interceptor**: Inspect HTTP traffic from Android apps in real-time with mock API support\n- **Screenshot Capture**: Take device screenshots and save to local directory\n- **Screen Recording**: Record device screen to MP4 video\n- **DeepLink Execution**: Execute and manage deeplink history\n- **Scrcpy Integration**: Launch scrcpy for device mirroring and control\n- **Theme Settings**: Switch between IslandsDark and DarkModern themes\n\n## Requirements\n\n- JDK 21 or higher\n- Android SDK with ADB installed\n- scrcpy (optional, for device mirroring feature)\n\n### ADB Setup\n\nThe application automatically searches for ADB in the following locations:\n\n1. `$ANDROID_HOME/platform-tools/adb` or `$ANDROID_SDK_ROOT/platform-tools/adb`\n2. `~/Library/Android/sdk/platform-tools/adb` (macOS)\n3. `/usr/local/bin/adb`\n4. `/opt/homebrew/bin/adb` (macOS with Homebrew)\n5. System PATH\n\n**Recommended Setup (macOS):**\n\nAdd to your `~/.zshrc` or `~/.bash_profile`:\n\n```bash\nexport ANDROID_HOME=$HOME/Library/Android/sdk\nexport PATH=$PATH:$ANDROID_HOME/platform-tools\n```\n\nThen restart your terminal or run `source ~/.zshrc`\n\n### Scrcpy Setup (Optional)\n\nFor device mirroring and control feature, install scrcpy:\n\n**macOS (Homebrew):**\n```bash\nbrew install scrcpy\n```\n\n**Windows:**\nDownload from [scrcpy releases](https://github.com/Genymobile/scrcpy/releases)\n\n**Linux:**\n```bash\nsudo apt install scrcpy  # Debian/Ubuntu\n```\n\nThe application automatically searches for scrcpy in common installation paths.\n\n## Network Interceptor\n[![Maven Central](https://img.shields.io/maven-central/v/io.groovin.logmeow/network-interceptor-core)](https://central.sonatype.com/artifact/io.groovin.logmeow/network-interceptor-core)\n\nLogMeow includes a network interceptor library that captures HTTP traffic from your Android app and displays it in the desktop tool's Network Inspector.\n\n![Network Inspector](.docs/logmeow-interceptor.png)\n\n### Setup\n\nAdd the dependency to your Android app:\n\n**OkHttp:**\n```kotlin\n// build.gradle.kts\ndebugImplementation(\"io.groovin.logmeow:network-interceptor-okhttp:\u003cversion\u003e\")\nreleaseImplementation(\"io.groovin.logmeow:network-interceptor-no-op:\u003cversion\u003e\")\n```\n\n**Ktor:**\n```kotlin\n// build.gradle.kts\ndebugImplementation(\"io.groovin.logmeow:network-interceptor-ktor:\u003cversion\u003e\")\nreleaseImplementation(\"io.groovin.logmeow:network-interceptor-no-op:\u003cversion\u003e\")\n```\n\n### Usage\n\n**OkHttp:**\n```kotlin\nval client = OkHttpClient.Builder()\n    .addInterceptor(LogMeowInterceptor(context))\n    .build()\n```\n\n**Ktor:**\n```kotlin\nval client = HttpClient {\n    install(LogMeowPlugin) {\n        context = applicationContext\n    }\n}\n```\n\n### Configuration Options\n\n```kotlin\n// OkHttp\nLogMeowInterceptor(\n    context = context,\n    mockSupportType = MockSupportType.ALWAYS, // ALWAYS, CONNECTED_ONLY, DISABLED\n    port = LogMeow.DEFAULT_PORT               // default: 10087\n)\n\n// Ktor\ninstall(LogMeowPlugin) {\n    context = applicationContext\n    mockSupportType = MockSupportType.ALWAYS\n    port = LogMeow.DEFAULT_PORT\n}\n```\n\n### Port Forwarding\n\nLogMeow desktop app communicates with the Android device via ADB reverse port forwarding. The app handles this automatically, but if you need manual setup:\n\n```bash\nadb reverse tcp:10087 tcp:10087\n```\n\n### Mock API\n\nThe Network Inspector includes a Mock API feature that lets you define mock responses for specific endpoints directly from the desktop tool. Mock settings are synced to the Android app in real-time.\n\n![Mock API Settings](.docs/logmeow-mock-api.png)\n\n## Build Guide\n\n### Run Application\n\n```bash\n./gradlew run\n```\n\n### Build DMG (macOS)\n\n```bash\n./gradlew packageDmg\n```\n\nOutput: `build/compose/binaries/main/dmg/LogMeow-{version}.dmg`\n\n### Build MSI (Windows)\n\n```bash\n./gradlew packageMsi\n```\n\nOutput: `build/compose/binaries/main/msi/LogMeow-{version}.msi`\n\n### Build DEB (Linux)\n\n```bash\n./gradlew packageDeb\n```\n\nOutput: `build/compose/binaries/main/deb/logmeow_{version}-1_amd64.deb`\n\n### Build for Current OS\n\n```bash\n./gradlew packageDistributionForCurrentOS\n```\n\n### Create Distributable (without installer)\n\n```bash\n./gradlew createDistributable\n```\n\nOutput: `build/compose/binaries/main/app/`\n\n## Development\n\n### Project Structure\n\n```\nsrc/main/kotlin/\n├── adb/              # ADB service and data models\n├── data/             # Data models (settings)\n├── di/               # Dependency injection\n├── network/          # Network interceptor server\n├── repository/       # Data persistence\n├── ui/               # UI components\n│   ├── common/       # Common UI components\n│   ├── icons/        # Custom icons\n│   └── theme/        # Theme system\n└── vm/               # ViewModels\n\ninterceptor-api/      # Shared API contract and DTOs\ninterceptor-core/     # Shared interceptor logic (protocol, client, mock settings)\ninterceptor-okhttp/   # OkHttp interceptor implementation\ninterceptor-ktor/     # Ktor client plugin implementation\ninterceptor-no-op/    # No-op implementation for release builds\n```\n\n### Technology Stack\n\n- Kotlin\n- Jetpack Compose for Desktop\n- Koin (Dependency Injection)\n- Kotlinx Coroutines\n\n## License\nCopyright 2026 gaiuszzang (Mincheol Shin)\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgaiuszzang%2Flogmeow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgaiuszzang%2Flogmeow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgaiuszzang%2Flogmeow/lists"}