【问题标题】:cannot change file permissions on Android Virtual Device (AVD)无法更改 Android 虚拟设备 (AVD) 上的文件权限
【发布时间】:2020-03-15 10:13:41
【问题描述】:

我无法更改需要在 Android 虚拟设备 (AVD) 上测试的 shell 脚本的权限。 AVD 是 Google Pixel 2 (API 29) - 它是通过 Android Studio 创建的。在 MacBook 上使用 Android SDK 中的 Android Debug Bridge (adb),我做到了:

%adb push file.sh /sdcard/steve

file.sh 脚本在 MacBook 上是可执行的(模式 755),但当它被推送到 AVD 时,模式变为 660(即不再可执行)。那么我就这样做了:

%adb 外壳

这会打开一个模拟器 shell 会话。然后我在 AVD shell 会话中进行如下操作:

%generic_x86: cd /sdcard/steve
%generic_x86: chmod +x file.sh

这不会产生错误消息,实际上根本不会产生任何消息。 file.sh 的权限没有变化。它仍然无法执行。

我需要将文件推送到 AVD 上的其他目录吗?或者是否有其他方法可以让我在将文件推送到 AVD(模拟器)后更改文件权限?

注意:我查看了可以在其中创建文件的 Android Studio“设备文件资源管理器”和 AVD 上的目录,但是,不能更改文件的权限。

TIA 提供任何提示,
史蒂夫

【问题讨论】:

  • 你知道你提到的路径的读写访问被Android Q阻止了吗?我不明白你设法创建了一个目录 /sdcard/steve。
  • 显然不是 - 在“adb shell”之后,
  • 显然它没有被这个 AVD 阻止,Google Pixel 2 - 在“adb shell”之后,我做了 - %generic_x86: cd /sdcard, %generic_x86: mkdir steve,并且创建了目录。然后正如我所说,我能够对 /sdcard/steve 的文件执行“adb push ..”。但是,不能更改此文件的权限。我应该在 AVD 上使用不同的目录吗?
  • 不知道。 Q 下的限制不适用于 getFilesDIr()、getExternalFilesDir() 和 getExternalFilesDirs()。所以你可以在那里尝试。
  • 好的 - 很高兴知道。由于我还没有处于编码阶段,因此很高兴知道您引用的那些程序正在触及哪些目录。

标签: android file permissions virtual device


【解决方案1】:

好的 - 我似乎已经通过我称之为迂回的方式解决了这个问题。如前所述,我可以通过以下方式将文件推送到我的 AVD:
%adb 推送文件.sh /sdcard/steve
问题是我无法更改此文件的权限。我发现命令“run-as (classname)”让我能够执行 chmod。所以顺序是这样的:

%adb push file.sh /sdcard/steve
%generic_x86:run-as com.example.helloworld
%generic_x86:cd /data/data/com.example.helloworld
%generic_x86:mkdir steve
%generic_x86:cd 史蒂夫
%generic_x86:cp /sdcard/steve/file.sh .
%generic_x86:chmod +x file.sh

现在我要去参加比赛了。有趣的是,我可以将文件推送到 AVD 上的一个位置是 /sdcard。感谢您的输入“blackapps”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    相关资源
    最近更新 更多