====== How To Debug Android By Adb ====== //__About this Article__// * **Author**: parker --- parker@cubietech.com --- 2013/11/1 09:30 * **Copyrights**: [[http://creativecommons.org/licenses/by-sa/3.0/|CC Attribution-Share Alike 3.0 Unported]] * **Contributors**: [[http://cubieboard.org/|Cubieboard Community]] : ... ===== What is the ADB ===== Android Debug Bridge (adb) is a versatile command line tool that lets you communicate with an emulator instance or connected Android-powered device. It is a client-server program that includes three components: * A client, which runs on your development machine. You can invoke a client from a shell by issuing an adb command. Other Android tools such as the ADT plugin and DDMS also create adb clients. * A server, which runs as a background process on your development machine. The server manages communication between the client and the adb daemon running on an emulator or device. * A daemon, which runs as a background process on each emulator or device instance. You can find the adb tool in /platform-tools/. \\ The server then sets up connections to all running emulator/device instances. It locates emulator/device instances by scanning odd-numbered ports in the range 5555 to 5585, the range used by emulators/devices. Where the server finds an adb daemon, it sets up a connection to that port. Note that each emulator/device instance acquires a pair of sequential ports — an even-numbered port for console connections and an odd-numbered port for adb connections. ===== How to use ADB ===== * Similar to many commands,when you don't know what can the usb do,you can import: $adb help * Then you will see some introductions device commands: adb push - copy file/dir to device adb pull [] - copy file/dir from device adb sync [ ] - copy host->device only if changed (-l means list but don't copy) (see 'adb help all') adb shell - run remote shell interactively adb shell - run remote shell command adb emu - run emulator console command adb logcat [ ] - View device log adb forward - forward socket connections forward specs are one of: tcp: localabstract: localreserved: localfilesystem: dev: jdwp: (remote only) \\ === Directing Commands to a Specific Emulator/Device Instance === * You can specify the target instance for a command using its adb-assigned serial number. You can use the devices command to obtain the serial numbers of running emulator/device instances. For example: $adb -s emulator-5556 install helloWorld.apk \\ **Note**:if you issue a command without specifying a target emulator/device instance while multiple devices are available, adb generates an error. \\ ===Installing and unstalling an Application=== You can use adb to copy an application from your development computer and install it on an emulator/device instance. To do so, use the install command. With the command, you must specify the path to the .apk file that you want to install: $adb install And then uninstall it: $adb uninstall * if you are using the Eclipse IDE and have the ADT plugin installed, you do not need to use adb (or aapt) directly to install your application on the emulator/device. Instead, the ADT plugin handles the packaging and installation of the application for you. ===Copying Files to or from an Emulator/Device Instance=== You can use the adb commands pull and push to copy files to and from an emulator/device instance. Unlike the install command, which only copies an APK file to a specific location, the pull and push commands let you copy arbitrary directories and files to any location in an emulator/device instance. * You can use this to copy file or directory from the emulator or device: $adb pull * You can use this to copy file or directory to the emulator or device: $adb push \\ **Note**:In the commands, '''' and '''' refer to the paths to the target files/directory on your development machine (local) and on the emulator/device instance (remote). For example: $adb push /work/tools/adb.txt /system ===Issuing Shell Commands=== * You can use the shell command to issue commands, with or without entering the adb remote shell on the emulator/device.To issue a single command without entering a remote shell, use the shell command like this: $adb [-d|-e|-s ] shell * Or enter a remote shell on an emulator/device like this: $adb [-d|-e|-s ] shell * When you are ready to exit the remote shell, press CTRL+D or type exit. {{:adb6.png}} ===Enabling logcat logging=== \\ The Android logging system provides a mechanism for collecting and viewing system debug output. Logs from various applications and portions of the system are collected in a series of circular buffers, which then can be viewed and filtered by the logcat command. * You can use the logcat command to view and follow the contents of the system's log buffers. The general usage is: [adb] logcat [option] ... [filter-spec] ... * You can use the logcat command from your development computer or from a remote adb shell in an emulator/device instance. To view log output in your development computer, you use $adb logcat * and from a remote adb shell you use $logcat ===== Unable to connect adb ===== Some people will get such note when they use ''$adb device'' List of devices attached ???????????? no permissions * It is say that you don't have the permission to run ADB by USB.So you can set the USB permission. * (1)find your USB ID: $ lsusb Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 001 Device 003: ID 18d1:0003 Google Inc. Bus 002 Device 002: ID 0461:4d81 Primax Electronics, Ltd Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 001 Device 010: ID 0bb4:0c87 High Tech Computer Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub **Note**: And then find your USB ID.Here I can find my USB ID is ''Bus 001 Device 003: ID 18d1:0003 Google Inc.'' * (2)Add the rule $sudo vim /etc/udev/rules.d/70-android.rules * (3)Add the message SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="0003",MODE="0666" **Note**:The ''18d1'' and ''0003'' is my ID,you must add your ID. * (4)Restart the service $sudo chmod a+rx /etc/udev/rules.d/70-android.rules $sudo service udev restart * (5)Swap the USB cable and enter the directory where have the adb. $sudo ./adb kill-server $./adb devices $./adb root