{"adoption": {"forks": 202, "observed_at": "2026-08-28T04:03:23.189377+00:00", "stars": 1051}, "canonical_url": "https://ross.abutalabs.com/products/xmlclassguard", "card": {"archived": false, "artifact_type": "plugin", "description": "一个可混淆4大组件，自定义View等任意类的插件，上架Google Play的利器", "domain": ["android-tools", "security", "developer-tools"], "enriched": true, "function": ["security", "build-tool", "developer-tools"], "health_score": 27, "homepage": null, "language": "Kotlin", "license": null, "license_family": "other", "maturity": "active", "member_repos": ["liujingxing/XmlClassGuard"], "name": "liujingxing/XmlClassGuard", "platform": ["jvm", "cli"], "pushed_at": "2024-06-11T13:27:03+00:00", "repo": "liujingxing/XmlClassGuard", "stars": 1051, "tags": ["android", "obfuscation", "gradle-plugin", "proguard-complement", "google-play", "apk", "aab", "xml"], "topics": [], "urls": [], "use_cases": ["obfuscate android manifest components and custom views", "avoid google play duplicate app rejection", "rename android package name across project files", "complement proguard obfuscation for xml-referenced classes", "move android source directories and sync references", "add constraint_referenced_ids to resguard whitelists"], "what_it_is": "A Gradle plugin that obfuscates Android classes referenced in XML files, such as the four major components and custom Views, which ProGuard does not rename. It also changes manifest package names and moves directories, lowering duplicate-package detection rates when publishing to Google Play.", "when_to_avoid": ["you only need standard Java/Kotlin code shrinking, which ProGuard/R8 already handles", "you cannot tolerate irreversible local source modifications or lack version control backups", "your project is not an Android Gradle project"], "when_to_choose": ["publishing an app to Google Play and needing to reduce aab/apk decompilation or duplicate-detection risk", "you need to rename the four major components or custom Views that ProGuard leaves untouched", "you want to bulk-change package names or move directories with automatic reference syncing"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/xmlclassguard", "repo": "liujingxing/XmlClassGuard", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:23.189377+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T07:00:09.367408+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "12352ecec84fd35fbfe5e750139b05fabbe6c35797422d9461b345d8f7b73951", "fetched_at": "2026-08-28T04:03:23.189377+00:00", "kind": "readme", "missing": false, "url": "https://github.com/liujingxing/XmlClassGuard"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:23.189377+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T07:00:09.367408+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "12352ecec84fd35fbfe5e750139b05fabbe6c35797422d9461b345d8f7b73951", "fetched_at": "2026-08-28T04:03:23.189377+00:00", "kind": "readme", "missing": false, "url": "https://github.com/liujingxing/XmlClassGuard"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T07:00:09.367408+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "12352ecec84fd35fbfe5e750139b05fabbe6c35797422d9461b345d8f7b73951", "fetched_at": "2026-08-28T04:03:23.189377+00:00", "kind": "readme", "missing": false, "url": "https://github.com/liujingxing/XmlClassGuard"}], "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:03:23.189377+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:23.189377+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:23.189377+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T07:00:09.367408+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "12352ecec84fd35fbfe5e750139b05fabbe6c35797422d9461b345d8f7b73951", "fetched_at": "2026-08-28T04:03:23.189377+00:00", "kind": "readme", "missing": false, "url": "https://github.com/liujingxing/XmlClassGuard"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:23.189377+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:23.189377+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T07:00:09.367408+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "12352ecec84fd35fbfe5e750139b05fabbe6c35797422d9461b345d8f7b73951", "fetched_at": "2026-08-28T04:03:23.189377+00:00", "kind": "readme", "missing": false, "url": "https://github.com/liujingxing/XmlClassGuard"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:23.189377+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:23.189377+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:23.189377+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T07:00:09.367408+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "12352ecec84fd35fbfe5e750139b05fabbe6c35797422d9461b345d8f7b73951", "fetched_at": "2026-08-28T04:03:23.189377+00:00", "kind": "readme", "missing": false, "url": "https://github.com/liujingxing/XmlClassGuard"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:23.189377+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:23.189377+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T07:00:09.367408+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "12352ecec84fd35fbfe5e750139b05fabbe6c35797422d9461b345d8f7b73951", "fetched_at": "2026-08-28T04:03:23.189377+00:00", "kind": "readme", "missing": false, "url": "https://github.com/liujingxing/XmlClassGuard"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T07:00:09.367408+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "12352ecec84fd35fbfe5e750139b05fabbe6c35797422d9461b345d8f7b73951", "fetched_at": "2026-08-28T04:03:23.189377+00:00", "kind": "readme", "missing": false, "url": "https://github.com/liujingxing/XmlClassGuard"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T07:00:09.367408+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "12352ecec84fd35fbfe5e750139b05fabbe6c35797422d9461b345d8f7b73951", "fetched_at": "2026-08-28T04:03:23.189377+00:00", "kind": "readme", "missing": false, "url": "https://github.com/liujingxing/XmlClassGuard"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T07:00:09.367408+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "12352ecec84fd35fbfe5e750139b05fabbe6c35797422d9461b345d8f7b73951", "fetched_at": "2026-08-28T04:03:23.189377+00:00", "kind": "readme", "missing": false, "url": "https://github.com/liujingxing/XmlClassGuard"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1625, "days_push": 813, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}