1025 未満のポートでソケットを開くには、ルート アクセスが必要です。アプリケーションにこの権限を付与するにはどうすればよいですか? root アクセスを取得するためにシェルで su コマンドを実行できることは知っていますが、1025 未満のポートでソケットを開くために必要なことはそれだけですか? または、 su open socket 0.0.0.0:80 などのコマンドを実行する必要がありますか? これにはリソースがほとんどないので、私はとても混乱しています。Google がすべてのデバイスを事前にルート化しない目的は何ですか?
ルートアクセスを取得するために私ができることは次のとおりです。http://www.youtube.com/watch?v=jmfvX8zvsS0&list=UUk1SpWNzOs4MYmr0uICEntg&index=4&feature=plcp
編集:私はこれを書いた:
public class RootTestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button = (Button)findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String cmds[] = {"su", "-c", "ls /system/app"};
Shell shell = new Shell();
String text = shell.sendShellCommand(cmds);
TextView textView = (TextView)findViewById(R.id.textView);
textView.setText(text);
try {
ServerSocket socket = new ServerSocket(80);
Log.d("Root", "Opened socket on port 80!!!");
}catch(Exception e) {
Log.d("Root", "Failed to open socket on port 80!!!");
e.printStackTrace();
}
}
});
}
}
ボタンがクリックされると、コマンド su、-c、そして ls /system/app が実行されます。次に、出力を取得してテキストビューに表示します(これは実際に機能します。suプロンプトを取得してacceptを選択すると、/ system/apps /にすべてがリストされました)。しかしその後、ポート 80 でソケットを開こうとすると、依然としてアクセス許可が拒否されたと表示されます。アプリケーションは root アクセス権を持っていますが、まだソケットを開くことができません! logcat では、「ポート 80 でソケットを開くことができませんでした!!!」と出力されました。例外がキャッチされたときに行うように言ったように。許可を拒否せずにポート 80 でソケットを開くにはどうすればよいですか?