Monday, May 20, 2013

How to check if an app uses binary translation

Binary translation is used by Intel based Android devices in order to run apps that are uses native ARM code. This is good for compatibility but bad for performance as native x86 code in the app would be a better solution.

So how can one tell if an app uses binary translation instead of native x86 code? Well, first you must have an Intel based Android device like the Asus Fonepad or this would be rather pointless. Second you need to have a way to read the android logs. I use the command logcat but there are also apps that can be used for this.

Luckily the Asus Fonepad includes a busybox binary that has the "grep" command built in. That saves a lot of time and I'm using an adb shell connection and this command "logcat | busybox grep houdini".

shell@android:/ $ logcat | busybox grep houdini
logcat | busybox grep houdini
D/houdini (11555): [11555] Loading library(version: 3.1.3.43168 RELEASE)... successfully.


Here we can see that an app with PID 11555 has activated libhoudini.so which is the lib that does the ARM to x86 binary translation.

So let's find out what app is using PID 11555 (once again I use grep to save some time).

shell@android:/ $ ps | busybox grep 11555
ps | busybox grep 11555
u0_a117   11555 128   1034944 45356 ffffffff 00000000 S com.spotify.mobile.android.service


It turns out Spotify uses native code but only includes ARM code.

No comments:

Post a Comment