Playing With Android Apps on My ChromeBook

Experimenting with Android Apps on My ChromeBook

As I mentioned in my previous blog entry, I got a ChromeBook, and I’ve been happy with it for the most part. The problem is that Chrome OS has a lot of gaps. I had read that Chrome can now run Android apps, so I wanted to see if I could use Android apps to fill in some of the gaps. I’ve had some success and some disappointments. Let me try to explain how it works.

Get The Runtime on Chrome

First thing I did was to force the installation of the “App Runtime for Chrome (Beta)”. Google, at the time of this entry, has only released four Android apps to the Chrome store. You have to install one of them in order to install the runtime. I installed Vine from the Chrome store. When you install this app, it will first install the CRX of the Runtime and then the CRX of Vine.

At this point in chrome://extensions, you’ll see “App Runtime for Chrome (Beta)” is “Enabled: Installed because of dependent extension(s).” I didn’t need the Vine app, but removing the Vine app at this point would also remove the Runtime. Once another Android app has been installed, Vine can be removed without the Runtime being lost.

It may be possible to install the Runtime directly. I never checked.

Get APK of Apps

In order to install an Android app in Chrome, you need the original APK and it needs to be in a format Chrome understands.

In order to get APK files, I used t. This has some requirements though. You need (1) an Android phone, (2) another computer with the Chrome browser, (3) the APK Downloader extension, (4) and a little bit of trust.

On my Android phone, I opened the dialer and dialed: *#*#8255#*#*. This opens the “GTalk Service Monitor”. The second line displayed is the “aid”. For me, this was a 16 character code.

On the other computer, I installed the APK Downloader and then visited Google Play. I search for the app I want to get. After the page for the app loads, a “Download APK” button appears. When you click on “Download APK”, a window comes up asking for the Google account/password and AndroidID of the phone. This is where the trust comes in, because this window is not a Google authentication window. However, this extension is open source, and no one has complained about collection information. Once these options are inputted, the Download APK button works.

I downloaded the APK files I wanted to try out on the other computer.

Prepare APK Files for Chrome

On my other computer, I installed node.js. In Command Prompt, Konsole, Terminal (whatever), I then got the App Converter with this command as root:
npm install chromeos-apk -g

Then I cd to the same directory as the APK and used the command…
chromeos-apk name-of-package.apk

This prepares the app for the phone version. Some apps are better as the tablet version…
chromeos-apk name-of-package.apk –tablet

This creates a new folder called name-of-package. For some reason, these packages did not immediately work for me. I had to first edit name-of-package.apk/_locales/en/messages.json and add a line, like this…
“extName”: {
“description”: “Extension name”,
“message”: “name-of-package”
}

I am not sure why this is required and not taken care of by chromeos-apk. Possibly a new requirement in Chrome 38. I did have to manually perform this step for every package.

EDIT: I later learned than if you use the following command, you do not need to modify messages.json:
chromeos-apk name-of-package.apk –name “name-of-package” –tablet

You can also replace the icon.png with a proper icon for the specific app.

For ease, I then zip up the folder into name-of-package.zip and I FTPed the zip to my ChromeBook.

Install Unpacked Extention on ChromeBook

On the ChromeBook, I mounted the ZIP, extracted the contents to Downloads (for lack of another place to put it), unmounted the ZIP and deleted the ZIP.

Then I go back to chrome://extensions and checked “Developer mode”. Then I click the “Load unpacked extension” button. Click the name-of-package folder in Downloads and click the “Open” button.

If I got an error here, it was because I forgot to fix the name-of-package.apk/_locales/en/messages.json file, usually forgetting to add a comma after the description line.

At this point, I was able to safely remove the Vine app, as the newname-of-package app now depends on the Runtime.

From here, you can click Launch or launch the app from the Chrome OS App Launcher. All the Android apps I tries simply displayed as gree Android robot icons entitled in a non-friendly name-of-package title. It is possible that this title could have been changed from the messages.json file. I didn’t experiment with this.

Results…

My results were pretty mixed. I had some success and a lot of failure, some surprises and a lot of disappointments.

The first app I tried was Skype, as there is no Skype version for Chrome OS. Skype takes a little while to load, but to my amazement, works perfectly. I first tried a Skype echo123 call, without any problems.

Screenshot 2014-11-20 at 11.35.10 AM

I then tried out Video calling. Again, it worked great.

Screenshot 2014-11-20 at 11.37.23 AM

For me, this fills in a big gap with Chrome OS. Of course, avid Google fans are scoffing right now, so let me go ahead and FAQ this.
Q: Why not just use Hangouts?
A: Main reason I use Skype instead of Hangouts is because of outgoing caller id. With Skype, you can set the outgoing caller id to by my own phone number. If you call out with Hangouts, it either uses “Unknown Number”, “Unavailable”, of my Google Voice number. I have a Google Voice number, but I do not share it. Instead, I sometimes forward my cell phone to Google Voice, instead of the other way around.

