2013-01-14 7 views
6

私はsuバイナリだけがインストールされたAndroid携帯を持っています。つまり、電話にシェルしてsuコマンドを実行すると、私はrootになります。スーパーバイナリまたはスーパーユーザーapkがインストールされていないsuバイナリのみで、シェルコマンドをrootとして実行できますか?

コードでコマンドを実行しようとすると、実行しようとする方法に関係なく動作しないようです。私は、次のコマンドの多くの異なる変形を試みました。 Superuser.apkまたはSuperSU.apkアプリがインストールされて

Runtime.getRuntime().exec("su -c ps"); 

私は別根ざし電話でこのコマンドを実行すると、私はそれがroot権限で実行することを可能にするかどうかを確認するダイアログを取得します。 apkがそこにいないとき、それは決して尋ねることがなく、命令は決して働かない。

私は最初の電話機にAPKをインストールしようとしましたが、何もしないようです。だから、元の質問が尋ねるように - > SUアプリがインストールされていないアプリから昇格コマンドを実行する方法はありますか?

+0

これは、suバイナリがインストールされている* *知らなくても、基本的にunanswerableである - それは株式アンドロイドものであれば、それはどんなの下で、全く*アプリで*使用できません状況。 –

+0

これをチェックアウトしてください:http://stackoverflow.com/questions/17615412/android-write-failed-epipe-broken-pipe-error-on-write-file – benchuk

答えて

6

あなたはこのようなパラメータとしてsuにコマンドを渡す必要があるので、それは次のようになります。
su -c 'ls -l'
それともsuへのフルパスを指定する必要があるかもしれませんが、それは動作しませんなぜ私は表示されませんあなたはそれを持っている方法: Runtime.exec("/system/bin/su -c ps")
それとも
Runtime.exec("/system/bin/su -c \'ps\'")

も、このコマンドの出力をチェックしてみてください。System.getenv("PATH")

別の変形Runtime.exec("su -c \'ls -s \'")
一重引用符が実際のStringの一部であるため、一重引用符をエスケープすることを忘れないでください。

私が見つけた方法は一貫してうまくいっていますし、SuperuserやSuperSUがインストールされていないデバイスでも動作します。アプリケーションがブロードキャストを受信するのは、アプリケーションがルートとしてコマンドを実行します。 @Boardy SuperSUとスーパーユーザはブロードキャストを傍受し、アプリとルート権限の間の中間者として働きますが、根付いたデバイスには必要ありません。 rootとしてコマンドを実行しているアプリケーションをより詳細に制御したい場合でも、どのアプリケーションではなく、どのアプリケーションにroot権限が与えられているかを決めることだけが制限されます。

また、RootTools、具体的にはRootTools.isAccessGiven()コマンドを見てみてください。このコマンドは、あなたのアプリケーションのルート権限を要求します。

出典:Launch a script as root through ADB

+0

私はここに挙げた提案のほとんどを行っています。私はSystem.getenvを試してみて、シングルクオートを試してみてください(これは素晴らしい提案です、私は早く試していないために自分自身を蹴っています!)。私が言うことの1つは、RootToolsを試して、isAccessGiven()を呼び出すとfalseを返しますが、isRootAvailable()を呼び出すとtrueを示すので、一重引用符を追加するほど単純ではありません。唯一の問題は、現時点ではデバイスにアクセスできないため、これをテストするには時間がかかることです。助けてくれてありがとう! – brianestey

+0

問題はありませんが、動作している場合は教えてください – cnexus

1

SUアプリをインストールする必要があると思うので、ユーザーにアプリをrootとして実行するかどうかを質問する必要があります。

+0

これらのアプリの仕組みや使い方をご存知ですか?これは自分のコードから提供できるダイアログですか?私が尋ねる理由は、私は私の携帯電話で両方のアプリを試して、どちらも期待どおりにダイアログをポップアップしていないということです。 – brianestey

+0

@brianestey残念ながら、私は彼らがどのように動作するのか分かりません。しかし、デバイスが適切にルートされている場合、SUまたはSuperSUアプリケーションは、rootとして実行する権限を求めるポップアップが表示されます。あなたは、JellyBean 4.2を使用していますか?Googleはマルチユーザーサポートを提供しています。私は、Googleがこの機能を導入して以来、私がもう使用していないルートアプリのいくつかを気づいた。両方のアプリをインストールした場合、競合が発生する可能性がありますが、確かに分かりません – Boardy

+0

いいえ、これは答えではありません。エフェクトが「常に許可される」ように、リンクされたユーザダイアログアプリケーションなしでシンプルな「su」を持つことは、(危険な場合)完全に可能です。もちろん、そのようなアプリで使用されることを意図した 'su'バイナリは、おそらくそれなしでは動作しません。 –

2

Android向け「秀」のすべてのバージョンは、コマンドラインパラメータから実行するコマンドを受け入れるわけではありません。

そうでない場合は、「su」に特権シェルを起動させ、入力ファイル記述子を取得し、パイプコマンドを入力する必要があります。これは、Stackoverflowで何度もここでカバーされています。

+0

Stackoverflowでそのような例を指摘してください。私は1つの実例を必要としています。 – zeeshan

+0

検索に深刻な努力があれば、それを見つけることができます。しかし、それは今のところ、SELinuxへの切り替え以来、いくつかのAndroidバージョンでは動作しませんでした。これは、カスタムまたはエンジニアリングビルドがない限り、はるかに複雑な回避策が必要です。 –

-2

これを行う必要があります。

試してみてください。

adb root shell ls -l

+1

この回答を拡大できますか?現状では、それは質の高い回答ではなく、下降または削除される危険性があります。 –

関連する問題