本文转载自: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. PatentTips - Write Combining Buffer for Sequentially Addressed Partial Line Operations

    SUMMARY OF THE INVENTION The present invention pertains to a write combining buffer for use in a mic ...

  2. Python入门--7--处理数据时学习到的东西

    一.数据导入(这里使用的是pands包) import pands as pd wenjian = pd.read_csv('路径') 二.数据变换 print wenjian.head()    # ...

  3. Redis数据结构之简单动态字符串

    Redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组), 而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型, 并将SDS用作Redi ...

  4. [Bzoj1112][POI2008]砖块Klo(splay)

    1112: [POI2008]砖块Klo Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2353  Solved: 831[Submit][Statu ...

  5. 实验三:分别用for,while和do-while循环语句以及递归方法计算n!,并输出算式

    1.for循环语句计算n! 2.while循环语句计算n! 3.do-while语句计算n! 4.递归方法计算n! 5.心得:在此次实验中不知道如何从键盘进行输入,通过百度后找到一种容易理解的输入方法 ...

  6. ASP.NET Core默认注入方式下如何注入多个实现(多种方式) - sky 胡萝卜星星 - CSDN博客

    原文:ASP.NET Core默认注入方式下如何注入多个实现(多种方式) - sky 胡萝卜星星 - CSDN博客 版权声明:本文为starfd原创文章,转载请标明出处. https://blog.c ...

  7. PythonCookbook读书笔记

    第一章 数据结构和算法 1.1 将序列分解为单独的变量 适用于元组.列表.字符串等.只要是可迭代的对象,都可以执行分解操作.唯一的要求是变量的总数和结构要与序列相同. 1.2 从任意长度的可迭代对象中 ...

  8. [Unit Testing] Fundamentals of Testing in Javascript

    In this lesson, we’ll get the most fundamental understanding of what an automated test is in JavaScr ...

  9. SolidEdge 工程图中如何绘制中断视图

    右击长条形的视图,点击新增断裂线,然后绘制两个断点   点击完成之后效果如下图所示   如果要修改断裂视图的样式,则选中这个视图,在左键单击,然后点击这个按钮取消显示断裂视图   然后左键单击断裂视图 ...

  10. 自己动手写CPU之第九阶段(4)——载入存储指令实现思路

    将陆续上传新书<自己动手写CPU>,今天是第40篇,我尽量每周四篇,可是近期已经非常久没有实现这个目标了,一直都有事,不好意思哈. 开展晒书评送书活动,在q=%E4%BA%9A%E9%A9 ...