Home » Android » Is it possible to execute adb commands through my android app?

Is it possible to execute adb commands through my android app?

Posted by: admin April 23, 2020 Leave a comment

Questions:

Can anyone say, whether adb commands can be executed through my android application. If it is possible to execute, how it can be implemented?

How to&Answers:

You can do it with this:

Process process = Runtime.getRuntime().exec("your command");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));

Don’t forget to surround it with a try and catch statement.

Edit:

@Phix is right, ProcessBuilder would be better to use.

Answer:

Normal Android apps have different privileges to processes started via adb, e.g., processes started via adb are allowed to the capture the screen whereas normal apps aren’t. So, you can execute commands from your app via Runtime.getRuntime().exec(), but they won’t have the same privileges as if you had executed from an adb shell.

Answer:

i came across this post looking for a different query, but i have worked specifically with input on android before, so I’d just like to put some clarity on the matter.

The reason why

Runtime.getRuntime().exec("adb shell input keyevent 120");    

Is not working, is because you are not removing

adb shell   

The ADB part is only for use on your computer, if you have incorrectly installed ADB, the command would actually be a path to the adb.exe file on your computer, like this

C:\XXXX\ADB Files\adb.exe shell    

or
C:\XXXX\ADB Files\adb shell

The shell part tells the ADB program on your computer to access the devices shell, so your device will not know what shell is either…

Using sh /path/to/commandList.sh will execute the commads listed in commandList.sh as it is a shell script (a .batch file on windows is similar )

The command you want to use is

Runtime.getRuntime().exec("input keyevent 120");     

However this will cause Environment null and working directory null, you can bypass this by writing the commands to a shell script ( .sh file ) and then running the script with

Runtime.getRuntime().exec("sh path/to/shellScript.sh");   

Sometimes the sh is not needed, but i use it just incase.

I hope this clears at least something up 🙂

Answer:

adb shell invoked in Runtime.getRuntime().exec is not running under shell user. It provide shell but with same process owner user (like u0_a44). That’s the reason all command did not work.

Answer:

Executing

Runtime.getRuntime().exec("adb shell input keyevent 120");    

I got the following error:
java.io.IOException: Cannot run program “adb”: error=13, Permission denied.

Executing

Runtime.getRuntime().exec("adb shell input keyevent 120");    

There is no error but at the same time, my request is not processed to take the screenshot.

I found out this was working in earlier versions of android but later it was removed. Though I’m not able to provide the source here why it is not working.

Hope this helps someone like me who is trying to use this approach to take the screenshot when the app is not in the foreground.