zoukankan      html  css  js  c++  java
  • Java/Android中实现Shell命令

    有时候我们需要实现一个功能。不过这个功能用我们传统的Java代码实现起来会有一些困难,这时我们可以尝试利用Shell命令来实现。你可以按照下面的代码模块来进行你想要实现的Shell命令(注:也不是所有的Shell命令都能用Java代码来实现)。

    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;
    			}
    		}
    	};
    }


  • 相关阅读:
    android高级页面效果集锦
    2018年Android的保活方案效果统计
    程序员如何预估自己的项目开发时间?
    Google开发者大会:你不得不知的Tensorflow小技巧
    练就Java24章真经—你所不知道的工厂方法
    一个完整Java Web项目背后的密码
    怎么捕获和记录SQL Server中发生的死锁
    使用跟踪标志位分析死锁
    通过SQL Server Profiler来监视分析死锁
    SQL Server中的死锁
  • 原文地址:https://www.cnblogs.com/fengju/p/6336132.html
Copyright © 2011-2022 走看看