Android 支持的系统的share uid

博客展示了在PackageManagerService.java文件里,通过mSettings.addSharedUserLPw方法添加多个共享用户ID的代码,如android.uid.system、android.uid.phone等,且提到这些ID定义在Process类中,与Android开发相关。

PackageManagerService.java里面

mSettings.addSharedUserLPw(“android.uid.system”, Process.SYSTEM_UID,
ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED);
mSettings.addSharedUserLPw(“android.uid.phone”, RADIO_UID,
ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED);
mSettings.addSharedUserLPw(“android.uid.log”, LOG_UID,
ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED);
mSettings.addSharedUserLPw(“android.uid.nfc”, NFC_UID,
ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED);
mSettings.addSharedUserLPw(“android.uid.bluetooth”, BLUETOOTH_UID,
ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED);
mSettings.addSharedUserLPw(“android.uid.shell”, SHELL_UID,
ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED);
mSettings.addSharedUserLPw(“android.uid.se”, SE_UID,
ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED);
mSettings.addSharedUserLPw(“android.uid.networkstack”, NETWORKSTACK_UID,
ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED);
mSettings.addSharedUserLPw(“android.uid.uwb”, UWB_UID,
ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED);

ID 定义在Process这个类里面。

### 修改 APK 以移除 `sharedUserId` 配置 在 Android 应用开发中,`sharedUserId` 是一种机制,允许不同的应用程序共享同一用户 ID (UID),从而实现跨应用的数据访问和其他特权操作。然而,在某些情况下可能需要移除该配置。 #### 移除 `sharedUserId` 的方法 要移除 APK 中的 `sharedUserId` 配置,可以按照以下方式处理: 1. **编辑 `AndroidManifest.xml` 文件** 打开项目的 `AndroidManifest.xml` 文件并找到 `<manifest>` 标签中的 `android:sharedUserId` 属性。将其删除即可[^2]。 原始文件示例: ```xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.app" android:sharedUserId="android.uid.system"> ``` 修改后的文件示例: ```xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.app"> ``` 2. **重新构建项目** 删除属性后,通过 Android Studio 或命令行工具重新构建项目。确保清理之前的构建缓存以防止旧版本残留影响新包的行为[^3]。 使用 Gradle 清理和重建: ```bash ./gradlew clean build ``` 3. **签名与对齐** 构建完成后,需对生成的 APK 进行签名和对齐操作。这是为了满足 Android 安装程序的安全性和完整性要求[^1]。 签名脚本示例: ```bash jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore app-release-unsigned.apk alias_name zipalign -v 4 app-release-unsigned.apk app-release-aligned.apk ``` 4. **测试安装过程** 将修改后的 APK 安装到目标设备上,并验证其行为是否正常。由于去除了 `sharedUserId`,原本依赖此特性的功能可能会受到影响,因此需要特别注意这些部分的功能测试[^4]。 #### 注意事项 - 如果多个应用之间存在数据共享或其他基于相同 UID 的协作逻辑,则移除 `sharedUserId` 可能会破坏这种关系。 - 对于已经发布的应用,更改或移除 `sharedUserId` 后可能导致更新失败,因为 Android 系统不允许改变已发布应用的核心安全特性之一——即 UID 分配策略。 --- ### 示例代码片段 以下是用于检测网络连接状态的一个简单例子,展示如何利用上下文对象调用系统服务而不涉及 `sharedUserId` 特性: ```kotlin import android.content.Context import android.net.ConnectivityManager import android.net.NetworkInfo class NetworkUtils { fun isNetworkConnected(context: Context): Boolean { val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val networkInfo: NetworkInfo? = connectivityManager.activeNetworkInfo return networkInfo != null && networkInfo.isConnected } } ``` 上述代码展示了如何独立运行而无需依赖特定的 `sharedUserId` 设置。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值