[Hands-On] PureNexus ROM Brings Marshmallow to ADT-1


When you talk about Android TV, most people will talk about the NVIDIA Shield TV, the premium option, or the Nexus Player, the pure Google option. Although there are devices made by Sony, Phillips, and Razer, you will hear very little about the ADT-1. The Android Developer TV (Mark 1) was originally sent out to developers to build great TV apps and make sure their apps would be compatible.

After the Nexus Player was announced, the ADT-1 fell by the wayside. It was never updated beyond Lollipop 5.0.2. The ADT-1 was never meant to become a consumer level device. Casting was barely supported beyond a couple of Google apps. Third party apps like PocketCasts wouldn’t recognize it as an applicable device. The gamepad included with it, although becoming the Nexus Player gamepad, was never accompanied by a remote. The gamepad had to be the primary control mechanism, and there was no microphone.

That being said, the ADT-1 was not and still isn’t a terrible device. It runs well, works with practically all Android TV apps, and the gamepad is of reasonable quality. The biggest issues: being stuck on Lollipop and no cast support, are software issues.

In the Android community, old devices often can be modernized through a ROM (read-only memory) containing the base Android operating system. The PureNexus ROM has been compiled for the ADT-1, allowing enthusiastic users to get the latest version of Android on that device.

In addition to getting the latest version, it adds full support for casting. The code is on GitHub for those interested in contributing. You can learn more about the project at their website.

The guide is available on XDA Developers if you’re interested. You’ll need to flash a custom recovery first, then while in recovery install the OS image and the leanback versions of Google apps. Once you reboot you’ll be all set.


The guide is relatively straightforward. After a few minutes, I was installing the PureNexus ROM and Google apps through TWRP. After this was done, I rebooted the device and it went into the Marshmallow boot animation, telling me I had succeeded.

ADT-1, running Marshmallow 6.0.1
ADT-1, running Marshmallow 6.0.1


Finally, there is full support for casting. I’m no longer restricted to YouTube and a handful of apps, but rather the dozens or hundreds of cast-enabled apps and games. I was overjoyed to be able to connect PocketCasts to my TV.

I have hundreds of podcast episodes I need to catch up on
I have hundreds of podcast episodes I need to catch up on


The ROM is based on stock Android, but the group does add a handful of features that they think will be useful. You can see the included apps in the PureNexus row on the launcher, as well as two new options in the bottom row. Superuser and Kodi are popular apps in the community. There is a web browser as well which felt mediocre. It works, but it didn’t feel like a great experience. It was much like other attempts to put a web browser on a TV. It’s nice to see it included as a stock application.

ADT-1 MM PureNexus

App Drawer and cLock

The app drawer is a relatively simple activity that shows all the actionable apps you have, not just the leanback supported ones. This is something already present in other launchers such as the HALauncher, but built-in to the system.

ADT-1 MM App Drawer

cLock is an app that configures things that will show up on the launcher. Ordinarily it will display the time in the top-right corner. However, now you can configure it by adding in the date and the weather. I’m not too happy with it, so I’ll probably turn some of that off. It doesn’t match the Roboto Light font and aesthetic of the time. While some will find that useful, future updates should focus on design.

Look at all these options
Look at all these options
The launcher can display more than just time
The launcher can display more than just time

Modular Permissions

ADT-1 MM Permissions
Permissions were a big feature of Marshmallow, and that feature is present on the ADT-1 as well. Apps download without any secondary confirmation, but when I open them, like in this weather app, I am asked to give access to my location.

Sidenote: When this dialog came up, my device appeared to freeze and stop responding. After a reboot it started responding again. I was using Vysor to view my screen, so I can’t pinpoint exactly where the issue was from (ADT-1, Vysor, or laptop being slow), but I thought I should mention it. When I tried it a second time the permissions model worked fine.

My Inputs

The Live Channels app does not appear as a normal app, but instead appears as “Channels” in the newly visible “My Inputs” row when you download an applicable app.

ADT-1 MM Inputs

It's just Live Channels
It’s just Live Channels

Live Channels does appear to work fine, although the apps Pluto TV and Cumulus TV do not seem to work with Live Channels at this moment. Cumulus TV, an app I developed, should be fixed shortly. Pluto TV plays fine in the app, but going to the setup in Live Channels causes setup to immediately close and say no channels were added.

Other Issues

As an aside, I have noticed that whenever I’m uploading another build of an app to my ADT-1, it takes longer now to install and run. I’m using USB, so it should not take that long, but a lot of time is spent in the ‘uploading’ stage.

One app I’m working on displays a satellite map based on your location. I can get the location through Wi-Fi pretty well, but I can’t seem to display it on my Marshmallow ADT-1 even though it was working fine before I flashed it. After looking through some of the debug logs, I came across this error:

12-28 01:10:18.439 24685-24685/com.felkertech.n.weatherdelta I/Google Maps Android API: Google Play services client version: 8298000
12-28 01:10:18.442 24685-24685/com.felkertech.n.weatherdelta I/Google Maps Android API: Google Play services package version: 8487836
12-28 01:10:18.527 24685-24685/com.felkertech.n.weatherdelta E/Google Maps Android API: Google Maps Android API v2 only supports devices with OpenGL ES 2.0 and above

The third line, the error saying Google Maps only works on devices with OpenGL ES 2.0 and above, seems to imply that this version of the ADT-1 does not support OpenGL 2.0. The app does not crash, but the map does not load correctly. All the other widgets and functionality work as expected, so it’s not a significant bug. However, this could also cause some games not to work correctly or not even show up in the Play Store.

ADT-1 MM No OpenGL 2

One final issue, which is slightly nitpicky, is the animation speed. It seems to be 0.5x the normal animation speed by default. Although the type of people who normally flash their devices are the same type who don’t like waiting for animations to complete, the UI seems jankier than normal.


The ADT-1 was originally made for developers, and I think most developers are eager to get the latest version of Android on all their devices. This ROM doesn’t appear initially to have any major flaws. I am impressed by the group’s work thus far and will continue to keep following updates. If you have an ADT-1, or several, lying around the house, you might consider flashing Marshmallow on it. Full casting, modular permissions, and extendable storage are all features that you’ll get. Plus there’s continued stability of Android and of Android TV.

Nick Felker

Nick Felker

Nick Felker is a student Electrical & Computer Engineering student at Rowan University (C/O 2017) and the student IEEE webmaster. When he's not studying, he is a software developer for the web and Android (Felker Tech). He has several open source projects on GitHub (http://github.com/fleker) Devices: Moto G-2013 Moto G-2015, Moto 360, Google ADT-1, Nexus 7-2013 (x2), Lenovo Laptop, Custom Desktop. Although he was an intern at Google, the content of this blog is entirely independent and his own thoughts.

More Posts - Website

Follow Me:
TwitterLinkedInGoogle PlusReddit