1 /* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of 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, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package vogar.android; 18 19 import com.google.common.collect.ImmutableList; 20 import java.io.File; 21 import java.io.FileNotFoundException; 22 import java.util.List; 23 import java.util.regex.Matcher; 24 import java.util.regex.Pattern; 25 import vogar.Run; 26 import vogar.Target; 27 import vogar.commands.Command; 28 29 public final class AdbTarget extends Target { 30 private final Run run; 31 AdbTarget(Run run)32 public AdbTarget(Run run) { 33 this.run = run; 34 } 35 defaultDeviceDir()36 @Override public File defaultDeviceDir() { 37 return new File("/data/local/tmp/vogar"); 38 } 39 targetProcessPrefix()40 @Override public List<String> targetProcessPrefix() { 41 return ImmutableList.of("adb", "shell"); 42 } 43 44 // TODO: pull the methods from androidsdk into here 45 await(File directory)46 @Override public void await(File directory) { 47 run.androidSdk.waitForDevice(); 48 run.androidSdk.ensureDirectory(directory); 49 run.androidSdk.remount(); 50 } 51 ls(File directory)52 @Override public List<File> ls(File directory) throws FileNotFoundException { 53 return run.androidSdk.deviceFilesystem.ls(directory); 54 } 55 getDeviceUserName()56 @Override public String getDeviceUserName() { 57 // TODO: move this to device set up 58 // The default environment doesn't include $USER, so dalvikvm doesn't set "user.name". 59 // DeviceDalvikVm uses this to set "user.name" manually with -D. 60 String line = new Command(run.log, "adb", "shell", "id").execute().get(0); 61 // TODO: use 'id -un' when we don't need to support anything older than M 62 Matcher m = Pattern.compile("^uid=\\d+\\((\\S+)\\) gid=\\d+\\(\\S+\\).*").matcher(line); 63 return m.matches() ? m.group(1) : "root"; 64 } 65 rm(File file)66 @Override public void rm(File file) { 67 run.androidSdk.rm(file); 68 } 69 mkdirs(File file)70 @Override public void mkdirs(File file) { 71 run.androidSdk.deviceFilesystem.mkdirs(file); 72 } 73 forwardTcp(int port)74 @Override public void forwardTcp(int port) { 75 run.androidSdk.forwardTcp(port); 76 } 77 push(File local, File remote)78 @Override public void push(File local, File remote) { 79 run.androidSdk.push(local, remote); 80 } 81 pull(File remote, File local)82 @Override public void pull(File remote, File local) { 83 run.androidSdk.pull(remote, local); 84 } 85 } 86