使用 run-as 在 ADB shell 中复制文件

2024-01-17

有没有办法编写一个脚本,使用 run-as 从 ADB shell 复制文件?

我知道在 adb shell 中复制的唯一方法是使用cat source > dest(编辑:现代 Android 版本有cp命令,这使得这个问题变得不必要),但我只能引用一层深的大于号 - 所以我的脚本可以将它传递给 adb shell,但不能传递给 adb shell run-as。

例如,这有效:

adb shell "cat source > dest"

但这并不:

adb shell run-as "cat source > dest"

也不是这个:

adb shell "run-as cat source \> dest"

我什至尝试创建一个小脚本并将其上传到设备,但我似乎无法从 adb shell 运行该脚本 - 它告诉我“权限被拒绝”。我也无法 chmod 脚本。

我想这样做的原因是将文件复制到应用程序的私有存储区域 - 具体来说,我使用脚本来修改共享首选项并将修改后的首选项放回原处。但是,只有应用程序本身或根目录可以写入我想要的文件。

此场景中的用例是将文件复制到设备上的受保护位置,而不是检索它;为了检索,已经有很好的答案这个问题 https://stackoverflow.com/questions/18471780/android-adb-retrieve-database-using-run-as.


OP 尝试将以下 3 个命令(他在交互式 shell 会话中依次执行没有问题)组合成一个非交互式命令:

adb shell
run-as com.example.app
cat /sdcard/temp_prefs.xml > shared_prefs/com.example.app_preferences.xml

为了简单起见,让我们从交互式内部开始adb shell会议。如果我们只是尝试将最后两个命令合并到一行中:

run-as com.example.app cat /sdcard/temp_prefs.xml > shared_prefs/com.example.app_preferences.xml

由于 shell 重定向的工作方式,这将不起作用 - 只有cat /sdcard/temp_prefs.xml部分命令将运行com.example.app UID

很多人"know"将命令中有关重定向的部分放入引号中:

run-as com.example.app "cat /sdcard/temp_prefs.xml > shared_prefs/com.example.app_preferences.xml"

这不起作用,因为run-as命令不够智能,无法解析整个命令。它期望一个可执行文件作为下一个参数。正确的方法是使用sh反而:

run-as com.example.app sh -c "cat /sdcard/temp_prefs.xml > shared_prefs/com.example.app_preferences.xml"

