Android13自定义Settings克隆应用无法访问com.android.i18n库求助
问题原因与解决方案
原因分析
Android 13(r31分支)对系统私有库的访问权限做了严格限制,com.android.i18n.timezone下的类属于系统私有API/库,仅允许满足以下条件的应用访问:
- 正确声明了对应库的构建依赖
- 拥有系统签名(或符合系统应用的权限配置)
原Settings应用的构建配置中已经默认包含了对该库的依赖,且具备系统应用的权限属性;而你克隆的MySettings仅修改了应用名称和基础配置,未同步添加这些关键依赖与权限声明,导致编译时无法解析相关类。
解决步骤
1. 同步系统库依赖配置
打开MySettings目录下的Android.bp文件,找到android_app节点,添加对com.android.i18n相关库的依赖(直接参考原Settings的Android.bp配置):
android_app { name: "MySettings", // 其他已修改的配置... static_libs: [ // 复制原Settings中相关的时区库依赖 "com.android.i18n.timezone.countryzones", "com.android.i18n.timezone.common", ], // 若原Settings使用共享库依赖,补充以下内容 shared_libs: [ "libcountryzones", "libtimezonedata", ], }
2. 同步系统应用权限配置
复制原Settings的AndroidManifest.xml中的关键配置到MySettings的Manifest:
- 添加
android:sharedUserId="android.uid.system"属性,确保应用具备系统用户ID - 同步原Settings中与时区、系统设置相关的权限声明(如
android.permission.MANAGE_TIME_ZONE等)
3. 重新编译验证
执行以下命令重新编译:
mmm packages/apps/MySettings -j$(nproc)
若仍有问题,可先清理旧编译产物再构建:
make clean packages/apps/MySettings mmm packages/apps/MySettings
内容的提问来源于stack exchange,提问作者Sadman Alam
相关产品推荐
相关产品推荐

