Ok, so the Shield and I got off to a bad start. A bit like those Hollywood romcoms where in act one the boy and girl can’t stand the sight of each other. And then the love affair begins.
I feel act two coming on. But before we get into that, let’s see if we can throw a little light on what went wrong. The worst thing, to my mind, wasn’t the bug itself. These things happen. The worst thing was the information vacuum around the bug. This happens too. A lot. But it really shouldn’t, ever.
IT’S ABSOLUTELY NO DAMN GOOD just having a magical incantation like the one Sonal gave me, a mechanical ritual without an engineering narrative behind it. It may work; it may not. It may—as in my case—work and then not work. And nobody, it seems, knows why.
As I say in part one, nVidia’s Sonal stepped me through the ritual and we managed to restore video output through the HDMI port. But as soon as I had I disconnected the chat line to Somal, output from the port flickered and died again.
I must have repeated that ritual five or six times before I finally saw an image come back on the screen. Knowing that the flickering would probably soon set in again. I hastened to the Settings menu, found Factory Reset and wiped the entire machine clean so I could send it back to the PR company with no danger of compromising my passwords.
I rebooted to check all my data was gone, and was on the point of dismantling the set up to put it all back in its packaging, when a thought occurred to me…
“Factory reset” is an interesting phrase. It seems to mean “restore the system to the condition it was in when it left the factory”. But this is seldom the case. “Factory reset” will typically erase all user data, but leave the operating system and embedded applications in the state they were in FOLLOWING THE LAST SYSTEM UPDATE. So not, strictly, a “factory reset” at all. In fact, nVidia calls it a “factory data reset”.
This reminded me that when I initially set up the Shield it refused to proceed until I’d done a system update. If the Shield as dispatched from the factory worked as expected, was the system update responsible for the bug? Or, to put the question more precisely, was the fact that the system had been updated responsible for the bug? Ah!
Following any Android system update you’re often advised to do a full factory reset. Why? I’m glad you asked.
Art & the Shield
The Shield’s an Android device, and Android applications are written in Java, a high-level programming language that is distributed as “bytecode”, a sort of half-way house between the Java language and the very low-level executable code the device’s particular processor can understand. Bytecode distribution allows the identical version of any application to run across a variety of different processors. But to do this, each processor has to have its own bytecode to executable code converter.
Just such a converter is built into every Android system. The latest versions of Android use a converter called ART (Android RunTime). ART takes each Android Java application and crunches it down to executable code, which then gets cached away somewhere in the system hidden from the eyes of the user. When the user launches an application that has previously been ART-crunched the system ignores the Java version and fetches the executable code instead.
This “here’s one I made earlier” arrangement works nicely most of the time. But it’s possible for the cached version to get corrupted, resulting in crashes or a sluggish response. But even an uncorrupted cache version can foul things up, when it’s out of date with respect to a newly installed bytecode version not yet ART-crunched.
And that’s a situation that can come about following a system update.
A factory reset solves this problem by completely wiping the cache and sweeping away all previously ART-crunched executable code. The system now knows it has to ART-crunch the whole shebang all over again. I’m pretty sure this is why my Shield is now up and running.
Just how and why Sonal’s magic ritual gets the video back, albeit temporarily, remains a mystery. But I’m pursuing this with nVidia, and when I get an answer I’ll post it up here, and try to persuade nVidia to add the full explanation to its own documentation.
So now, I think, we’re at last ready to get on with Part 3—the actual review!