자바 / android 에서 셸 명령 구현

3048 단어
때때로 우 리 는 하나의 기능 을 실현 해 야 한다.그러나 이 기능 은 우리 의 전통 적 인 자바 코드 로 실현 하 는 데 어려움 이 있 을 것 이다. 이때 우 리 는 Shell 명령 을 이용 하여 실현 하려 고 시도 할 수 있다.다음 코드 모듈 에 따라 원 하 는 셸 명령 을 진행 할 수 있 습 니 다.
public class MainActivity extends Activity {

	private final String TAG = "---MainActivity---";
	
	public final String SHELL_0 = "busybox ps";
	public final String SHELL_1 = "su";
	public final String SHELL_2 = "cd mnt/shell/emulated/0/.ZFSafeFS";
	public final String SHELL_3 = "busybox mount .a1.img ./.abc";
	public final String SHELL_4 = "busybox umount ./.abc";
	
	public final String EXECUTE_SHELL = SHELL_0;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		Button sendButton = (Button) findViewById(R.id.send_btn);
		Button suButton = (Button) findViewById(R.id.su_button);
		Button cdButton = (Button) findViewById(R.id.alert_path_button);
		Button mountButton = (Button) findViewById(R.id.mount_button);
		Button umountButton = (Button) findViewById(R.id.umount_button);
		
		suButton.setText(SHELL_1);
		cdButton.setText(SHELL_2);
		mountButton.setText(SHELL_3);
		umountButton.setText(SHELL_4);
		
		sendButton.setOnClickListener(viewOnClickListener);
		suButton.setOnClickListener(viewOnClickListener);
		cdButton.setOnClickListener(viewOnClickListener);
		mountButton.setOnClickListener(viewOnClickListener);
		umountButton.setOnClickListener(viewOnClickListener);
		
		handleShell(EXECUTE_SHELL);
	}

	private void handleShell(String shell) {
		TextView textView = (TextView) findViewById(R.id.textview);
		Process p = null;
		try {
			p = Runtime.getRuntime().exec(shell);
			if (p == null) {
				textView.setText("p == null");
			} else {
				BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(p.getInputStream()));
		        int read = 0;
		        char[] buffer = new char[4096];
		        StringBuffer output = new StringBuffer();
		        Log.i(TAG, "read = " + read);
		        Log.i(TAG, "output = " + output);
		        while((read = bufferedReader.read(buffer)) > 0) {
		            output.append(buffer, 0, read);
		        }
		        bufferedReader.close();
		        String string = String.copyValueOf(buffer);
		        Log.i(TAG, "string = " + string);
		        textView.setText("result:
" + string); } } catch (IOException e) { textView.setText("e=" + e); e.printStackTrace(); } } private OnClickListener viewOnClickListener = new OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.su_button: handleShell(SHELL_1); break; case R.id.alert_path_button: handleShell(SHELL_2); break; case R.id.mount_button: handleShell(SHELL_3); break; case R.id.umount_button: handleShell(SHELL_4); break; default: break; } } }; }

다음으로 전송:https://www.cnblogs.com/fengju/p/6336132.html

좋은 웹페이지 즐겨찾기