如何在没有root权限的情况下运行Android系统应用?

时间:2012-09-27 06:20:16

标签: android shell adb

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

  

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

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

2 个答案:

答案 0 :(得分:7)

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

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

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

android.permission.WRITE_EXTERNAL_STORAGE

但是为什么你不使用Android API制作截图?有关更多信息,请阅读stackoverflow上的这篇文章:How to programmatically take a screenshot in Android?

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

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

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

结论:没有很好的方法可以在没有代码根的情况下截取屏幕截图...

答案 1 :(得分:2)

  

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

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

  

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

     

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

我想,不。

adb shell 用户应用具有基于用户和组ID(UID和GID)的不同安全级别。

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

此外, app权限 hiden&内部类,程序等供内部使用。

P.S。:关于截图。在Android市场(谷歌播放)上,很少有应用程序提供没有ROOT访问权限的屏幕截图。 所以,这是可能的。 虽然,因为Android 4.0截图可以从“盒子”中获得。