// the find
hongyangAndroid/AndroidChangeSkin
一种完全无侵入的换肤方式,支持插件式和应用内,无需重启Activity.
A theme-switching library for Android that applies skin changes at runtime without restarting the Activity. It works by scanning the view tree and replacing resources (colors, drawables, backgrounds) based on a naming convention encoded in each view's `android:tag`. Supports both in-app suffix-based skins and external plugin APKs loaded from the filesystem.
The tag-based approach is genuinely non-invasive — you don't subclass views or override inflate; the library hooks in post-layout via view traversal. Plugin APK loading (loading a separate APK's resources via PackageManager and a custom ResourceManager) is a real and underappreciated technique for true hot-swappable themes. The API surface is small: init once, register/unregister per Activity, call changeSkin. No reflection on private framework internals means it degrades gracefully.
Last commit was July 2016 — this is Android API 23 era code and has never been touched since. Plugin APK skinning loads APKs from arbitrary sdcard paths, which is a security concern on modern Android (scoped storage, APK signature verification not mentioned anywhere). The tag convention (`skin:resource_name:attribute`) is fragile and completely invisible to layout tooling — misspell it and you get a silent no-op at runtime. Only three attributes supported (src, background, textColor) with no documented path to add more without editing library source.