How to install all apks on OUYA


Roughly two weeks ago I sought out the ability to pair my PS3 MEDIA REMOTE CONTROL with my OUYA. This was a bit of a task and even today has some serious caveats. At the time, I was unable to get any of my third party, PLUG AND PLAY, remotes to fully work on the OUYA due to the fact that keys are mapped to do different things in the OUYA than they are with other boxes, like the PIVSO XIOS. After two weeks of pairing my PS3 controller EVERY MORNING prior to starting the day... i found myself frustrated. I also decided that I needed a controller that offered MOUSE support for Netflix while offering dPAD support for the OUYA UI and XBMC. In the end I decided there had to be a better solution!

So I set out to get my other controllers working. One of my biggest issues here was that I have had ZERO LUCK getting XBMC's keyboard.xmls to function in any Android environment. It is ALWAYS overwritten by the Android machines default remote control settings. Well, I am pleased to announce that as of this morning I have found the perfect solution.

I say perfect in that ANY REMOTE CONTROL can be programmed in the OUYA, or any other Android machine, to do WHATEVER YOU WANT IT TO. What we need to do is find the file that Android stores its Remote Control key functions. Essentially, every remote controllers button has an ID, or sourceCode. With in the Android Operating system, each button is mapped to a command. The AWESOME NEWS... these are all stored in an editable text file. This means we can change any button to work as another button.

This is not the simplest thing to do, and there was NO GUIDE to resolve this in one place. I had to read threads and forums from 7 sites and play around in my files system quite a bit to get this far. Let my stubborn nature make your OUYA better!

- File Manager With Root accesses
(I used Root Explorer)

- An APP for editing text.
(Again... the Root Explorer has this function built in)

- An OUYA that has SuperUser, and BusyBox, Installed
(Here is One Of The Guides Out THERE)

- A MultiMedia Remote Control
(I am doing this with a Mele F10 Airmouse)

- An app called KeyTest

BUTTON_A = OUYA CONTROLLER's "O" button (system wide ENTER)
BUTTON_B = OUYA CONTROLLER's "A" button (system wide BACK)
BUTTON_Y = OUYA CONTROLLER's "Y" button (power off from the home menu)
MENU = OUYA CONTROLLER's "SYNC/HOME" button (system wide MENU with a single tap)

kinkin said:
28 ENTER changed to BUTTON_A
102 MOVE_HOME changed to BUTTON_B
139 MENU changed to BUTTON_X

  1. Install all of the apks, in the REQUIREMENTS SECTION, onto your OUYA.
  2. Open the app KeyTest. It will be found in your OUYAs MAKE menu
  3. This app will show a lot of text on the screen, every time your press a button. Some will remain blank if they are MOUSE, or IR, keys. It will register anything that is general navigation or keyboard presses.
  4. press each button that you want to MAP a function to.
  5. take note of the "scanCODE" of each button, and what button on the OUYA you would like it to mimic. (write these down)
  6. Once you have made note of ALL of your buttons close this app.
  7. SIDE NOTE: If you want to add more of the OUYA buttons than what I have listed….
  8. Using the KeyTest app, press each button on the OUYA controller that you want to use.
  9. Look for the keyCode… it will read something like "keyCode=KEYCODE_BUTTON_A" you need only take note of "BUTTON_A" disregard any mention of "keyCode=KEYCODE_"
  10. Write these KEYCODES DOWN ;)
  12. Navigate to "system/usr/keylayouts/Generic.kl"

    Save a BACKUP of this file. Just in case (I had no issues, but others have)
  13. Genereic.kl is the file we want to edit. If you are using the Root Explorer I linked to, simply holding down the "O" button, on the OUYA controller, will bring up the options you can do with this file… you want to select "Open In Text Editor"
  14. YOu will then be warned that your system is "readOnly" and the app will offer to make it readWrite… tell it yes and continue on.
  15. We now see a LONG list of "key #" and to the right of each key is it's KEYCODE, or the function that happens when the button is pressed.
  16. find the keys, one by one, that you located earlier in this process (the keys for your new remote control)
  17. Now edit the text to the right of your key and replace its current ACTION with the KEYCODE we wrote down… or the KEYCODES i shared above.
  18. EXAMPLE: The button, on my MELE F10, that I wanted to use for a BACK key had a scanCode=102. So I located "key 102" be default the action was HOME… so it read "key 102 HOME"
  19. We simply need to change the HOME command, in my case, to "BUTTON_B" as this is the BACK button on the OUYA controller… making that line now read "key 102 BUTTON_B"
  20. Do this with each button one by one
  21. Now press the SYNC/MENU button in the center of your OUYA controller and select SAVE and EXIT
  22. Reboot the OUYA and you now have WHATEVER CONTROLLER you love… FULLY CONTROLLER the OUYA within its default UI!
  23. Hope this helped at least one other person!

Word of WARNING from user "denig"

  • You definitely show add a step 12)a) Backup the original "Generic.kl" file
  • People should know that by adapting the generic.kl file to their remote, they will likely break the functionality of a standard USB keyboard. Meaning that once the generic.kl file is changed certain keys will no long do what you think they should be doing
  • Any invalid entries in the generic.kl file will lead to OUYA ignoring all USB related input. (Example... I wanted to map the left arrow to the skip back button on my remote, so I mapped "LEFT" to "key ##". LEFT is wrong and upon rebooting by remote and keyboard no longer worked.
  • This is a time consuming effort that should be done by only changing a few key mappings at a time, testing and then repeating
  • I honestly recommend this for those without smart phones and have a remote lying around. For those with Harmony remotes, we'll have to wait for CEC-HDMI support :(

If you own a Mele F10... here is MY Generic.kl. Simply save your current version sonewhere and place this in the correct folder.