7

有没有办法在没有root权限的情况下运行Android系统应用程序?我可以通过 adb 执行系统应用程序,例如:

adb shell /system/bin/screencap -p /sdcard/screen.png

在我自己的应用程序中,我想运行一个没有“su”命令的 shell 命令。有什么办法吗?android如何阻止用户应用程序执行系统应用程序?

4

2 回答 2

8

您应该能够在 java 代码中运行此命令:

Runtime.getRuntime().exec("screencap -p /sdcard/screen.png");

您可以在没有 root 的情况下执行一些 shell 命令。所以你不需要运行“su”。我不确定您是否可以执行屏幕截图。当然,您需要获得写入应用程序中 SD_CARD 的权限。

android.permission.WRITE_EXTERNAL_STORAGE

但是为什么你不使用 Android API 来制作你的截图呢?有关更多信息,请阅读 stackoverflow 上的这篇文章:如何以编程方式在 Android 中截取屏幕截图?

Android 的安全模型基于用户 ID,就像 Linux 一样。每个应用程序都有自己的用户 ID。所以你的应用程序有一个像 1001 这样的用户 ID。如果你的用户被允许运行命令,你可以,否则你会收到一个错误。

编辑:
您需要 root 才能截取屏幕截图或成为系统应用程序。有一个权限 READ_FRAME_BUFFER 但只有当您是系统应用程序时才能获得它。当应用程序可以截取您设备的屏幕截图时,这是一个安全问题。

我发现这个 API http://code.google.com/p/android-screenshot-library/承诺在没有 root 的情况下截取屏幕截图。我没有测试它。该库启动一个本机服务,然后为您截取屏幕截图。但是每次手机启动时,您都必须运行该服务。所以它获得了系统权限。这真的不太舒服……

结论:没有从代码中获取屏幕截图的好方法......

于 2012-09-27T06:57:42.387 回答
2

有没有办法在没有root权限的情况下运行android系统应用程序?

必须是NO,但有些时候,一些非公开使用的功能仍然可以使用。我见过使用 java 反射的例子。

我可以通过adb执行系统应用程序,例如:...

在我自己的应用程序中,我想运行一个没有“su”命令的 shell 命令。有什么办法吗?android如何阻止用户应用程序执行系统应用程序?

我想不是。

问题是adb shell用户应用程序根据用户和组 ID(UID 和 GID)具有不同的安全级别。

更多信息:http ://android-dls.com/wiki/index.php?title=Android_UIDs_and_GIDs

此外,通过应用程序权限隐藏和内部类、过程等存在限制,这些都是供内部使用的。

PS:关于截图。在 android 市场(google play)上,很少有应用程序提供没有 ROOT 访问权限的屏幕截图。所以,这是可能的。 虽然,由于 Android 4.0 屏幕截图可以“从框中”获得。

于 2012-10-03T19:49:50.163 回答