背景
-
软件:AOSP Android 10 userdebug with sepolicy on;
-
硬件:无需关心;
-
事由:好朋友阿P说需要他的盒子调用su 实现不可告人的目的。
调试过程
代码
使用AndroidStudio 新建一个工程,基本一路默认,修改代码如下:
-
MainActivity.java
package com.nobita.su; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; public class MainActivity extends AppCompatActivity { private static final String TAG = "NOBITA"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override protected void onResume() { super.onResume(); String result = runRootCommand("echo hello"); Log.d(TAG, result); } private String runRootCommand(String command) { try { Process process = Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(process.getOutputStream()); os.writeBytes(command + "\n"); os.writeBytes("exit\n"); os.flush(); process.waitFor(); BufferedReader resultBuffReader = new BufferedReader( new InputStreamReader(process.getInputStream())); BufferedReader errorBuffReader = new BufferedReader(new InputStreamReader( process.getErrorStream())); String line; StringBuilder sb = new StringBuilder(); sb.append("result:\n"); while ((line = resultBuffReader.readLine()) != null) { sb.append(line); sb.append("\n"); } sb.append("error:\n"); while ((line = errorBuffReader.readLine()) != null) { sb.append(line); sb.append("\n"); } return sb.toString(); } catch (Exception e)