Q: Why not just port your cell phone number to Google Voice and then do everything through Google Voice forwarding.
A: I have two reasons for doing this; both reasons are show stoppers for me. (1) Google Voice forwarding works okay when you are forwarding to a POTS telephone line or to a mobile phone. If you try to forward to a SkypeIn number or a SIP number, there is a compounded lag that makes conversations very difficult. (2) Google Voice has very poor support for MMS. I do not want to give out a separate number for picture and group messaging.
By having my mobile phone number forward to Google Voice, I can avoid the lag and still get MMS on my phone. When I leave my house, I just turn off the forwarding to Google Voice. I also set my forwarding to conditionally forward to Google Voice, when my phone is unreachable.

Q: Why Skype?
A: They have a Windows app, a MacOS X app, a Linux app, and an Android app (which I now have working in Chrome OS). They allow me to set my outgoing caller id to my cell phone, so people don’t see my SkypeIn number when I call out. If Hangouts allowed me to change my outgoing caller id, I would consider switching.

I then tried to make Voxer work… Although the only person who really uses it is my sister. I find it very annoying that Voxer only works on my phone, as I frequently call and text from my computer using Skype, Hangouts, and MightyText. Having to use my phone just for Voxer when I’m working is frustrating. Having Voxer work within Chrome would be really cool.

Unfortunately, it didn’t work. The app opens, but immediately says that it cannot connect to the Voxer network when you attempt to log in.

My company uses Lync 2013, and I use the Android app on my phone. I was hoping it would work within Chrome. Unfortunately, it did not work at all. The Runtime just got stuck on Android logo window and the app never came up. What a shame.

Good news for ham radio operators, to my amazement, the EchoLink Android app works!

Screenshot 2014-11-20 at 11.33.53 AM

Calling EchoTest worked just fine. I always have to use a Relay server. It appears that the sandbox nature of the Runtime prevents port forwarding directly. Unfortunately, this isn’t of much benefit to me personally, as my local repeater’s EchoLink has been down for almost a year now…

Unfortunately, my success ends here.

My company uses Citrix XenApp, so I tried to install the Citrix Receiver. The Citrix Receiver does open, logs in successfully, displays the app list. However, it crashes as soon as I tried to open Internet Explorer or Microsoft Remote Desktop Connection. Darn…

My IP camera uses an Android app called p2picamera-android. They also have a Windows app, but that’s all. Having p2picamera-android work in Chrome would have filled a big gap for me. Local Mode detects no local network cameras (sandbox again, I assume). However, it does log in to the cloud successfully. The list of cameras does show when I log in. However, the app crashes as soon as I try to connect to a camera.

The other huge gap I wanted to fill was to get a SIP client working within Chrome. As I have SIP tied into my ham radio, and can the VoIP through my local network to it (allowing me to control my radio from anywhere in my house). I tried several SIP clients, but they all failed.
LinPhone: Crashes immediately.
CSipSimple: Starts to launch. Displays preferences for a second, but then crashes.
SipDroid: UI seems to work okay, but when I try to call out, it just says “No suitable data network available”
Zoiper SIP: Crashes immediately.
Vimphone: Crashes immediately.

I gave up at this point. It seems most SIP clients end up tried to use the local SIP libraries on Android, which apparently are not included in the Runtime. I suspect this is the reason for the crashing of SIP and Lync clients.

There are other apps I thought about trying. VLC, but since the Runtime is sandboxed, what media files could it play? Remote Desktop clients and VNC clients… email clients, social networking, but these are already available for Chrome. I doubt any VPN client would work, given the sandbox. I could try Xabber, but I don’t really use XMPP much since Google Talk changed to Hangouts.

It looks like the Runtime hasn’t made it to Chrome for Linux or Chromium builds yet. Double darn.

So, for my effort, I got Skype and EchoLink to work. I am open to suggestions on other apps to try.

November 21 Update: So, Skype has suddenly stopped working on my ChromeBook. It now immediately crashes when you open it. I have no explanation or resolution. I tried removing the app and recreating it, but it did not help. I even went as far as whitewashing my ChromeBook and completely starting over, but it did not help.

November 22 Update: I got Skype working again. I removed the official Android runtime for Chrome and replaced it with ARChon 1.2, an unofficial version that works with non-Chrome OS instances of the browser. The version of ARChon I am using reports itself to be version 38. The official version reported itself to be version 39. I would speculate that my official version auto-upgraded, and the newest did not work with Skype. I have read that Skype is not currently functioning with the new Android Lollipop. Perhaps the newest official runtime is based on Lollipop.

Xabber and Andie Graph are both working in the runtime as well. Xabber is an XMPP client, although I have not used it much since Google Talk was replaced by Hangouts. Andie Graph is a TI graphing calculator emulator, although it is easier to use on a touch screen than on a ChromeBook.

Screenshot 2014-11-23 at 12.47.17 AM

Leave a Reply