ルート権限なしでAndroidシステムアプリを実行する方法はありますか?次のようなadbを介してシステムアプリを実行できます。
adb shell /system/bin/screencap -p /sdcard/screen.png
私自身のアプリケーションでは、「su」コマンドなしでそのようなシェルコマンドを実行したいと思います。方法はありますか?Androidはどのようにしてユーザーアプリがシステムアプリを実行するのを防ぎますか?
このコマンドを Java コードで実行できるはずです。
Runtime.getRuntime().exec("screencap -p /sdcard/screen.png");
root がなくても実行できるシェル コマンドがいくつかあります。したがって、「su」を実行する必要はありません。screencap を実行できるかどうかわかりません。確かに、アプリで SD_CARD に書き込む権限が必要です。
android.permission.WRITE_EXTERNAL_STORAGE
しかし、なぜ Android API を使用してスクリーンショットを作成しないのでしょうか? 詳細については、stackoverflow に関するこの投稿を参照してください: Android でプログラムによってスクリーンショットを撮るには?
Android のセキュリティ モデルは、Linux と同様にユーザー ID に基づいています。各アプリは独自のユーザー ID を取得します。したがって、アプリには 1001 のようなユーザー ID があります。ユーザーがコマンドの実行を許可されている場合は実行できますが、許可されていない場合はエラーが発生します。
編集:
スクリーンショットを撮ったり、システムアプリケーションになるにはルートが必要です。パーミッション READ_FRAME_BUFFER がありますが、システム アプリケーションの場合にのみ取得できます。アプリがデバイスのスクリーンショットを撮ることができる場合、セキュリティ上の問題があります。
ルートなしでスクリーンショットを撮ることを約束するこの API http://code.google.com/p/android-screenshot-library/を見つけました。私はそれをテストしませんでした。ライブラリは、スクリーンショットを取得するネイティブ サービスを開始します。ただし、電話が起動するたびにサービスを実行する必要があります。したがって、システム権限を取得します。それはとても快適ではありません...
結論:コードからルートなしでスクリーンショットを撮る良い方法はありません...
root権限なしでAndroidシステムアプリを実行する方法はありますか?
NOである必要がありますが、公開されていない機能が使用できる場合もあります。Java リフレクションを使用した例を見てきました。
次のようなadbを介してシステムアプリを実行できます...
私自身のアプリケーションでは、「su」コマンドなしでそのようなシェル コマンドを実行したいと考えています。何か方法はありますか?Androidはユーザーアプリがシステムアプリを実行するのをどのように防ぎますか?
違うと思う。
問題は、adb シェルとユーザー アプリのセキュリティ レベルが、ユーザー ID とグループ ID (UID と GID) に基づいて異なることです。
詳細: http://android-dls.com/wiki/index.php?title=Android_UIDs_and_GIDs
また、アプリのアクセス許可や、内部使用のために作成された秘伝 & 内部クラス、手順などによる制限があります。
PS:スクリーンショットについて。Android マーケット (Google Play) には、ROOT アクセスなしでスクリーンショットを提供するアプリはほとんどありません。だから、それは可能です。 ただし、Android 4.0 以降のスクリーンショットは「箱から」入手できます。