1 /*
2  * Copyright (C) 2012 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5  * use this file except in compliance with the License. You may obtain a copy of
6  * the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13  * License for the specific language governing permissions and limitations under
14  * the License.
15  */
16 #include <stdlib.h>
17 
18 #include <StringUtil.h>
19 #include "Adb.h"
20 
Adb(const android::String8 & device)21 Adb::Adb(const android::String8& device)
22     : mDevice(device)
23 {
24 
25 }
26 
~Adb()27 Adb::~Adb()
28 {
29 
30 }
31 
setPortForwarding(int hostPort,int devicePort)32 bool Adb::setPortForwarding(int hostPort, int devicePort)
33 {
34     android::String8 command;
35     if (command.appendFormat("forward tcp:%d tcp:%d", hostPort, devicePort) != 0) {
36         return false;
37     }
38     if (executeCommand(command) != 0) {
39         return false;
40     }
41     return true;
42 }
43 
launchClient(const android::String8 & clientBinary,const android::String8 & component)44 bool Adb::launchClient(const android::String8& clientBinary, const android::String8& component)
45 {
46     android::String8 command;
47     if (command.appendFormat("install -r %s", clientBinary.string()) != 0) {
48         return false;
49     }
50     if (executeCommand(command) != 0) {
51         return false;
52     }
53     command.clear();
54     if (command.appendFormat("shell am start -W -n %s", component.string()) != 0) {
55         return false;
56     }
57     if (executeCommand(command) != 0) {
58         return false;
59     }
60     return true;
61 }
62 
63 /** @param command ADB command except adb -s XYZW */
executeCommand(const android::String8 & command)64 int Adb::executeCommand(const android::String8& command)
65 {
66     android::String8 adbCommand;
67     if (mDevice.empty()) {
68         if (adbCommand.appendFormat("adb %s", command.string()) != 0) {
69             return -1;
70         }
71     } else {
72         if (adbCommand.appendFormat("adb -s %s %s", mDevice.string(),
73                 command.string()) != 0) {
74             return -1;
75         }
76     }
77     return system(adbCommand.string());
78 }
79 
80