Skip to content

在Android项目中执行adb Shell命令,通过java代码调用执行,采用MVP架构演示样例

Notifications You must be signed in to change notification settings

binIoter/AdbShellCommand

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 

Repository files navigation

##AdbShellCommand 在Android项目中执行adb Shell命令,通过java代码调用执行,本程序采用MVP架构。 ###Java中执行adb shell命令 本项目中,adb shell命令执行的实现方法主要参考网文(Android Java代码执行adb Shell命令)。 文章中,把执行代码集成在ShellUtils工具类中,执行结果返回CommandResult这个类。ShellUtils与CommandResult这两个类的说明可查看原文
在java中直接调用ShellUtils的静态方法即可,但涉及到输入输出流的操作,最好是在工作线程中调用,否则会阻塞UI界面。

  //执行adb命令,
  //参数中strCommand为adb命令,第一个布尔值为执行该代码是否需要root,第二个布尔值是否需要返回结果
  CommandResult result= ShellUtils.execCommand(strCommand, true, true);

#####Java中执行adb shell命令关键代码

          //权限设置,需要root权限为"su",否则为"sh";
            Process process = Runtime.getRuntime().exec("su");
            //获取输出流
            DataOutputStream dataOutputStream=new DataOutputStream(process.getOutputStream());
            //将命令写入
            dataOutputStream.write(strCommand.getBytes());
            dataOutputStream.writeBytes("\n");
            dataOutputStream.writeBytes("exit\n");
            //提交命令
            dataOutputStream.flush();
            
            //获取执行结果状态码
            result = process.waitFor();
            
            //读取执行信息
            StringBuilder successMsg = new StringBuilder();
            StringBuilder errorMsg = new StringBuilder();
            BufferedReader successResult = new BufferedReader(new InputStreamReader(process.getInputStream()));
            BufferedReader errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream()));
            String s;
            while ((s = successResult.readLine()) != null) {
                    successMsg.append(s);
            }
           while ((s = errorResult.readLine()) != null) {
                    errorMsg.append(s);
           }
           
            //关闭流操作
            dataOutputStream.close();
            successResult.close();
            errorResult.close();
 

###MVP架构说明 程序的架构参照了这个项目,androidmvp。 本程序中,分为四个模块:
(1)service模块:提供IMainService接口,业务处理,判断输入命令是否为空,执行adb命令以及返回执行结果(通过IOnRunCommandFinshListener接口返回执行结果,接口在调用时提供)。在presenter模块调用
(2)util模块:包含ShellUtils工具类,adb命令操作集成在这个类中。在service层调用ShellUtils这个类的静态函数执行adb命令。
(3)view模块:提供view操作接口,IMainView,接口的方法有:显示进度框,隐藏进度款,显示错误提示,显示执行命令结果。通过presenter模块调用,并在MainActivity中实现该接口,直接操作UI。
(4)presenter模块:实现两个功能,1)调用service层处理业务;2)根据service层的处理结果,调用view操作接口,执行UI更新。该类实现两个接口,一个是IMainPresenter接口,功能是调用service层处理业务,在MainActivity中调用;2)是实现IOnRunCommandFinshListener,service层处理业务后会调用这个接口,而这个接口会继续调用view操作接口更新UI
#####具体的类图的如下:
UML类图

About

在Android项目中执行adb Shell命令,通过java代码调用执行,采用MVP架构演示样例

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%