admin管理员组

文章数量:1542784

AOSP-应用获取root权限+System用户提示

  • 一、应用获取root权限
  • 二、System用户提示

一、应用获取root权限

  • 源码路径:framework/base/core/java/com/android/internal/os/ZygoteConnection.java

  • 修改思路

    根据app的包名来判断,授予不同的权限等级
    权限等级说明,下面0与1000代表Linux下不同用户组的权限
    root权限:对应0
    system权限:对应1000

注意:修改为root或system权限会导致无法使用SharedPreferences

  • 源码
if (!args.gidSpecified) {
    args.gid = peer.getGid();
    args.gidSpecified = true;
}
  • 为不同app设置不同的权限
    if (!args.gidSpecified) {
        args.gid = peer.getGid();
        args.gidSpecified = true;
    }
	//zjp add
	if((args.niceName!=null) && (args.niceName.contains(".test.")) ){
           args.uid=1000;
           args.gid=1000;
        }
	if((args.niceName!=null) && (args.niceName.contains(".test.app"))){
           args.uid=0;
           args.gid=0;
        }

二、System用户提示

上面的用户组如果设置到1000
app在运行的时候会提示“W/ContextImpl: Calling a method in the system process without a qualified user: …”
下面介绍如何屏蔽该提示

  • 源码路径: /frameworks/base/core/java/android/app/ContextImpl.java
  • 源码
private void warnIfCallingFromSystemProcess() {
    if (Process.myUid() == Process.SYSTEM_UID {
        Slog.w(TAG, "Calling a method in the system process without a qualified user: "
                + Debug.getCallers(5));
    }
}
  • 修改
private void warnIfCallingFromSystemProcess() {
    //zjp update
    if (Process.myUid() == Process.SYSTEM_UID && !Debug.getCallers(5).contains("com.test.") {
        Slog.w(TAG, "Calling a method in the system process without a qualified user: "
                + Debug.getCallers(5));
    }
}

本文标签: 权限提示用户AOSProot