本文转载自:http://blog.csdn.net/liyongming1982/article/details/14108111

有的user用户版本的log 不全,且push/pull某些文件或者属性文件

常常会遇到权限不够的情况,给调试带来很多便:

对于user 版本adb shell 开启的还是shell 权限,而不是root 权限,
如果您需要root 权限,需要再改一下system/core/adb/adb.c 里面的should_drop_privileges() 
这个函数,在#ifndef ALLOW_ADBD_ROOT 时return 0; 而不是return 1; 即可。

判断是否降低权限:

  1. static int should_drop_privileges() {
  2. #ifndef ALLOW_ADBD_ROOT
  3. return 1;
  4. #else /* ALLOW_ADBD_ROOT */
  5. int secure = 0;
  6. char value[PROPERTY_VALUE_MAX];
  7. /* run adbd in secure mode if ro.secure is set and
  8. ** we are not in the emulator
  9. */
  10. property_get("ro.kernel.qemu", value, "");
  11. if (strcmp(value, "1") != 0) {
  12. property_get("ro.secure", value, "1");
  13. if (strcmp(value, "1") == 0) {
  14. // don't run as root if ro.secure is set...
  15. secure = 1;
  16. // ... except we allow running as root in userdebug builds if the
  17. // service.adb.root property has been set by the "adb root" command
  18. property_get("ro.debuggable", value, "");
  19. if (strcmp(value, "1") == 0) {
  20. property_get("service.adb.root", value, "");
  21. if (strcmp(value, "1") == 0) {
  22. secure = 0;
  23. }
  24. }
  25. }
  26. }
  27. return secure;
  28. #endif /* ALLOW_ADBD_ROOT */
  29. }

具体怎么降低权限:

    1. if (should_drop_privileges()) {
    2. struct __user_cap_header_struct header;
    3. struct __user_cap_data_struct cap;
    4. if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) != 0) {
    5. exit(1);
    6. }
    7. /* add extra groups:
    8. ** AID_ADB to access the USB driver
    9. ** AID_LOG to read system logs (adb logcat)
    10. ** AID_INPUT to diagnose input issues (getevent)
    11. ** AID_INET to diagnose network issues (netcfg, ping)
    12. ** AID_GRAPHICS to access the frame buffer
    13. ** AID_NET_BT and AID_NET_BT_ADMIN to diagnose bluetooth (hcidump)
    14. ** AID_SDCARD_R to allow reading from the SD card
    15. ** AID_SDCARD_RW to allow writing to the SD card
    16. ** AID_MOUNT to allow unmounting the SD card before rebooting
    17. ** AID_NET_BW_STATS to read out qtaguid statistics
    18. */
    19. gid_t groups[] = { AID_ADB, AID_LOG, AID_INPUT, AID_INET, AID_GRAPHICS,
    20. AID_NET_BT, AID_NET_BT_ADMIN, AID_SDCARD_R, AID_SDCARD_RW,
    21. AID_MOUNT, AID_NET_BW_STATS };
    22. if (setgroups(sizeof(groups)/sizeof(groups[0]), groups) != 0) {
    23. exit(1);
    24. }
    25. /* then switch user and group to "shell" */
    26. if (setgid(AID_SHELL) != 0) {
    27. exit(1);
    28. }
    29. if (setuid(AID_SHELL) != 0) {
    30. exit(1);
    31. }
    32. /* set CAP_SYS_BOOT capability, so "adb reboot" will succeed */
    33. header.version = _LINUX_CAPABILITY_VERSION;
    34. header.pid = 0;
    35. cap.effective = cap.permitted = (1 << CAP_SYS_BOOT);
    36. cap.inheritable = 0;
    37. capset(&header, &cap);
    38. D("Local port disabled\n");
    39. }

