Android - INSTALL_FAILD_SHARED_USER_INCOMPATIBLE



我最初的问题在这里:Android-如何按用户名来编程用户?而且它仍然没有得到答复,但是我取得了一些进步,现在我完全陷入了困境。

现在我遵循以下步骤:

  1. 添加了代码样本中所示的DeviceAdmin类,我不知道它是否好还是我应该在那里实现某些东西:

    import android.app.admin.DeviceAdminReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.widget.Toast;
    public class DeviceAdmin extends DeviceAdminReceiver {
    void showToast(Context context, String msg) {
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onEnabled(Context context, Intent intent) {
        showToast(context, "admin_receiver_status_enabled");
    }
    @Override
    public CharSequence onDisableRequested(Context context, Intent intent) {
        return ""; //context.getString(R.string.admin_receiver_status_disable_warning);
    }
    @Override
    public void onDisabled(Context context, Intent intent) {
        showToast(context, "admin_receiver_status_disabled");
    }
    @Override
    public void onPasswordChanged(Context context, Intent intent) {
        showToast(context, "admin_receiver_status_pw_changed");
    }
    }
    
  2. 在清单中添加了DeviceAdmin

    <receiver android:name=".DeviceAdmin"
            android:label="@string/device_admin"
            android:description="@string/device_admin_description"
            android:permission="android.permission.BIND_DEVICE_ADMIN">
            <meta-data android:name="android.app.device_admin"
                android:resource="@xml/security_policies" />
            <intent-filter>
                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
            </intent-filter>
        </receiver>
    
  3. 在我的MainActivity类中,我添加了此代码以获得管理权限:

    DevicePolicyManager mDPM;
    ComponentName mDeviceAdmin;
    final int REQUEST_CODE_ENABLE_ADMIN = 1;
    
    mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
    mDeviceAdmin = new ComponentName(this, DeviceAdmin.class);
    if (!mDPM.isAdminActive(mDeviceAdmin)) {
        // try to become active – must happen here in this activity, to get result
        Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
        intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdmin);
        intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, mContext.getString(R.string.device_admin_description));
        startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN);
    } else {
        UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
        // always return 1
        List<UserHandle> h = um.getUserProfiles();
        // crashes !!! saying I need MANAGE_USERS persmission
        mDPM.switchUser(mDeviceAdmin, h.get(0)); 
    }
    

    我可以在设置菜单中看到我的应用程序作为设备管理员。

  4. 所以我去了清单并添加了这两个权限:

    <permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"
        android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
        android:protectionLevel="signature"
        android:label="@string/manage_users_permission"
        android:description="@string/manage_users_permission_description" />
    <permission android:name="android.permission.MANAGE_USERS"
        android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
        android:protectionLevel="signature"
        android:label="@string/manage_users_permission"
        android:description="@string/manage_users_permission_description" />
    
  5. 这也不起作用,所以我发现我需要签署我的应用程序,我都不知道如何开始这样做。我发现帖子说我需要这两个文件:platform.x5099.pem,platform.pk8,所以我去了我们从我们已安装的ROM工作的源代码团队中获取它们。我要求一个Linux Guy运行keytool-importkeypair,如下所示:具有系统特权的APK,这给了我一个文件:debug.keystore,我将其放在应用程序的应用程序夹中。

  6. 然后,我已经将其添加到项目中的build.gradle文件中:

    signingConfigs {
        release {
            storeFile file("debug.keystore")
            storePassword "test123"
            keyAlias "platform"
            keyPassword "test123"
        }
    }
    
  7. 这些都没有解决我的问题,但我仍然无法获得MANAGE_USERS的许可,但我仍然无法切换用户,然后我看到一篇文章说: android:sharedUserId="android.uid.system"添加到 <manifest> tag,这给我带来了这个错误INSTALL_FAILD_SHARED_USER_INCOMPATIBLE

我是Android的新手,这对我来说是非常先进的理解,但是我必须在工作中这样做,而且这里没有其他Android开发人员...

当您的应用与平台键签名时,您只能使用android.uid.system"。

相关内容

  • 没有找到相关文章

最新更新