Tips

sl4a-linux

Communicating Linux Chroot to Android

The technique of installing a full Linux distro on your Android phone has been around for a long time. I’ve used it in the past, but for a while didn’t have a phone with a physical keyboard, which made it less useful. Now that I have CM7.1 on my G2 I’ve installed it again. I’m actually using an updated prepackaged version of Ubuntu, which has been fantastic.

However, generally speaking you can run the command line stuff and have it manipulate stuff on the filesystem, but the stuff you run “in Linux” don’t interact with Android. Poking around the other day I noticed that SL4A, the Android scripting system has a “server mode”. Normally the scripts run by SL4A communicate with a generic RPC service which hooks the interpreters back into the Android system. There’s also a mode to just startup the RPC service and bind it to the loopback port or a public interface. And it talks JSON!

So, theoretically, I should be able to startup a SL4A server, run scripts in the Linux environment, and they can send messages to the outside Android system. I needed to test it out of course. If you have SL4A installed you select View from the top level menu, then Interpreters, and then “Start Server” from the menu there, and select “Private” from the context menu that pops up. There should now be a SL4A entry in the dropdown notification area, if you tap on that you can see the running server and it’ll tell you the port. Or, you could just get it from the command line, since thats where we’re going next.

Login via ADB or terminal, or however you prefer. Swap over to Linux, or mount up the unionfs stuff if you’re doing it Saurik’s way. And then you can use anything that can connect to a TCP socket and emit some JSON to send messages. I used netcat for the simplest example:

echo ‘{“id”:1,”method”:”makeToast”,”params”:["The Great HooDoo ..."]}’ | nc 127.0.0.1 38804

And tada! The message shows up on my device:

Really hacky thing to do right now, but it’s interesting in that it would potentially let that stuff running as Linux commands to interact with the rest of the system. Even just being able to deliver local notifications so that you know to check back on something running in terminal to see updates is pretty cool.

Voice Input Under 2.1

I’ve been playing around with voice input under Android 2.1. It’s a feature that’s easy to miss, cause the key that starts voice input only appears on the keyboard if you’re on a general text entry field. So for instance, I started up GMail to give it a try the first time, but there’s no speech input button. I assumed it wasn’t enabled and went hunting around for additional options. Turns out I just needed to move past the address field and go to the subject or body. Makes sense, but wasn’t completely obvious to me.

I could see the feature being useful for text messages for instance. But for me the accuracy is still a bit low. Got errors trying it while enunciating strongly in a quiet room. Some of the problems I’m having saying it’s going to be a useful feature are that it’s really difficult to go back and edit out those mistakes. The entire sentence I just dictated is underlined as previous input once the detection is done. So a backspace to try to replace the last word for instance – that erases the entire input. And if it just got a sentence correct and I want to go on, I need to hit the speech input button again to go ahead and dictate some more.

I’m sure the issues are because this was born out of a “voice search” usage and not a general dictation application. Just something to keep in mind if you’re planning to use it. I’ll have to get a 2.2 rom on the phone and see if there are any additional options in there that address this.