把各大厂商的内置应用,移植到任何一台 Android 手机上
Charming × DeepSeek Harness重新签名并修补兼容层,可直接在非原厂设备安装设置 → 应用 → 权限厂商应用的 targetSdk 通常是 36/37(对应 Android 16/17),在低版本系统上会因为框架 API 差异直接崩溃(如 ClientTransactionListenerController NPE)。降到 35 后即可运行。
用 apktool 重新打包会丢失 META-INF/services/*、*.version、*.kotlin_module 等文件,导致 Kotlin 协程初始化失败。必须从原版 APK 恢复这些文件。
# 典型报错 java.lang.IllegalStateException: Module with the Main dispatcher is missing at iwj.<clinit>(Unknown Source:100)
厂商应用会声明 <uses-library android:name="micloud-sdk"> 这类私有共享库,非原厂设备上不存在导致安装失败。直接修改二进制 AndroidManifest.xml,给它加上 required="false"。
# AXML StartElement 布局(关键) off+0 type(2) hsize(2) size(4) off+8 lineNumber(4) comment(4) off+16 ns(4) name(4) off+24 attributeStart(2) attributeSize(2) off+28 attributeCount(2) ← 修改这里 off+30 idIndex(2) classIndex(2) styleIndex(2)
厂商应用会调用自家框架类(如 miui.os.Build、miui.util.FeatureParser),非原厂系统没有这些类导致 NoClassDefFoundError。编译同名空实现注入 APK 即可。
# 已实现的 shim(小米)
miui.os.Build 36 个字段(IS_GLOBAL_BUILD / IS_PRIVATE_BUILD…)
miui.util.FeatureParser 15 个方法(getBoolean / hasFeature…)
miui.util.HapticFeedbackUtil 震动反馈
miui.accounts.ExtraAccountManager
miui.cloud.os.SystemProperties 反射调用
miui.cloud.sync.MiCloudStatusInfo
miui.cloud.common.XLogger
miui.cloud.util.SyncAutoSettingUtil
miui.cloud.MiCloudCompat
miui.cloud.sync.FamilyInfo
有些限制是系统级的,App 层无法绕过:
Intent.getMiuiFlags(),改在 framework.jar 里,无法 shim目前支持 HyperOS(小米)和 One UI(三星)。后续将陆续加入 ColorOS(OPPO)、OriginOS(vivo)、HarmonyOS、Flyme(魅族)等厂商应用。
技术方案完全通用:改 targetSdk → 恢复 META-INF → 补 AXML → 注入 shim,四个步骤适用于所有厂商。