Android recovery支持adb shell
Android recovery支持adb shell
近期开发过程注意到recovery不支持adb shell。为了便于调试方便,决定添加此功能。
刚開始我们採用的是user版本号系统,进入recovery后,输入adb shell命令。提示“error: no devices/emulators found”。我们先确认recovery.img是否包括有adb,看out\debug\target\product\xxx\recovery\root\sbin是否有adb文件(源码\system\core\adb),然后检查\bootable\recovery\etc\init.rc下关于adbd
service adbd /sbin/adbd--root_seclabel=u:r:su:s0 --device_banner=recovery
disabled
socket adbd stream 660 system system
seclabel u:r:adbd:s0 # Always start adbd on userdebug and engbuilds
on property:ro.debuggable=1
write /sys/class/android_usb/android0/enable 1
start adbd # Restart adbd so it can run as root
on property:service.adb.root=1
write /sys/class/android_usb/android0/enable 0
restart adbd
write/sys/class/android_usb/android0/enable 1
从上面可知init.rc 中adbd 是配置的,disabled 表示开机不启动,如 ro.debuggable 被置为1。那么adb 就会开启,或是service.adb.root设置为1,则重新启动adbd。
ro.debuggable 在\build\core\main.mk以下的内容赋值
ifeq (true,$(strip$(enable_target_debugging)))
#Target is more debuggable and adbd is on by default
ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1
enable_target_debugging 在\build\core\main.mk以下的内容赋值:
## user/userdebug ## user_variant := $(filter useruserdebug,$(TARGET_BUILD_VARIANT))
enable_target_debugging := true
tags_to_install :=
ifneq (,$(user_variant))
#Target is secure in user builds.
ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1 ifeq ($(user_variant),userdebug)
#Pick up some extra useful tools
tags_to_install += debug #Enable Dalvik lock contention logging for userdebug builds.
ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.lockprof.threshold=500
else
#Disable debugging in plain user builds.
enable_target_debugging := #Add for testUsbDebugging()
ADDITIONAL_DEFAULT_PROPERTIES += ro.adb.secure=1
Endif
…
Endif
可知默觉得enable_target_debugging := true,依据user_variant的值假设为user。则enable_target_debugging :=。这又和TARGET_BUILD_VARIANT有关,此变量相应于VARIANT_CHOICES=(user userdebug eng)中的一个值。由我们来选择,相关的实如今\build\envsetup.sh中。
依据上面可知。编译时假设选择userdebug或是eng。则ro.debuggable=1。以下我们选择eng版本号编译recovery.img。进入recovery后,输入adb shell命令。提示:
Exec ‘/system/bin/sh’ failed:No such fileor directory(2)
表示没有sh这个文件。无法进入shell,检查ramdisk 文件系统 system 文件夹为(out\debug\target\product\xxx\recovery\root\system)空。但我们知道boot.img下是能够的,看\system\core\rootdir\init.rc检查boot.img 启动的init.rc 关于sh的
service console /system/bin/sh
class core
console
disabled
user shell
group shell log
seclabel u:r:shell:s0 on property:ro.debuggable=1
start console
可知是启动了sh这控制台的。所以须要在bootable\recovery\etc\init.rc添加相应的内容:
图1
我们知道out\debug\target\product\xxx\recovery\root\system下没有bin文件夹(当然也没有sh),所以须要在编译的时候创建。须要\build\core\Makefile添加创建文件夹和把out文件夹下的/system/bin/sh复制到out/recovery/system/bin文件夹下
图2
但这样还是不行,后来知道recovery可运行文件是静态编译的。之所以这样是由于recovery模式中没有共享库还有缺动态链接库载入器(/system/bin/linker,Android动态连接器linker与静态连接器ld)。
所以\external\mksh\Android.mk
图3
參考链接:
Android recovery.img 支持adb shell
http://blog.csdn.net/chituhuan/article/details/52383655
[IMX6Q][Android5.1]移植笔记 --- Recovery mode的shell功能实现(sh+toolbox)
http://blog.csdn.net/kris_fei/article/details/50921384
Android Recovery 支持 Adb
Android recovery支持adb shell的更多相关文章
- win7 cmd终端连接android手机运行adb shell脚本命令
win7 cmd终端连接android手机运行adb shell脚本命令 (2013-03-22 20:13:57) 转载▼ 标签: android it shell 连接 linux 分类: 嵌入式 ...
- android控制之 adb shell (已完成,不定期增加内容)
第一步:首先,下载adb1.0.32.zip,里面有如下图的内容: 第二步:解压缩,复制Adb.exe,和fastboot.exe到System32,注意AdbWinUsbApi.dll,AdbWin ...
- Android之通过adb shell 模拟器 error: more than one device and emulator 改ip dns
error: more than one device and emulator 如果出现上面那种情况 请关闭 ide 输入下面的 再次重新启动 模拟器 如果实际上只有一个设备或模拟器,并且查到有 ...
- android如何用adb shell启动应用程序
昨天研究了很久,可能由于基础比较菜吧,所以,没有搜到一个可以直接解决问题的,需要综合几个之后,问题得以解决,记下方法,为了方便自己之后遇到同样问题,也为了方便搜索同样问题的朋友. 主要用到了aapt和 ...
- Android 8.0 adb shell dumpsys activity activities | findstr mFocusedActivity 获取当前的 activity 显示空的
adb shell dumpsys activity activities | findstr mFocusedActivity Android 7.0 现象: Android 8.0 现象: 改用: ...
- Android开发——使用ADB Shell命令实现模拟点击(支付宝自动转账实现)
首先声明,本人反对一切利用技术的违法行为 本文的实现代码已经销毁,本文以介绍流程为主 1.这里所说的模拟点击不是在自己的APP里点击,点自己APP上的控件没什么好说的 不仅是支付宝转账,其他的获取别人 ...
- Android 测试 之adb shell
一.发送键盘事件: 命令格式1:adb shell input keyevent "value" 其中value以及对应的key code如下表所列: KeyEvent Value ...
- 我的Android进阶之旅------>Android中通过adb shell input来模拟滑动、按键、点击事件
今天在维护公司的一个小项目的时候,发现按公司手机的某个物理按键,激活相应的Service后,会在屏幕上模拟的点击了屏幕的某个坐标点.好家伙,原来是之前该项目的版本是按这个物理按键后,会弹出一个对话框, ...
- [Android]Recovery调用外部Shell脚本,Shell脚本使用ui_print方法
busybox_bin=/sbin/busybox # 获取PIPE get_outfd(){ | $busybox_bin grep -q 'pipe'; then else local all_p ...
随机推荐
- Java设计模式从精通到入门五 抽象工厂方法模式
定义 抽象工厂类为创建一组相关和相互依赖的对象提供一组接口,而无需指定一个具体的类. 这里我得把工厂方法模式得定义拿出来做一下比较:定义一个创建对象的接口,由子类决定实例化哪一个类.工厂方法是一个 ...
- C#Workbooks 对象的 Open 方法参数说明
打开一个工作簿. excelApp.Open(FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword,IgnoreRea ...
- XamarinSQLite教程添加列
XamarinSQLite教程添加列 如果开发者想要在现有的表中添加列,并不需要删除重新创建数据表,只需要修改数据表.操作步骤如下. (1)右击需要添加列的表,单击Add column…(beta)命 ...
- Xamarin Essentials教程剪贴板Clipboard
Xamarin Essentials教程剪贴板Clipboard 现在手机设备操作以触屏为主,不便于文本输入.虽然可以通过复制/粘贴的方式,借助系统剪贴板简化操作,但仍然不够方便.如果通过代码操作 ...
- Xamarin SQLite教程数据库访问与生成
Xamarin SQLite教程数据库访问与生成 在本教程中,我们将讲解如何开发SQLite相关的App.在编写程序前,首先需要做一些准备工作,如了解Xamarin数据库访问方式,添加引用,构建使用库 ...
- Android图片缓存框架Glide
Android图片缓存框架Glide Glide是Google提供的一个组件.它具有获取.解码和展示视频剧照.图片.动画等功能.它提供了灵活的API,帮助开发者将Glide应用在几乎任何网络协议栈中. ...
- H5与Native交互之JSBridge技术
一.原理篇 下面分别介绍IOS和Android与Javascript的底层交互原理 IOS 在讲解原理之前,首先来了解下iOS的UIWebView组件,先来看一下苹果官方的介绍: You can us ...
- input输入框限制20个字符,十个汉字
英文和数字为一个字符,汉字为两个字符 在 Web 开发中,经常要对表单元素的输入进行限制,比如说不允许输入特殊字符,标点.通常我们会监听 input 事件: inputElement.addEvent ...
- CC2431 代码分析④-衣锦还乡的CC2431
我们在第二节就分析到了 finishCollection( void ),但是当我们分析完第三节后,整个系统才真正执行到这里,我们依然像第二节一样把这个函数全部贴出来 /*************** ...
- MySQL之ORDER BY 详细解析
1 概述 MySQL有两种方式可以实现ORDER BY: 1.通过索引扫描生成有序的结果 2.使用文件排序(filesort) 围绕着这两种排序方式,我们试着理解一下ORDER BY的执行过程以及回答 ...