那么我们可以在前面加上adb shell听从命令并完成它?不必要。通过从您的 PC 运行该命令,您还可以添加另一个本地 shell 及其解析器。具体转义要求取决于您的操作系统。在 Linux 或 OSX 中(如果您的命令尚未包含任何')很容易单引号整个命令,如下所示:

adb shell 'run-as com.example.app sh -c "cat /sdcard/temp_prefs.xml > shared_prefs/com.example.app_preferences.xml"'

但有时使用带有(-out或更少)引号的替代解决方案更容易:

adb shell run-as com.example.app cp /sdcard/temp_prefs.xml shared_prefs/com.example.app_preferences.xml

或者如果您的设备没有cp命令:

adb shell run-as com.example.app dd if=/sdcard/temp_prefs.xml of=shared_prefs/com.example.app_preferences.xml

另请注意我是如何使用的shared_prefs/com.example.app_preferences.xml而不是完整的/data/data/com.example.app/shared_prefs/com.example.app_preferences.xml- 通常在里面run-as命令你当前的目录是HOME你的包的目录。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 run-as 在 ADB shell 中复制文件 的相关文章

  • Android RecyclerView 空白

    我有一个 android 项目 我正在使用 Recycler 视图打印包含项目的列表 每个项目只有一个图像 并且在这些图像之间 android 正在创建一个很大的空白空间 我研究并看到即将将布局更改为wrap content 我更改了回收器
  • Android:订阅 Firebase 云消息传递 (FCM) 主题

    根据Firebase 云消息传递文档 https firebase google com docs cloud messaging android send multiple 为了订阅用户的主题 我需要调用 FirebaseMessagin
  • RecyclerView 滚动不适用于 NestedScrollView

    我有一个布局 其中有一个 NestedScrollView 其中包含一个图像 多个按钮和一个 RecycleView 当我说recyclerView smoothScrollToPosition or recyclerView scroll
  • 如何在 Android 中恢复我的音频?

    我必须实现用于创建具有暂停和恢复状态的音频的应用程序 当我的应用程序作为启动时音频启动 当我按下模拟器上的后退按钮时 音频音乐处于暂停状态 但是当我的活动回来时从停止状态到前台我的音频音乐未恢复 这是我的代码 public class Au
  • 如何删除带有操作栏、视图页面和多个片段的选项卡?

    我正在使用我找到的代码here https stackoverflow com questions 10082163 actionbarsherlock tabs multi fragments public class ActionBar
  • Android - 打开 FB 本机应用程序时未找到处理 Intent 的 Activity

    我正在尝试从通知中收到的网址打开特定帖子上的 FB 应用程序 它在大多数设备上都能完美运行 但在三星 S7 上大多会崩溃 我的简单代码 String url fb post
  • 没有这样的属性:类的variantConfiguration:

    升级 gradle 4 0 0 应用程序构建失败后 出现错误消息 没有这样的属性 类的variantConfiguration com android build gradle internal variant ApplicationVar
  • 未定义的参考错误 - rand

    我正在创建一个命令行 C 测试应用程序 可执行 以便在我的 root Android 设备上运行 该可执行文件使用多个预构建的 C 库 其中之一使用 rand 在链接状态期间我收到错误 rand 的未定义引用 为了检查路径是否设置正确 我尝
  • Android Studio 找不到 com.android.support:support-v4:19.1.0

    我已将一个项目导入Android Studio但我收到错误 找不到 com android support support v4 19 1 0 我在哪里可以找到这个文件 我已经使用导入了项目Gradle 我有Android Studio v
  • 大型 XML 的 XML 节点到字符串转换

    到目前为止我一直在使用DOM源在我的 Android 应用程序中将 XML 文件转换为字符串 这是我的代码 public String convertElementToString Node element throws Transform
  • 如何在Android中使用资源

    一个人如何使用资产 我有这个代码 AssetManager assets getAssets InputStream stream assets open test txt 看起来它只能在 Activity 类中使 用 如果我尝试在另一个类
  • Android - 框架布局高度与协调器布局不匹配

    我的 FrameLayout 抽屉布局中的容器 有问题 FrameLayout的高度超过了屏幕高度 在底部的android默认菜单按钮下方
  • 在React Native中在Android真实设备上运行应用程序时console.log输出在哪里

    我目前正在做一个项目 在那个项目中 我正在打印控制台日志但没有消息在任何地方打印 我在用npm 和 React native cli在真正的 Android 设备上运行 Thanks 如果您使用模拟器 可以按 Cmd M Android 或
  • 如何使用 bash 中提供的工具生成一系列非周末日期?

    我想生成一个文件列表 其中名称包含 filename date 例如file 20111101 file 20120703 开始November 1 2011直到今天 应该不包括周末 Thanks 2011年试试这个 for y in 20
  • Flutter 图像选择器明确请求许可

    图像选择器包说 无需配置 该插件应该开箱即用 不再需要添加 android requestLegacyExternalStorage true 作为属性 AndroidManifest xml 中的标记 如 image picker 所示
  • Android facebook api,获取不同尺寸的头像

    我正在使用相对较新的 Facebook 图形 api 我正在获取使用该应用程序的朋友列表及其个人资料照片 我不知道如何修改我发送的参数 以便返回的图片很大 当前返回的默认值很小 我正在使用 newMyFriendsRequest 我发送的参
  • Android 以编程方式停止 toast 通知?

    有没有办法以编程方式停止 Toast 消息 假设我有一个按钮 单击它可以滚动 toast 消息 并且在 onclick 事件中我想停止队列中的所有消息并只显示新消息 我该怎么做 我的代码的简化版本如下 代码 public class Hel
  • Android 数据绑定:可以绑定 HashMap 中的值

    我将对象的字段 字符串 整数等 绑定到布局文件 例如
  • Android 多点触控

    因此 我尝试使用 onTouchEvent 检查多个屏幕触摸 但它似乎仍然只读取第一次触摸 有人可以帮忙吗 这是我的代码 public boolean onTouchEvent MotionEvent e int num e getPoin
  • 收到 GCM 通知时启动应用程序

    我有 GCM 通知实施 我知道客户端应用程序无论处于前台 后台还是终止状态都会收到通知 我想知道的是 当应用程序处于终止状态时 如何在收到通知时启动我的应用程序 在消息接收器中 我执行以下操作 final Intent notificati

随机推荐

  • 在 html 输入日期时间本地选择器中禁用前一天的前一个时间

    我正在尝试找出解决方案来解决不允许用户选择上次的问题 我的意思是例如 今天的日期 17 02 2019当前时间 02 30 PM 因此 当用户选择今天的日期并选择时间 02 30 AM 而不是 PM 时 这里时间已经过去 因此不应允许用户选
  • 通过挂钩直接将击键发送到另一个进程

    我想知道 在摆弄了 SendInput SendKeys PostMessage SendMessage SendNotifyMessage keybd event 等各种问题之后 为了找到这一点 尝试将键盘输入发送到另一个非前台进程是非常
  • Django:对象和 model_set

    我正在学习 django 1 10 官方教程第 2 部分 class Question models Model class Choice models Model question models ForeignKey Question o
  • 将 swift 中的嵌套数组转换为一维数组

    我有一个像 我想转换成 E g Hi into Hi 我怎样才能在斯威夫特做到这一点 joined https developer apple com reference swift collection 2432330 joined返回串
  • 阿瓦杰·伊比恩. ManyToMany 延迟 BeanSet

    我正在编写小型应用程序 使用 Play Framework 2 0 它使用 Ebean 作为 ORM 所以我需要 User 类和 UserGroup 类之间的多对多关系 这是一些代码 Entity public class User ext
  • 如何在免安装应用中包含即时动态功能模块?

    我有一个包含这些模块的项目 app bookingfeature 即时启用 map 不是即时的 app包含一些通用代码和资源以及一个启动活动 其中包含一些逻辑 根据应用程序是否即时运行将应用程序路由到正确的目的地 bookingfeatur
  • 插入错误,“2”附近的语法不正确[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我试图将信息添加到表中 但它出现了错误的语法 这是我的插入语句 INSERT INTO Exercise 2 Exercise C
  • Windows Chrome + 黑十字

    我想知道在 Windows 上用 Chrome 运行一个非常简单的网站时是否有人对这个奇怪的问题有任何见解 我基本上将 5 个 div 堆叠在一起 如果窗口调整大小 我也会调整它们的大小 div div div div div div di
  • 在 Mongodb 上使用文本索引时出错

    我正在尝试在 Mongodb 上使用文本索引 我已经在一个集合上使用了文本索引 db ensureIndex field1 text 它有效 但我重试了另一个集合 并收到以下消息 db movies ensureIndex genres t
  • 为什么javac要创建一个额外的类? [复制]

    这个问题在这里已经有答案了 我编译了以下代码 为简洁起见 省略了方法和变量 Outer java public class Outer private class Inner void someMethod Inner inObj this
  • Node.js中的Ajax文件上传

    想要使用 ajax 上传文件 使用此上传器http valums com ajax upload http valums com ajax upload 并在 node js 中编写此代码 该代码可以在没有 ajax 的情况下处理正常文件上
  • 将日期代码添加到 matplotlib/python 图表

    我有一个听起来很简单的问题 但它让我发疯了好几天 我有一个历史时间序列 分为两个列表 第一个列表包含价格 假设 P 1 1 5 1 3 而第二个列表包含相关日期 假设 D 01 01 2010 02 01 2010 我想做的是绘制其中一些日
  • 如何通过索引获取字符串中的字符?

    我知道我可以使用以下命令返回字符串的特定字符的索引indexof 函数 但如何返回特定索引处的字符 string s hello char c s 1 now c e 也可以看看Substring 返回多个字符
  • Chrome:用于测试目的的假麦克风输入

    为了使用量角器进行测试 我需要在没有麦克风的计算机上模拟麦克风的音频输入 通过 use fake device for media stream 标志 Chrome 可以模拟假麦克风 然而 假麦克风没有输入 所以我的测试失败了 是否可以模拟
  • 从 MediaWiki 操作 URL 中删除 index.php

    好的 所以它相当有据可查 https stackoverflow com questions 6667847 mediawiki removing index php from url如何隐藏 url 中的 index php title
  • mysql 如果表存在则插入

    在我的项目中 我有两个在首次设置期间与 MySQL 交互的代码路径 第一步是数据库结构创建 在这里 用户可以选择他们想要的功能 并且根据用户的选择 某些表可能最终不会在数据库中创建 在第二部分中 我需要预加载以下表格did使用一些基本数据创
  • 即使用户重新安装后也限制 iOS 应用程序

    我创建了一个应用程序 在第一次启动时为用户提供 3 个硬币 一旦用户用完 3 个硬币 他应该通过应用内购买购买无限的硬币 问题是 如果用户不想购买无限的硬币 他可以删除该应用程序 重新安装该应用程序 然后他将再次拥有 3 个硬币 他可以永远
  • Unity - 重构的摇摇欲坠的墙脚本停止工作?

    我有一个对象 它立即被数千个小立方体取代 然后在初始化后开始一个接一个地移动 我有有效的代码 但是当我尝试重构它以清理它时 它停止工作 立方体不动 当我尝试将变量初始化和运动初始化分开时 就会发生这种情况 这是我原来的代码段 它可以工作 p
  • 查找给定数字之后的质数

    如何找到大于给定数字的最小素数 例如 给定 4 我需要 5 给定 7 个 我需要 11 个 我想知道一些关于最佳算法的想法 我想到的一种方法是通过埃拉托色尼筛生成素数 然后找到给定数后面的素数 Source 维基百科 伯特兰公设 http
  • 使用 run-as 在 ADB shell 中复制文件

    有没有办法编写一个脚本 使用 run as 从 ADB shell 复制文件 我知道在 adb shell 中复制的唯一方法是使用cat source gt dest 编辑 现代 Android 版本有cp命令 这使得这个问题变得不必要 但