{"adoption": {"forks": 226, "observed_at": "2026-08-28T04:08:21.532711+00:00", "stars": 3822}, "canonical_url": "https://ross.abutalabs.com/products/apksh", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Makes reverse engineering Android apps easier, automating repetitive tasks like pulling, decoding, rebuilding and patching an APK.", "domain": ["reverse-engineering", "security", "mobile-development", "android-tools", "developer-tools"], "enriched": true, "function": ["reverse-engineering", "security", "developer-tools", "cli"], "health_score": 76, "homepage": null, "language": "Shell", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["ax/apk.sh"], "name": "ax/apk.sh", "platform": ["cli"], "pushed_at": "2026-01-26T18:41:58+00:00", "repo": "ax/apk.sh", "stars": 3822, "tags": ["android", "apk", "frida", "frida-gadget", "apktool", "split-apk", "objection", "shell-script", "mobile-security", "linux", "macos"], "topics": ["android", "apk", "frida", "reverse-engineering", "android-reverse-engineering", "frida-gadget", "split-apk", "objection"], "urls": [], "use_cases": ["pull an APK from a connected Android device", "decode an APK into readable resources and smali", "rebuild a decoded APK back into a binary APK", "patch an APK to load frida-gadget.so for instrumentation", "merge split APKs from app bundles into a single APK", "sign a rebuilt APK with apksigner", "instrument an app with Frida without rooting the device"], "what_it_is": "A Bash script that automates Android APK reverse engineering tasks such as pulling, decoding, rebuilding, and patching APKs. It wraps apktool and automates Frida gadget injection, supporting split APKs and multiple architectures without requiring a rooted device.", "when_to_avoid": ["you need a GUI-based reverse engineering tool", "you are doing static analysis only and don't need APK rebuilding or patching", "you need iOS or non-Android mobile reverse engineering"], "when_to_choose": ["you need to reverse engineer or dynamically instrument an Android app", "you want to inject Frida gadget into an APK without a rooted device", "you need to handle split APKs or app bundles", "you want to automate repetitive apktool/frida workflows from the command line"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/apksh", "repo": "ax/apk.sh", "role": "main", "score": 73}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:21.532711+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:26:24.526116+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2989dbbda0a88fcf85317a9e497d064a2fd6865c6e0fa1ddec18dd63c7db49d5", "fetched_at": "2026-08-28T04:08:21.532711+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ax/apk.sh"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:21.532711+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:26:24.526116+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2989dbbda0a88fcf85317a9e497d064a2fd6865c6e0fa1ddec18dd63c7db49d5", "fetched_at": "2026-08-28T04:08:21.532711+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ax/apk.sh"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:26:24.526116+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2989dbbda0a88fcf85317a9e497d064a2fd6865c6e0fa1ddec18dd63c7db49d5", "fetched_at": "2026-08-28T04:08:21.532711+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ax/apk.sh"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:08:21.532711+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:21.532711+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:21.532711+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:26:24.526116+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2989dbbda0a88fcf85317a9e497d064a2fd6865c6e0fa1ddec18dd63c7db49d5", "fetched_at": "2026-08-28T04:08:21.532711+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ax/apk.sh"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:21.532711+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:21.532711+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:26:24.526116+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2989dbbda0a88fcf85317a9e497d064a2fd6865c6e0fa1ddec18dd63c7db49d5", "fetched_at": "2026-08-28T04:08:21.532711+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ax/apk.sh"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:21.532711+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:21.532711+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:21.532711+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:26:24.526116+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2989dbbda0a88fcf85317a9e497d064a2fd6865c6e0fa1ddec18dd63c7db49d5", "fetched_at": "2026-08-28T04:08:21.532711+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ax/apk.sh"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:21.532711+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:21.532711+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:26:24.526116+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2989dbbda0a88fcf85317a9e497d064a2fd6865c6e0fa1ddec18dd63c7db49d5", "fetched_at": "2026-08-28T04:08:21.532711+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ax/apk.sh"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:26:24.526116+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2989dbbda0a88fcf85317a9e497d064a2fd6865c6e0fa1ddec18dd63c7db49d5", "fetched_at": "2026-08-28T04:08:21.532711+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ax/apk.sh"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:26:24.526116+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2989dbbda0a88fcf85317a9e497d064a2fd6865c6e0fa1ddec18dd63c7db49d5", "fetched_at": "2026-08-28T04:08:21.532711+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ax/apk.sh"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:26:24.526116+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2989dbbda0a88fcf85317a9e497d064a2fd6865c6e0fa1ddec18dd63c7db49d5", "fetched_at": "2026-08-28T04:08:21.532711+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ax/apk.sh"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 64, "longevity": 100, "rhythm": 68}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1441, "days_push": 219, "days_rel": 219, "gap_med": 14.0, "n_releases_24m": 5}, "score": 73, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}