网友通过本文主要向大家介绍了android 命令行,android 命令行打包,android命令行工具,android studio命令行,android 签名 命令行等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
Android 在Android代码中执行命令行,android命令行
1.路径最好不要是自己拼写的路径/mnt/shell/emulated/0/wifidog.conf
最好是通过方法获取的路径,不然可能导致命令无效 (挂载点的原因)
public static final String SDCARD_ROOT=Environment.getExternalStorageDirectory().getAbsolutePath();
public static final String AAA_PATH=SDCARD_ROOT+"/wifidog.conf";
Android 命令行执行工具类
package com.example.videotest.utils; import android.os.Environment; import android.util.Log; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; import static java.lang.Runtime.getRuntime; /** * 执行命令的类 * Created by Kappa */ public class ExeCommand { //shell进程 private Process process; //对应进程的3个流 private BufferedReader successResult; private BufferedReader errorResult; private DataOutputStream os; //是否同步,true:run会一直阻塞至完成或超时。false:run会立刻返回 private boolean bSynchronous; //表示shell进程是否还在运行 private boolean bRunning = false; //同步锁 ReadWriteLock lock = new ReentrantReadWriteLock(); //保存执行结果 private StringBuffer result = new StringBuffer(); /** * 构造函数 * * @param synchronous true:同步,false:异步 */ public ExeCommand(boolean synchronous) { bSynchronous = synchronous; } /** * 默认构造函数,默认是同步执行 */ public ExeCommand() { bSynchronous = true; } /** * 还没开始执行,和已经执行完成 这两种情况都返回false * * @return 是否正在执行 */ public boolean isRunning() { return bRunning; } /** * @return 返回执行结果 */ public String getResult() { Lock readLock = lock.readLock(); readLock.lock(); try { Log.i("auto", "getResult"); return new String(result); } finally { readLock.unlock(); } } /** * 执行命令 * * @param command eg: cat /sdcard/test.txt * 路径最好不要是自己拼写的路径,最好是通过方法获取的路径 * example:Environment.getExternalStorageDirectory() * @param maxTime 最大等待时间 (ms) * @return this */ public ExeCommand run(String command, final int maxTime) { Log.i("auto", "run command:" + command + ",maxtime:" + maxTime); if (command == null || command.length() == 0) { return this; } try { process = getRuntime().exec("sh");//看情况可能是su } catch (Exception e) { return this; } bRunning = true; successResult = new BufferedReader(new InputStreamReader(process.getInputStream())); errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream())); os = new DataOutputStream(process.getOutputStream()); try { //向sh写入要执行的命令 os.write(command.getBytes()); os.writeBytes("\n"); os.flush(); os.writeBytes("exit\n"); os.flush(); os.close(); //如果等待时间设置为非正,就不开启超时关闭功能 if (maxTime > 0) { //超时就关闭进程 new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(maxTime); } catch (Exception e) { } try { int ret = process.exitValue(); Log.i("auto", "exitValue Stream over"+ret); } catch (IllegalThreadStateException e) { Log.i("auto", "take maxTime,forced to destroy process"); process.destroy(); } } }).start(); } //开一个线程来处理input流 final Thread t1 = new Thread(new Runnable() { @Override public void run() { String line; Lock writeLock = lock.writeLock(); try { while ((line = successResult.readLine()) != null) { line += "\n"; writeLock.lock(); result.append(line); writeLock.unlock(); } } catch (Exception e) { Log.i("auto", "read InputStream exception:" + e.toString()); } finally { try { successResult.close(); Log.i("auto", "read InputStream over"); } catch (Exception e) { Log.i(<