android user用户版本提高adb权限【转】的更多相关文章

  1. android 开发 实现多个动态权限的方法(并且兼容6.0以下的版本权限授权)

    android开发权限授权因为版本的不同有不同的授权方式,6.0以下的版本使用的是在注册表中添加权限的静态授权(这种授权权限提示只会出现在app安装的时候),而6.0以上(包含6.0)就需要动态授权的 ...

  2. android apk 的root 权限和USB adb 权限的差别

    USB adb 权限是指,当adb 连接手机时,手机中的守护进程adbd 的权限为root 权限,从而它的子进程也具有root 权限.通常假设adb shell 看到是: Android 4.0 以后 ...

  3. Vista之前的版本,默认本地登陆用户都以管理员权限启动程序

    Vista之前的版本,默认本地登陆用户都以管理员权限启动程序,之后的OS版本默认都没有管理员权限,需要用户提权才能做某些操作,否则需要管理员权限的操作都会失败MSSQL是用户名账号连接,Socket方 ...

  4. Android P(9.0) userdebug版本执行adb remount失败

    [DESCRIPTION]      在android P版本上如果按照“FAQ18076 android 6.0 M userdebug版本执行adb remount失败”的做法在userdebug ...

  5. Android 6.0 如何默认打开user版本的root权限【转】

    本文转载自:http://blog.csdn.net/wangjicong_215/article/details/77601638 1.system/core/adb/Android.mkdiff ...

  6. 在ubuntu下真机调试android程序出现设备没有访问权限

    今天把android的开发环境从windows平台切换到了ubuntu上. java jdk android-adt android-ndk都下好,环境变量都配好之后, 在调试程序的时候,出现设备没有 ...

  7. 【Android】一种提高Android应用进程存活率新方法

    [Android]一种提高Android应用进程存活率新方法 SkySeraph Jun. 19st 2016 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph ...

  8. 【转】Android Studio-1.2版本设置教程

    如果重新安装Android Studio的话要重新配置风格选项啥的,这篇是个很好的教程,原文链接:http://blog.csdn.net/skykingf/article/details/45485 ...

  9. Android M新的运行时权限开发者需要知道的一切

    android M 的名字官方刚发布不久,最终正式版即将来临!android在不断发展,最近的更新 M 非常不同,一些主要的变化例如运行时权限将有颠覆性影响.惊讶的是android社区鲜有谈论这事儿, ...

随机推荐

  1. bzoj4002 [JLOI2015]有意义的字符串 快速幂

    Description B 君有两个好朋友,他们叫宁宁和冉冉. 有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求((b+sqrt(D)/2)^N的整数部分,请输出结果 Mod 752844341 ...

  2. 洛谷 P1095 守望者的逃离

    题目描述 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上.为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会 ...

  3. MVC 上传文件的方法

    这两天又开始研究MVC了,期间断断续续已经搞了好久了,可是都没坚持下来.囧!这次一定坚持搞出来一个名堂. 废话少说,直接上代码. 前台引擎采用Razor @model System.Web.HttpP ...

  4. hdu 1717

    小数化分数2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  5. python 之递归及冒泡排序

    一.递归函数 在函数内部,可以调用其他函数,如果一个函数在内部调用本身,这个函数就是递归函数 1.递归的基本原理: 每一次函数调用都会有一次返回.当程序流执行到某一级递归的结尾处时,它会转移到前一级递 ...

  6. golang-random随机数

    在Golang中,有两个包提供了rand,分别为 "math/rand" 和 "crypto/rand",  对应两种应用场景. 一."math/ra ...

  7. 阻塞IO下的echo回显实验

    我们只关心代码中的业务逻辑和底层阻塞原因 客户端代码 发送数据 std::string message(len, 'S'); int nw = stream->sendAll(message.c ...

  8. java cocurrent并发包

    1. java.util.concurrent - Java 并发工具包Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包.这个包包含有一系列能够让 Jav ...

  9. flask如何处理并发

    1.使用自身服务器的多进程或者多线程,参考werkzeug的run_simple函数的入参.注意,进程和线程不能同时开启 2.使用gunicorn使用多进程,-w worker 进程数,类型于运行多个 ...

  10. JAVA_MyEclipse如何加载Tomcat

          注意Tomcat不要放到Program Files这种有空格的路径下面!,下图所示是错误的