Android on Chrome OS: adb Access
The Android-on-Chrome OS documentation
was updated recently to include instructions on connecting to your Chrome
OS device through adb
from your development machine. This will allow
you to run apps on the Chrome OS device from Android Studio, for example.
Unfortunately, the instructions have bugs, and I don’t know where to report those bugs. So, here is what worked for me, using their instructions as a starting point.
Get the Basics Working
Follow the instructions in my “Getting Started” and “Getting (Side-) Loaded” blog posts to get your Chrome OS device up to date and in developer mode, plus get the Android subsystem working.
Configure the Chrome OS Device
The official instructions ask you to use “virtual terminal 2” and log
in as root
to make changes to Chrome OS. I could not get this to work;
even their supplied default root
password was not recognized.
Instead, I used Ctrl-Alt-T
to open crosh
. From there, I executed
the shell
command to get to bash
. And, for their documented root
commands, I used sudo
.
So, if you get to bash
using those steps, execute the following
statements:
sudo /usr/libexec/debugd/helpers/dev_features_rootfs_verification
sudo reboot
This will reboot your Chrome OS device, requiring you to go through the whole Play Store acceptance/login process again.
Then, go back into bash
, and execute:
sudo /usr/libexec/debugd/helpers/dev_features_ssh
This enables an SSH daemon and presumably makes corresponding adjustments
to the iptables
-based firewall.
Find Your Chrome OS IP Address
The official instructions tell you to do this “from ChromeOS settings”, without actually explaining how that is done.
Go into Settings (e.g., tap on the time/WiFi/battery/account bar in the lower-right, then tap the gear icon). Towards the top of the Settings page, there will be an “Internet connection” section. If you are using WiFi, tap on the “Wi-Fi network” item, then tap on the WiFi network that you are using. That should bring up a three-tab dialog with details about this network connection. The middle tab — Network — will show your IP address. Make note of this.
Configure Your Development Machine
UPDATE 2016-07-19: The process described in this section is no longer needed.
On your computer that you use for Android development, switch to some likely directory, then run the following command from a terminal window:
curl -s "https://chromium.googlesource.com/chromiumos/chromite/+/master/contrib/setup_adb?format=TEXT" | base64 --decode > chrome-adb.sh
This will download a bash
script named chrome-adb.sh
. Open it in your
favorite text editor and confirm that you are comfortable with what it is
doing. Or, Windows users might use the script as the basis for working
out how to configure their SSH client and perform similar steps.
If you are comfortable with the script, ping
your Chrome OS device
(to confirm that you can reach it), then run the script:
ping <IP>
bash chrome-adb.sh <IP> <HOST>
Replace <IP>
with the IP address of your Chrome OS machine that you
determined previously. Replace <HOST>
with the name that you want to use
to identify this Chrome OS device in the future. This value only appears
to be used inside of your SSH client configuration (~/.ssh/config
) and
is not used elsewhere.
If everything works, this should emit the following output, or something like it:
INFO: SSH connectivity established.
SELinux: Loaded file_contexts contexts from /file_contexts.
INFO: ADB set up complete.
Connect to Chrome OS for Development
When you want to develop using the Chrome OS device as the target, execute the following command:
adb connect <IP>:22
where <IP>
is the same IP address that you used previously. Note that
the official docs drop off the connect
part, which does not work.
At this point, you should get the standard Android debugging
authorization dialog, after which adb devices
should show your connection, and you should
be able to run apps on the Chrome OS device akin to how you do so for
locally-connected devices, emulators, etc.
UPDATE 2016-07-19: If you used the instructions shown earlier
in the previous section, adb
access to your device may no
longer work. If so, try turning off, then on, the Developer Options,
via the switch in the action bar of the Developer Options screen.
Then, try reconnecting via adb connect
.