有没有办法在没有root权限的情况下运行Android系统应用?我可以通过adb执行系统应用程序,例如:
adb shell / system / bin / screencap -p /sdcard/screen.png
在我自己的应用程序中,我想在没有“su”命令的情况下运行这样的shell命令。有什么办法吗? android如何阻止用户应用程序执行系统应用程序?
答案 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截图可以从“盒子”中获得。