{"id":13428607,"url":"https://github.com/kiruto/debug-bottle","last_synced_at":"2026-01-14T02:35:20.237Z","repository":{"id":46697578,"uuid":"66073375","full_name":"kiruto/debug-bottle","owner":"kiruto","description":"🍼Debug Bottle is an Android runtime debug / develop tools written using kotlin language.","archived":false,"fork":false,"pushed_at":"2018-03-15T08:14:51.000Z","size":14405,"stargazers_count":855,"open_issues_count":5,"forks_count":89,"subscribers_count":25,"default_branch":"1.1.x","last_synced_at":"2025-05-28T10:14:31.717Z","etag":null,"topics":["android-debug","android-library","kotlin-android"],"latest_commit_sha":null,"homepage":"http://exyui.com/article/3/Android-Debug-Bottle-v11","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kiruto.png","metadata":{"files":{"readme":"README-JP.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-08-19T10:07:01.000Z","updated_at":"2025-04-20T10:30:29.000Z","dependencies_parsed_at":"2022-08-03T05:15:37.930Z","dependency_job_id":null,"html_url":"https://github.com/kiruto/debug-bottle","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/kiruto/debug-bottle","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiruto%2Fdebug-bottle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiruto%2Fdebug-bottle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiruto%2Fdebug-bottle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiruto%2Fdebug-bottle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kiruto","download_url":"https://codeload.github.com/kiruto/debug-bottle/tar.gz/refs/heads/1.1.x","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiruto%2Fdebug-bottle/sbom","scorecard":{"id":561441,"data":{"date":"2025-08-11","repo":{"name":"github.com/kiruto/debug-bottle","commit":"0e307fefedeba01e355f40def5b16611cca6abde"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.6,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: gradle/wrapper/gradle-wrapper.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v1.0.4 not signed: https://api.github.com/repos/kiruto/debug-bottle/releases/4449635","Warn: release artifact v1.0.3 not signed: https://api.github.com/repos/kiruto/debug-bottle/releases/4438831","Warn: release artifact v1.0.0EAP-beta not signed: https://api.github.com/repos/kiruto/debug-bottle/releases/4132540","Warn: release artifact v1.0.4 does not have provenance: https://api.github.com/repos/kiruto/debug-bottle/releases/4449635","Warn: release artifact v1.0.3 does not have provenance: https://api.github.com/repos/kiruto/debug-bottle/releases/4438831","Warn: release artifact v1.0.0EAP-beta does not have provenance: https://api.github.com/repos/kiruto/debug-bottle/releases/4132540"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch '1.1.x'","Warn: branch protection not enabled for branch '1.0.1'","Warn: branch protection not enabled for branch '1.0.0EAP'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-20T13:49:37.059Z","repository_id":46697578,"created_at":"2025-08-20T13:49:37.059Z","updated_at":"2025-08-20T13:49:37.059Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28408711,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T01:52:23.358Z","status":"online","status_checked_at":"2026-01-14T02:00:06.678Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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-debug","android-library","kotlin-android"],"created_at":"2024-07-31T01:01:01.664Z","updated_at":"2026-01-14T02:35:20.216Z","avatar_url":"https://github.com/kiruto.png","language":"Kotlin","readme":"\u003ca href=\"https://travis-ci.org/kiruto/debug-bottle\" title=\"Latest push build on default branch: created\"\u003e\n  \u003cimg src=\"https://travis-ci.org/kiruto/debug-bottle.svg?branch=1.0.1\" alt=\"build:created\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://mvnrepository.com/artifact/com.exyui.android/debug-bottle-runtime\" name=\"status-images\" title=\"Latest version on maven-central\"\u003e\n  \u003cimg src=\"https://img.shields.io/maven-central/v/com.exyui.android/debug-bottle-runtime.svg?maxAge=2592000\" alt=\"version:maven-central\"\u003e\n\u003c/a\u003e\n\n[🇨🇳 中文](README-ZH.md) / [🇯🇵日本語](README-JP.md) / [🇬🇧 English](README.md)\n\n# 🍼デバッグボットル\nアンドロイド Java / Kotlin 開発者ツール\n\n- [CHANGELOG](CHANGELOG.md)\n- [TODO](TODO.md)\n\nDEMOは今Google Playでダウンロードできます:\n\n\u003ca href=\"https://play.google.com/store/apps/details?id=me.chunyu.dev.yuriel.kotdebugtool\"\u003e\u003cimg alt=\"Get it on Google Play\" src=\"https://play.google.com/intl/en_us/badges/images/apps/en-play-badge-border.png\" width=\"300\" /\u003e\u003c/a\u003e\n\n[\u003cimg src=\"screenshots/introduction.gif\" width=\"225\" height=\"400\"\u003e](screenshots/raw/introduction.gif)\n[\u003cimg src=\"screenshots/quick-toggles.png\"/\u003e](screenshots/raw/quick-toggles.png)\n[\u003cimg src=\"screenshots/features-2.png\"/\u003e](screenshots/raw/features-2.png)\n\n## 実装されている機能\n\n- [便利なHTTPスニファ](#アプリのネットワークトラフィックを記録)\n- [実装されるアクティビティはいつでも３D化できます](#アクティビティを3D化する)\n- [SharedPreferencesをランタイム時に簡単的に編集できます](#SharedPreferencesを編集する)\n- [ランタイム時にStrictモードをオン・オブにするのを可能とさせてます](#Strictモードで開発)\n- [アプリがクラッシュするとログが保存されます](#クラッシュログ)\n- [早くメモリリークを発見できて、そして回避できます](#leak-canaryを使用する)\n- [UIスレッドのフリーズを起こすコードを見つけます](#uiフリーズを排除する)\n- [いずれのアクティビティを簡単にアクセスできます](#アクティビティをいつでも起動する)\n\n#### アプリのネットワークトラフィックを記録\nこの機能は、デバッグボットルがHTTPリクエストとリスポンスをログファイルに書き込む。記録されたログファイルはいつでも見えます。\n\n[\u003cimg src=\"screenshots/network-sniffer-1.png\"/\u003e](screenshots/raw/network-sniffer-1.png)\n[\u003cimg src=\"screenshots/network-sniffer-2.png\"/\u003e](screenshots/raw/network-sniffer-2.png)\n\n#### アクティビティを3D化する\nView のデバッグ用途として、画面をグリグリすると 3DCG みたいに View のヒエラルキーを見ることができるようになるツールです。\n\n[\u003cimg src=\"screenshots/scalpel-view.png\"/\u003e](screenshots/raw/network-sniffer-2.png)\n[\u003cimg src=\"screenshots/scalpel-view.gif\" width=\"225\" height=\"400\" /\u003e](screenshots/raw/scalpel-view.gif)\n\n#### SharedPreferencesを編集する\nアプリが使ってるすべてのSharedPreferencesをランタイム時に編集する。\n\n[\u003cimg src=\"screenshots/shared-preferences-editor-1.png\"/\u003e](screenshots/raw/network-sniffer-2.png)\n[\u003cimg src=\"screenshots/shared-preferences-editor-2.png\"/\u003e](screenshots/raw/network-sniffer-2.png)\n\n#### Strictモードで開発\nStrictModeはアプリケーションの動作をもっさりさせる原因となる、 ディスクやネットワークへのアクセスを検知するための仕組みです。使う方とかを[オフィシャルサイト](https://developer.android.com/reference/android/os/StrictMode.html)で見えます。\n\n#### クラッシュログ\nアプリがクラッシュするとログが保存され、デバッグボトルからログを取得して解析することができます。\n\n[\u003cimg src=\"screenshots/crash.gif\" width=\"225\" height=\"400\"\u003e](screenshots/raw/crash.gif)\n\n#### Leak Canaryを使用する\nSquareのメモリリークを検出するライブラリ Leak Canary を通じて、メモリリークを調査できます。デバッグボトルはすでにLeak Canaryを含んでいるから、その機能は使えます。もっと詳しくは[こちらで](https://github.com/square/leakcanary/wiki/FAQ)。\n\n#### UIフリーズを排除する\n一旦UIフリーズが発生となると、デバッグボトルはノティファイで通知して、同じ時にログファイルを作成します。開発者はログファイルで、フリーズの原因を知り、排除するのは可能となります。\n\n[\u003cimg src=\"screenshots/ui-blocks.png\"/\u003e](screenshots/raw/network-sniffer-2.png)\n[\u003cimg src=\"screenshots/block-canary-demo.gif\" width=\"225\" height=\"400\" /\u003e](screenshots/raw/block-canary-demo.gif)\n\n#### アクティビティをいつでも起動する\nデバッグボトルはシンプルなエントリーを提供し、アクティビティやRunnableはそのエントリーを通じて起動できます。エントリーは３つあります：\n* すべてのアクティビティエントリー\n* カストマイズインテントエントリー\n* カストマイズRunnableエントリー\n\n[\u003cimg src=\"screenshots/all-activities.png\"/\u003e](screenshots/raw/network-sniffer-2.png)\n[\u003cimg src=\"screenshots/run-activity-with-intent.gif\" width=\"225\" height=\"400\" /\u003e](screenshots/raw/run-activity-with-intent.gif)\n\n## 構築するには\n\n#### 1. Gradleプロジェクトファイルを構成する\nまずはスナップショットリポジトリを配置します。\n```gradle\nallprojects {\n    repositories {\n        ...\n        mavenCentral()\n    }\n}\n```\nアプリのプライマリモジュールによるGradleファイルに依頼環境を導入します。\n\n```gradle\ndependencies {\n    debugCompile 'com.exyui.android:debug-bottle-runtime:1.1.1'\n\n    // Javaの場合はこうして構築します\n    releaseCompile 'com.exyui.android:debug-bottle-noop-java:1.1.1'\n    testCompile 'com.exyui.android:debug-bottle-noop-java:1.1.1'\n\n    // Kotlinの場合はこうして構築します\n    releaseCompile 'com.exyui.android:debug-bottle-noop-kotlin:1.1.1'\n    testCompile 'com.exyui.android:debug-bottle-noop-kotlin:1.1.1'\n\n    compile 'com.android.support:appcompat-v7:23.2.0+'\n}\n```\n\nSpecially, Debug Bottle not only support API 23+, but also 22. To support API 22, please add dependencies like this:\n```gradle\ndependencies {\n    debugCompile 'com.exyui.android:debug-bottle-runtime:1.0.6-support22'\n\n    // Javaの場合はこうして構築します\n    releaseCompile 'com.exyui.android:debug-bottle-noop-java:1.0.6-support22'\n    testCompile 'com.exyui.android:debug-bottle-noop-java:1.0.6-support22'\n\n    // Kotlinの場合はこうして構築します\n    releaseCompile 'com.exyui.android:debug-bottle-noop-kotlin:1.0.6-support22'\n    testCompile 'com.exyui.android:debug-bottle-noop-kotlin:1.0.6-support22'\n\n    compile 'com.android.support:appcompat-v7:22+'\n}\n```\n\nTo support API 23, add dependencies like this:\n```gradle\ndependencies {\n    debugCompile 'com.exyui.android:debug-bottle-runtime:1.0.6-support23'\n\n    // Javaの場合はこうして構築します\n    releaseCompile 'com.exyui.android:debug-bottle-noop-java:1.0.6-support23'\n    testCompile 'com.exyui.android:debug-bottle-noop-java:1.0.6-support23'\n\n    // Kotlinの場合はこうして構築します\n    releaseCompile 'com.exyui.android:debug-bottle-noop-kotlin:1.0.6-support23'\n    testCompile 'com.exyui.android:debug-bottle-noop-kotlin:1.0.6-support23'\n\n    compile 'com.android.support:appcompat-v7:23+'\n}\n```\n\n#### 2. Manifestに加入\nManifestにデバッグボトルのプライマリアクティビティを加入します。\n```xml\n\u003cactivity\n    android:name=\"com.exyui.android.debugbottle.components.DTDrawerActivity\"\n    android:theme=\"@style/Theme.AppCompat.Light\"\n    android:label=\"ほげほげツール\"/\u003e\n```\n「ほげほげツール」はこのツールの名前、欲しいネームを付けてよろしい、ただし空きでは行けません。\n\n#### 3. Applicationにデバッグボトルを注入\nまずは「BlockCanaryContext」を実装します。\n```java\npublic class AppBlockCanaryContext extends BlockCanaryContext {...}\n```\n\nそしてデバッグボトルをApplicationに注入します。\n```java\npublic class MyApplication extends Application{\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        DTInstaller.install(this)\n            .setBlockCanary(new AppBlockCanaryContext(this))\n            .setOkHttpClient(httpClient)\n            .setInjector(\"your.package.injector.ContentInjector\")\n            .setPackageName(\"your.package\")\n            .enable()\n            .run();\n    }\n}\n```\nKotlinを使ってる場合は、以下の方法で注入します。\n```kotlin\nclass MyApplication: Application() {\n    override fun onCreate() {\n        super.onCreate()\n        DTInstaller.install(this)\n            .setBlockCanary(AppBlockCanaryContext(this))\n            .setOkHttpClient(httpClient)\n            .setInjector(\"your.package.injector.ContentInjector\")\n            .setPackageName(\"your.package\")\n            .enable()\n            .run()\n    }\n}\n```\n\n## リンク先\n* [Leak Canary](https://github.com/square/leakcanary)\n* [Android Performance Monitor](https://github.com/markzhai/AndroidPerformanceMonitor)\n* [Scalpel](https://github.com/JakeWharton/scalpel)\n\n## License\n\n```\nDebug Bottle\n\nCopyright 2016 Yuriel (http://exyui.com).\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\n   http://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```\n\n\nDebug Bottle required features are based on or derives from projects below:\n- Apache License 2.0\n  - [Android Performance Monitor](https://raw.githubusercontent.com/markzhai/AndroidPerformanceMonitor/master/LICENSE)\n  - [Leak Canary](https://raw.githubusercontent.com/square/leakcanary/master/LICENSE.txt)\n  - [Scalpel](https://raw.githubusercontent.com/JakeWharton/scalpel/master/LICENSE.txt)\n  - [Bubbles for Android](https://raw.githubusercontent.com/txusballesteros/bubbles-for-android/master/LICENSE)\n  - [Takt](https://raw.githubusercontent.com/wasabeef/Takt/master/LICENSE)\n","funding_links":[],"categories":["开源库","Libraries","Debug"],"sub_categories":["工具"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkiruto%2Fdebug-bottle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkiruto%2Fdebug-bottle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkiruto%2Fdebug-bottle/lists"}