Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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

Notifications You must be signed in to change notification settings

ziyuo/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%

AltStyle によって変換されたページ (->オリジナル) /