Inside Ouya framework APK

Is there a way to get the source code from an APK file?(android - Is there a way to get the source code from an APK file? - Stack Overflow)
I used Use the “Profile or Debug APK” feature in Android Studio and changed *.apk ending to *.zip and opened with Windows 11 native “extract files” feature.
Had idea when I get to edit framework so it redirects controller calls to correct physical inputs it would make a lot of Ouya games usable by any physical controller.

Interesting how Ouya controller maps to itself while other controllers are remapped. That creates huge mess if you try to remap controller with Android keylayout files. Linux kernel HID descriptor maps physical buttons, Android keylayout file maps physical buttons and Ouya framework APK maps physical input. What a mess!
File name is button_remap.json from Ouya framework apk

{
  "devices": [
    {
      "alias": [
        {
          "name": "M.O.J.O."
        }
      ],
      "controller": [
        {
          "alias": [
            {
              "name": "Mad Catz C.T.R.L.R (Smart)",
              "friendly_name": "Mad Catz C.T.R.L.R (Smart)",
              "fallback": true
            }
          ],
          "axis_remap": [
            {
              "source_axis": 0,
              "destination_axis": 0
            },
            {
              "source_axis": 1,
              "destination_axis": 1
            },
            {
              "source_axis": 22,
              "destination_axis": 18
            },
            {
              "source_axis": 11,
              "destination_axis": 11
            },
            {
              "source_axis": 14,
              "destination_axis": 14
            },
            {
              "source_axis": 23,
              "destination_axis": 17
            }
          ],
          "button_is_axis": [
            {
              "source_axis": 16,
              "action_down_min": -1,
              "action_down_max": -1,
              "destination_keycode": 19
            },
            {
              "source_axis": 16,
              "action_down_min": 1,
              "action_down_max": 1,
              "destination_keycode": 20
            },
            {
              "source_axis": 15,
              "action_down_min": 1,
              "action_down_max": 1,
              "destination_keycode": 22
            },
            {
              "source_axis": 15,
              "action_down_min": -1,
              "action_down_max": -1,
              "destination_keycode": 21
            },
            {
              "source_axis": 23,
              "action_down_min": 0.5,
              "action_down_max": 1,
              "destination_keycode": 104
            },
            {
              "source_axis": 22,
              "action_down_min": 0.5,
              "action_down_max": 1,
              "destination_keycode": 105
            }
          ],
          "button": [
            {
              "source_keycode": 108,
              "destination_keycode": 82
            },
            {
              "source_keycode": 96,
              "destination_keycode": 96
            },
            {
              "source_keycode": 99,
              "destination_keycode": 99
            },
            {
              "source_keycode": 100,
              "destination_keycode": 100
            },
            {
              "source_keycode": 97,
              "destination_keycode": 97
            },
            {
              "source_keycode": 102,
              "destination_keycode": 102
            },
            {
              "source_keycode": 103,
              "destination_keycode": 103
            },
            {
              "source_keycode": 106,
              "destination_keycode": 106
            },
            {
              "source_keycode": 107,
              "destination_keycode": 107
            },
            {
              "source_keycode": 19,
              "destination_keycode": 19
            },
            {
              "source_keycode": 20,
              "destination_keycode": 20
            },
            {
              "source_keycode": 22,
              "destination_keycode": 22
            },
            {
              "source_keycode": 21,
              "destination_keycode": 21
            }
          ]
        },
        {
          "alias": [
            {
              "name": "OUYA Game Controller",
              "friendly_name": "OUYA Game Controller"
            }
          ],
          "axis_remap": [
            {
              "source_axis": 0,
              "destination_axis": 0
            },
            {
              "source_axis": 1,
              "destination_axis": 1
            },
            {
              "source_axis": 11,
              "destination_axis": 11
            },
            {
              "source_axis": 14,
              "destination_axis": 14
            },
            {
              "source_axis": 17,
              "destination_axis": 17
            },
            {
              "source_axis": 18,
              "destination_axis": 18
            }
          ],
          "button_is_axis": [
            {
              "source_axis": 16,
              "action_down_min": -1,
              "action_down_max": -1,
              "destination_keycode": 19
            },
            {
              "source_axis": 16,
              "action_down_min": 1,
              "action_down_max": 1,
              "destination_keycode": 20
            },
            {
              "source_axis": 15,
              "action_down_min": 1,
              "action_down_max": 1,
              "destination_keycode": 22
            },
            {
              "source_axis": 15,
              "action_down_min": -1,
              "action_down_max": -1,
              "destination_keycode": 21
            },
            {
              "source_axis": 23,
              "action_down_min": 0.5,
              "action_down_max": 1,
              "destination_keycode": 104
            },
            {
              "source_axis": 22,
              "action_down_min": 0.5,
              "action_down_max": 1,
              "destination_keycode": 105
            }
          ],
          "button": [
            {
              "source_keycode": 108,
              "destination_keycode": 82
            },
            {
              "source_keycode": 96,
              "destination_keycode": 96
            },
            {
              "source_keycode": 99,
              "destination_keycode": 99
            },
            {
              "source_keycode": 100,
              "destination_keycode": 100
            },
            {
              "source_keycode": 97,
              "destination_keycode": 97
            },
            {
              "source_keycode": 102,
              "destination_keycode": 102
            },
            {
              "source_keycode": 103,
              "destination_keycode": 103
            },
            {
              "source_keycode": 106,
              "destination_keycode": 106
            },
            {
              "source_keycode": 107,
              "destination_keycode": 107
            },
            {
              "source_keycode": 19,
              "destination_keycode": 19
            },
            {
              "source_keycode": 20,
              "destination_keycode": 20
            },
            {
              "source_keycode": 22,
              "destination_keycode": 22
            },
            {
              "source_keycode": 21,
              "destination_keycode": 21
            }
          ]
        },
        {
          "alias": [
            {
              "name": "Sony Computer Entertainment Wireless Controller",
              "friendly_name": "Sony Computer Entertainment Wireless Controller"
            }
          ],
          "axis_remap": [
            {
              "source_axis": 12,
              "destination_axis": 17
            },
            {
              "source_axis": 13,
              "destination_axis": 18
            }
          ],
          "button_is_axis": [
            {
              "source_axis": 16,
              "action_down_min": -1,
              "action_down_max": -1,
              "destination_keycode": 19
            },
            {
              "source_axis": 16,
              "action_down_min": 1,
              "action_down_max": 1,
              "destination_keycode": 20
            },
            {
              "source_axis": 15,
              "action_down_min": 1,
              "action_down_max": 1,
              "destination_keycode": 22
            },
            {
              "source_axis": 15,
              "action_down_min": -1,
              "action_down_max": -1,
              "destination_keycode": 21
            }
          ],
          "button": [
            {
              "source_keycode": 110,
              "destination_keycode": 82
            },
            {
              "source_keycode": 104,
              "destination_keycode": 82
            },
            {
              "source_keycode": 105,
              "destination_keycode": 82
            },
            {
              "source_keycode": 97,
              "destination_keycode": 96
            },
            {
              "source_keycode": 96,
              "destination_keycode": 99
            },
            {
              "source_keycode": 99,
              "destination_keycode": 100
            },
            {
              "source_keycode": 98,
              "destination_keycode": 97
            },
            {
              "source_keycode": 100,
              "destination_keycode": 102
            },
            {
              "source_keycode": 101,
              "destination_keycode": 103
            },
            {
              "source_keycode": 109,
              "destination_keycode": 106
            },
            {
              "source_keycode": 108,
              "destination_keycode": 107
            },
            {
              "source_keycode": 102,
              "destination_keycode": 0
            },
            {
              "source_keycode": 103,
              "destination_keycode": 0
            }
          ]
        },
        {
          "alias": [
            {
              "name": "Microsoft X-Box 360 pad",
              "friendly_name": "Microsoft X-Box 360 pad"
            }
          ],
          "button_is_axis": [
            {
              "source_axis": 16,
              "action_down_min": -1,
              "action_down_max": -1,
              "destination_keycode": 19
            },
            {
              "source_axis": 16,
              "action_down_min": 1,
              "action_down_max": 1,
              "destination_keycode": 20
            },
            {
              "source_axis": 15,
              "action_down_min": 1,
              "action_down_max": 1,
              "destination_keycode": 22
            },
            {
              "source_axis": 15,
              "action_down_min": -1,
              "action_down_max": -1,
              "destination_keycode": 21
            }
          ],
          "button": [
            {
              "source_keycode": 96,
              "destination_keycode": 96
            },
            {
              "source_keycode": 97,
              "destination_keycode": 97
            },
            {
              "source_keycode": 99,
              "destination_keycode": 99
            },
            {
              "source_keycode": 100,
              "destination_keycode": 100
            },
            {
              "source_keycode": 102,
              "destination_keycode": 102
            },
            {
              "source_keycode": 103,
              "destination_keycode": 103
            },
            {
              "source_keycode": 106,
              "destination_keycode": 106
            },
            {
              "source_keycode": 107,
              "destination_keycode": 107
            }
          ]
        }
      ]
    },
    {
      "alias": [
        {
          "name": "OUYA",
          "fallback": true
        }
      ],
      "controller": [
        {
          "alias": [
            {
              "name": "Amazon Fire Game Controller",
              "friendly_name": "Amazon Fire Game Controller"
            }
          ],
          "axis_remap": [
            {
              "source_axis": 22,
              "destination_axis": 18
            },
            {
              "source_axis": 23,
              "destination_axis": 17
            }
          ],
          "button_is_axis": [
            {
              "source_axis": 16,
              "action_down_min": -1,
              "action_down_max": -1,
              "destination_keycode": 19
            },
            {
              "source_axis": 16,
              "action_down_min": 1,
              "action_down_max": 1,
              "destination_keycode": 20
            },
            {
              "source_axis": 15,
              "action_down_min": 1,
              "action_down_max": 1,
              "destination_keycode": 22
            },
            {
              "source_axis": 15,
              "action_down_min": -1,
              "action_down_max": -1,
              "destination_keycode": 21
            }
          ],
          "button": [
            {
              "source_keycode": 96,
              "destination_keycode": 96
            },
            {
              "source_keycode": 99,
              "destination_keycode": 99
            },
            {
              "source_keycode": 100,
              "destination_keycode": 100
            },
            {
              "source_keycode": 97,
              "destination_keycode": 97
            },
            {
              "source_keycode": 102,
              "destination_keycode": 102
            },
            {
              "source_keycode": 103,
              "destination_keycode": 103
            },
            {
              "source_keycode": 106,
              "destination_keycode": 106
            },
            {
              "source_keycode": 107,
              "destination_keycode": 107
            },
            {
              "source_keycode": 19,
              "destination_keycode": 19
            },
            {
              "source_keycode": 20,
              "destination_keycode": 20
            },
            {
              "source_keycode": 22,
              "destination_keycode": 22
            },
            {
              "source_keycode": 21,
              "destination_keycode": 21
            }
          ]
        },
        {
          "alias": [
            {
              "name": "GameStick Controller",
              "friendly_name": "GameStick Controller"
            }
          ],
          "button_is_axis": [
            {
              "source_axis": 16,
              "action_down_min": -1,
              "action_down_max": -1,
              "destination_keycode": 19
            },
            {
              "source_axis": 16,
              "action_down_min": 1,
              "action_down_max": 1,
              "destination_keycode": 20
            },
            {
              "source_axis": 15,
              "action_down_min": 1,
              "action_down_max": 1,
              "destination_keycode": 22
            },
            {
              "source_axis": 15,
              "action_down_min": -1,
              "action_down_max": -1,
              "destination_keycode": 21
            }
          ],
          "button": [
            {
              "source_keycode": 96,
              "destination_keycode": 96
            },
            {
              "source_keycode": 99,
              "destination_keycode": 99
            },
            {
              "source_keycode": 100,
              "destination_keycode": 100
            },
            {
              "source_keycode": 97,
              "destination_keycode": 97
            },
            {
              "source_keycode": 102,
              "destination_keycode": 102
            },
            {
              "source_keycode": 103,
              "destination_keycode": 103
            },
            {
              "source_keycode": 106,
              "destination_keycode": 106
            },
            {
              "source_keycode": 107,
              "destination_keycode": 107
            },
            {
              "source_keycode": 19,
              "destination_keycode": 19,
              "exclude_source": [
                16777232
              ]
            },
            {
              "source_keycode": 20,
              "destination_keycode": 20,
              "exclude_source": [
                16777232
              ]
            },
            {
              "source_keycode": 22,
              "destination_keycode": 22,
              "exclude_source": [
                16777232
              ]
            },
            {
              "source_keycode": 21,
              "destination_keycode": 21,
              "exclude_source": [
                16777232
              ]
            }
          ]
        },
        {
          "alias": [
            {
              "name": "Microsoft X-Box 360 pad",
              "friendly_name": "Microsoft X-Box 360 pad"
            }
          ],
          "button_is_axis": [
            {
              "source_axis": 16,
              "action_down_min": -1,
              "action_down_max": -1,
              "destination_keycode": 19
            },
            {
              "source_axis": 16,
              "action_down_min": 1,
              "action_down_max": 1,
              "destination_keycode": 20
            },
            {
              "source_axis": 15,
              "action_down_min": 1,
              "action_down_max": 1,
              "destination_keycode": 22
            },
            {
              "source_axis": 15,
              "action_down_min": -1,
              "action_down_max": -1,
              "destination_keycode": 21
            }
          ],
          "button": [
            {
              "source_keycode": 96,
              "destination_keycode": 96
            },
            {
              "source_keycode": 97,
              "destination_keycode": 97
            },
            {
              "source_keycode": 99,
              "destination_keycode": 99
            },
            {
              "source_keycode": 100,
              "destination_keycode": 100
            },
            {
              "source_keycode": 102,
              "destination_keycode": 102
            },
            {
              "source_keycode": 103,
              "destination_keycode": 103
            },
            {
              "source_keycode": 106,
              "destination_keycode": 106
            },
            {
              "source_keycode": 107,
              "destination_keycode": 107
            }
          ]
        },
        {
          "alias": [
            {
              "name": "OUYA Game Controller",
              "friendly_name": "OUYA Game Controller",
              "fallback": true
            }
          ],
          "button": [
            {
              "source_keycode": 96,
              "destination_keycode": 96
            },
            {
              "source_keycode": 99,
              "destination_keycode": 99
            },
            {
              "source_keycode": 100,
              "destination_keycode": 100
            },
            {
              "source_keycode": 97,
              "destination_keycode": 97
            },
            {
              "source_keycode": 102,
              "destination_keycode": 102
            },
            {
              "source_keycode": 103,
              "destination_keycode": 103
            },
            {
              "source_keycode": 106,
              "destination_keycode": 106
            },
            {
              "source_keycode": 107,
              "destination_keycode": 107
            },
            {
              "source_keycode": 19,
              "destination_keycode": 19
            },
            {
              "source_keycode": 20,
              "destination_keycode": 20
            },
            {
              "source_keycode": 22,
              "destination_keycode": 22
            },
            {
              "source_keycode": 21,
              "destination_keycode": 21
            }
          ]
        },
        {
          "alias": [
            {
              "name": "Sony Computer Entertainment Wireless Controller",
              "friendly_name": "Sony Computer Entertainment Wireless Controller"
            }
          ],
          "axis_remap": [
            {
              "source_axis": 12,
              "destination_axis": 17
            },
            {
              "source_axis": 13,
              "destination_axis": 18
            }
          ],
          "button_is_axis": [
            {
              "source_axis": 16,
              "action_down_min": -1,
              "action_down_max": -1,
              "destination_keycode": 19
            },
            {
              "source_axis": 16,
              "action_down_min": 1,
              "action_down_max": 1,
              "destination_keycode": 20
            },
            {
              "source_axis": 15,
              "action_down_min": 1,
              "action_down_max": 1,
              "destination_keycode": 22
            },
            {
              "source_axis": 15,
              "action_down_min": -1,
              "action_down_max": -1,
              "destination_keycode": 21
            }
          ],
          "button": [
            {
              "source_keycode": 110,
              "destination_keycode": 82
            },
            {
              "source_keycode": 104,
              "destination_keycode": 82
            },
            {
              "source_keycode": 105,
              "destination_keycode": 82
            },
            {
              "source_keycode": 97,
              "destination_keycode": 96
            },
            {
              "source_keycode": 96,
              "destination_keycode": 99
            },
            {
              "source_keycode": 99,
              "destination_keycode": 100
            },
            {
              "source_keycode": 98,
              "destination_keycode": 97
            },
            {
              "source_keycode": 100,
              "destination_keycode": 102
            },
            {
              "source_keycode": 101,
              "destination_keycode": 103
            },
            {
              "source_keycode": 109,
              "destination_keycode": 106
            },
            {
              "source_keycode": 108,
              "destination_keycode": 107
            },
            {
              "source_keycode": 102,
              "destination_keycode": 0
            },
            {
              "source_keycode": 103,
              "destination_keycode": 0
            }
          ]
        },
        {
          "alias": [
            {
              "name": "Generic X-Box pad",
              "friendly_name": "Rock Candy X-Box 360 pad"
            }
          ],
          "button_is_axis": [
            {
              "source_axis": 16,
              "action_down_min": -1,
              "action_down_max": -1,
              "destination_keycode": 19
            },
            {
              "source_axis": 16,
              "action_down_min": 1,
              "action_down_max": 1,
              "destination_keycode": 20
            },
            {
              "source_axis": 15,
              "action_down_min": 1,
              "action_down_max": 1,
              "destination_keycode": 22
            },
            {
              "source_axis": 15,
              "action_down_min": -1,
              "action_down_max": -1,
              "destination_keycode": 21
            }
          ],
          "button": [
            {
              "source_keycode": 96,
              "destination_keycode": 96
            },
            {
              "source_keycode": 97,
              "destination_keycode": 97
            },
            {
              "source_keycode": 99,
              "destination_keycode": 99
            },
            {
              "source_keycode": 100,
              "destination_keycode": 100
            },
            {
              "source_keycode": 102,
              "destination_keycode": 102
            },
            {
              "source_keycode": 103,
              "destination_keycode": 103
            },
            {
              "source_keycode": 106,
              "destination_keycode": 106
            },
            {
              "source_keycode": 107,
              "destination_keycode": 107
            }
          ]
        },
        {
          "alias": [
            {
              "name": "PLAYSTATION(R)3 Controller",
              "friendly_name": "Sony PLAYSTATION(R)3 Controller"
            }
          ],
          "button": [
            {
              "source_keycode": 96,
              "destination_keycode": 96
            },
            {
              "source_keycode": 99,
              "destination_keycode": 99
            },
            {
              "source_keycode": 100,
              "destination_keycode": 100
            },
            {
              "source_keycode": 97,
              "destination_keycode": 97
            },
            {
              "source_keycode": 102,
              "destination_keycode": 102
            },
            {
              "source_keycode": 103,
              "destination_keycode": 103
            },
            {
              "source_keycode": 106,
              "destination_keycode": 106
            },
            {
              "source_keycode": 107,
              "destination_keycode": 107
            },
            {
              "source_keycode": 19,
              "destination_keycode": 19
            },
            {
              "source_keycode": 20,
              "destination_keycode": 20
            },
            {
              "source_keycode": 22,
              "destination_keycode": 22
            },
            {
              "source_keycode": 21,
              "destination_keycode": 21
            }
          ]
        },
        {
          "alias": [
            {
              "name": "Mad Catz C.T.R.L.R (Smart)",
              "friendly_name": "Mad Catz C.T.R.L.R (Smart)"
            }
          ],
          "axis_remap": [
            {
              "source_axis": 23,
              "destination_axis": 17
            },
            {
              "source_axis": 22,
              "destination_axis": 18
            }
          ],
          "button_is_axis": [
            {
              "source_axis": 16,
              "action_down_min": -1,
              "action_down_max": -1,
              "destination_keycode": 19
            },
            {
              "source_axis": 16,
              "action_down_min": 1,
              "action_down_max": 1,
              "destination_keycode": 20
            },
            {
              "source_axis": 15,
              "action_down_min": 1,
              "action_down_max": 1,
              "destination_keycode": 22
            },
            {
              "source_axis": 15,
              "action_down_min": -1,
              "action_down_max": -1,
              "destination_keycode": 21
            },
            {
              "source_axis": 23,
              "action_down_min": 0.5,
              "action_down_max": 1,
              "destination_keycode": 104
            },
            {
              "source_axis": 22,
              "action_down_min": 0.5,
              "action_down_max": 1,
              "destination_keycode": 105
            }
          ],
          "button": [
            {
              "source_keycode": 108,
              "destination_keycode": 82
            },
            {
              "source_keycode": 96,
              "destination_keycode": 96
            },
            {
              "source_keycode": 99,
              "destination_keycode": 99
            },
            {
              "source_keycode": 100,
              "destination_keycode": 100
            },
            {
              "source_keycode": 97,
              "destination_keycode": 97
            },
            {
              "source_keycode": 102,
              "destination_keycode": 102
            },
            {
              "source_keycode": 103,
              "destination_keycode": 103
            },
            {
              "source_keycode": 106,
              "destination_keycode": 106
            },
            {
              "source_keycode": 107,
              "destination_keycode": 107
            },
            {
              "source_keycode": 19,
              "destination_keycode": 19
            },
            {
              "source_keycode": 20,
              "destination_keycode": 20
            },
            {
              "source_keycode": 22,
              "destination_keycode": 22
            },
            {
              "source_keycode": 21,
              "destination_keycode": 21
            }
          ]
        },
        {
          "alias": [
            {
              "name": "NYKO PLAYPAD",
              "friendly_name": "NYKO PLAYPAD"
            }
          ],
          "axis_remap": [
            {
              "source_axis": 23,
              "destination_axis": 17
            },
            {
              "source_axis": 22,
              "destination_axis": 18
            }
          ],
          "button": [
            {
              "source_keycode": 96,
              "destination_keycode": 96
            },
            {
              "source_keycode": 99,
              "destination_keycode": 99
            },
            {
              "source_keycode": 100,
              "destination_keycode": 100
            },
            {
              "source_keycode": 97,
              "destination_keycode": 97
            },
            {
              "source_keycode": 102,
              "destination_keycode": 102
            },
            {
              "source_keycode": 103,
              "destination_keycode": 103
            },
            {
              "source_keycode": 19,
              "destination_keycode": 19
            },
            {
              "source_keycode": 20,
              "destination_keycode": 20
            },
            {
              "source_keycode": 22,
              "destination_keycode": 22
            },
            {
              "source_keycode": 21,
              "destination_keycode": 21
            }
          ]
        },
        {

There is 320000 limit on code? Had to post in two parts:

          "alias": [
            {
              "name": "NYKO PLAYPAD PRO",
              "friendly_name": "NYKO PLAYPAD PRO"
            }
          ],
          "axis_remap": [
            {
              "source_axis": 23,
              "destination_axis": 17
            },
            {
              "source_axis": 22,
              "destination_axis": 18
            }
          ],
          "button": [
            {
              "source_keycode": 96,
              "destination_keycode": 96
            },
            {
              "source_keycode": 99,
              "destination_keycode": 99
            },
            {
              "source_keycode": 100,
              "destination_keycode": 100
            },
            {
              "source_keycode": 97,
              "destination_keycode": 97
            },
            {
              "source_keycode": 102,
              "destination_keycode": 102
            },
            {
              "source_keycode": 103,
              "destination_keycode": 103
            },
            {
              "source_keycode": 106,
              "destination_keycode": 106
            },
            {
              "source_keycode": 107,
              "destination_keycode": 107
            },
            {
              "source_keycode": 19,
              "destination_keycode": 19
            },
            {
              "source_keycode": 20,
              "destination_keycode": 20
            },
            {
              "source_keycode": 22,
              "destination_keycode": 22
            },
            {
              "source_keycode": 21,
              "destination_keycode": 21
            }
          ]
        }
      ]
    }
  ]
}

I usually use Jadx-gui to inspect the source code of apk files.
Modifying that code is not so easy; for that you have to convert the classes to .smali files, modify them and re-generate the classes. I documented my approach here: Playing Tomb Raider 1 on OUYA

1 Like