Using Google Glass in 2020
After waiting ~7 years, I decided to check eBay again and finally found Google Glass bidding at ~$200. While I missed one of the auctions, I happened to find another unit bidding at $150 and selling for $200 + shipping. I immediately purchased the unit and received it in the mail two days later. I knew that some services were shut down so it was a bit of a gamble if this thing would still work but it does look like there is some hope left for the tech. This article will show how to get started developing on Google Glass using today’s software versions.
Final Software Update
When my unit arrived, I was shocked to find that this person did not factory reset the devices before sending. After learning some of the settings and input pattern, I decided to factory reset the device and start from scratch.
Infrastructure for activating your Google Glass was shut down earlier this year (I think around February). When you factory reset your device (and you are running older firmware), you won’t be able to activate your device as you’ll need to either get the mobile app working or scan a QR code from Google’s website. I believe both of these options were set up to grant the Glass the ability to access your Google account. As these service were shut down, you’ll have to flash the latest firmware to ignore this startup sequence.
The latest firmware patch is located here: https://support.google.com/glass/answer/9649198?hl=en
This is also the same set of files from this list (XE24): https://developers.google.com/glass/tools-downloads/system
Note that there is also a “rooted” bootloader that is available in the second link that isn’t available in the first. This allows you to run adb shell
as root (which is useful for looking at kernel logs)
Driver Updates
Note: steps copied from: https://stackoverflow.com/a/42312419
So the first step is connecting your glass to your computer (Windows/Mac/Linux). This means installing and configuring drivers. Unfortunately, I don’t have instructions for Mac/Linux but I think the process will still be similar (or the device will magically work).
The first step here is installing Android Studio (hopefully self explanatory). I am using the following:
Android Studio 4.0.1
Build #AI-193.6911.18.40.6626763, built on June 24, 2020
Runtime version: 1.8.0_242-release-1644-b01 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0
GC: ParNew, ConcurrentMarkSweep
Memory: 1237M
Cores: 16
Registry: ide.new.welcome.screen.force=true
Non-Bundled Plugins:
The next step is installing the Google USB driver package. Go to Tools > SDK Manager
. Then, navigate to the SDK Tools
tab and find the Google USB Driver
.
This should give you the following folder (replace $USER
with your username):
C:\Users\$USER\AppData\Local\Android\Sdk\extras\google\usb_driver
Inside of this folder, you’ll find files that tell your operating system which devices are “Android.”
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 9/4/2020 9:00 PM amd64
d----- 9/4/2020 9:00 PM i386
-a---- 9/4/2020 9:00 PM 12789 androidwinusb86.cat
-a---- 9/4/2020 9:00 PM 12825 androidwinusba64.cat
-a---- 9/4/2020 9:00 PM 6957 android_winusb.inf
-a---- 9/4/2020 9:00 PM 17826 package.xml
-a---- 9/4/2020 9:00 PM 64 source.properties
Specifically, you will need to modify the android_winusb.inf
file. Next is to find out what the device ID of your Google Glass is.
Plug your devices into Windows. Then, open Device Manager
from the start menu. Unfortunately, it is a bit hard to show a picture given I have already configured my system but it should be somewhere in this menu! The device may have the same “logo” as the Software devices
option below. You may also find it under one of your Serial Bus
sections as USB can be chained. After you open the properties for the device, use the Details
tab and select the Hardware Ids
tab. If you Google around, you’ll find other people have different IDs here and it likely has to do with manufacturing so don’t be worried if yours is different than the one I have below.
Using this ID, you can add a new section if it doesn’t exist:
;Google Glass
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_9001
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_9001&MI_01
There are two parent sections:
[Google.NTx86]
...
[Google.NTamd64]
...
I am not sure which section you need to add it under so I added mine to both. After, you should be able to search for a driver from this location:
Note: you may have to disable driver checking because you are modifying a file that will change some signature when the driver is loaded on the Windows side. I was able to do this by holding shift and selecting the Reboot
option in the start menu.
For driver selection, you can choose the Android Composite ADB Interface. I think this is used for both Fastboot and ADB tools (I think my laptop had a third Fastboot
-like option which my desktop computer didn’t have).
Nice! Debugging mode is likely not enabled as you factory reset the device so don’t expect adb devices
to work. You also likely booted the Glass up normally so you aren’t in the Fastboot menu or in “Fastboot Mode” (not sure what this is called, I guess bootloader).
To reboot into Fastboot, turn your device on. After it is off, hold the Camera button down and click the power button for a second or so. After releasing the power button, keep the Camera button held down for ten seconds or so. Your device will then boot into recovery mode and you’ll have a menu like this on your glass screen:
You can click the Camera button to navigate to the next item in the list and long-press to select the item. Reboot into fastboot
should be the second option in this list so you’ll need to click once and then hold for a few seconds after that.
After this, your devices screen will not be on but the power light should have a very slow pulse. You can now plug the Glass device back into your PC. Windows should use the right driver and you’ll be able to run the fastboot
command (this executable is located in the platform-tools
folder in SDK
folder above (sibling of extras/
folder).
Fastboot Mode
You should not see your device in ADB devices yet but you should see it in fastboot devices:
adb.exe devices
List of devices attachedfastboot.exe devices
015DB76E16009013 fastboot
The next step is unlocking the device:
fastboot.exe oem unlock
(bootloader) Warning: Unlocking your device will void your warranty
(bootloader) and erase your personal data from the device.
(bootloader) Run "fastboot oem unlock" again to confirm.
(bootloader) Device still locked.
OKAY [ 0.023s]
Finished. Total time: 0.032s
Re-run this command to unlock it:
fastboot.exe oem unlock
(bootloader) Erasing personal data. This could take a while...
(bootloader) Erasing cache...
(bootloader) Erasing userdata...
(bootloader) Unlocking...
(bootloader) Device unlocked!
OKAY [ 1.113s]
Finished. Total time: 1.115s
Now, we are ready to flash the firmware supplied in the Support Post above. I initially had problems with the boot image so I skipped it and continued to the system
and recovery
images and the Glass seemed to work (though adb shell
with root was not working at that point)
fastboot.exe flash boot ..\..\..\..\..\Downloads\signed_signed-glass_1-img-5585826\boot.img
fastboot: error: Couldn't parse partition size '0x'.
After the boot image, flash the other two images: system
and recovery
.
If you want to flash the “rooted” boot.img, I was able to use the flash:raw
command to avoid this error. This was able to
fastboot.exe flash:raw boot C:\Users\jgens\Downloads\boot.img
Sending 'boot' (5496 KB) OKAY [ 0.238s]
Writing 'boot' OKAY [ 0.923s]
Finished. Total time: 1.183s
After you are done flashing, run fastboot.exe reboot
and this should boot up the Glass normally. If everything works correctly, you should be in the Home screen of the Glass and not have the tutorial to follow anymore!
Head to the Options
menu (left of clock), then to Device Info
and then to the end of this list. You should be able to enable Developer mode and enable Debug mode. If this works properly, you should be able to run adb devices
and find your device. If this isn’t working for you, you may need to restart Windows or change the driver settings.
If you install the rooted image, you should have the following:
adb.exe root
adbd is already running as root
Writing A Program
Now you can at least look around your device and do whatever you would normally have done. However, you may be interested in building an application for this Glass. If so, you’ll need to use the following guide to get started building.
I initially tried a few “Hello world” programs and start apps and was met with error after error (mostly due to version conflicts). I am not up-to-date with the latest Android development but I did find some of the older guides for Glass that used Eclipse and did not use Gradle for building. I didn’t really find this acceptable so I tried finding an example that did use Gradle. I ended up finding the Timer example though I mostly referenced its files and setup and never successfully imported and built it with Android Studio:
The first thing to do is install the Glass Development Kit Preview Package. Use the SDK Manager and uncheck the “Hide Obsolete Packages” and check the “Show Package Details” buttons. This should let you install the Development Kit.
After, create a new project with No Activity. For Minimum SDK, I used API 19: Android KitKat.
This should give you the following: an unbuildable Android App configuration with zero source code files (nothing in test2). You can also see my Glass Device was picked up automatically.
You’ll need to start with an Activity. This can just be a Java class that extends Activity
:
package com.example.test2;
import android.app.Activity;
public class TestClass extends Activity {}
Now, update the Launch Options to use this Activity:
You should then have the second error:
<activity
android:name="com.example.test2.TestClass"
android:label="@string/app_name"
android:enabled="true">
<intent-filter>
<action android:name="com.google.android.glass.action.VOICE_TRIGGER" />
</intent-filter>
</activity>
After adding the above activity inside of the <application>...</application>
, you should be able to “Run” the application.
This shouldn’t do anything yet as you haven’t added any code but it does give you a good check point to start building. From here, you can start copying bits from other projects (like parts from AndroidManifest.xml) or just follow some of the guides.
Here are a few other notes I made along the way from other non-successful approaches:
- One project’s gradle file has
http
instead ofhttps
- One project was using gradle
1.0
but Android Studio needs to use2.6
. You will need to use2.6
and check the version of the other dependencies to get anything working. - You may also need to comment out most of build.gradle (so any sort of JUnit or appcompat configuration)
Hello World
I started by copying bits of other guides. I have three activities that you can learn by example:
- CardActivity (hello world)
- MenuActvity (showing how menu’s work)
- FindThePriceActivity (would have sent http call to eBay with picture taken from device)
Fixing the Wifi
Unfortunately, I am not able to get WiFi working on my device. I did look at the kernel log and it looks like the driver doesn’t start quite right. I am pretty sure the root error is the si_attach failed
but I don’t know what this means and wasn’t able to debug even after looking through the glass source code:
dmesg
log:
I could try recompiling kernel, possibly swapping the android driver with linux broadcom driver though I have no idea if that is possible or if I would hit even more error.
The only other option I could find was at least finding a way to forward traffic through ADB (communication is bidirectional after all!). There is a neat command called adb reverse
which behaves like adb forward
and would allow connections on the Android device to connect to something listening on your PC (like a proxy server!). However, this did not work and I wasn’t able to figure out the error message even with ADB_TRACE=all
set.
Conclusion
All in all, I would say that I enjoyed my time with the Glass. Without WiFi working, I don’t know that I will see much use for this device unless apps are self-contained. I was thinking of building some fitness tracker to use the gyroscope to display number of push-ups/pull-ups.
I also think that the tech behind imaging will need to be different (surely why this was discontinued). The following image shows how the lens reflects the image onto your retina using a curved surface rather than the “block” used by the Glass. I think that these devices will need to be fitted per-customer which will drive cost way up and will not allow them to be re-sold quite as easily. My Glass device definitely has out-of-focus text near the edge of the surface and is somewhat difficult to use (depends on app and text placement).
Picture of lens reflection: https://www.kguttag.com/wp-content/uploads/2018/10/North-Focals-feature-image-001.jpg
Thank you for reading! I would love to see another device that just focuses on notifications and reading simple content (like tweets/news) so that the device can be kept small and light and hopefully not overheat. Until then, we wait!