Skip to content
dtmilano edited this page Feb 1, 2013 · 23 revisions

AndroidViewClient has two possible back-ends:

  • ViewServer
  • UiAutomator

UiAutomator works on Android API 16 and higher, so if your device has a previous version your only alternative is ViewServer.

System ViewServer is started only when the device is not considered secure.

    private boolean isSystemSecure() {
        return "1".equals(SystemProperties.get(SYSTEM_SECURE, "1")) &&
                "0".equals(SystemProperties.get(SYSTEM_DEBUGGABLE, "0"));
    }

The properties involved to consider a device secure are

private static final String SYSTEM_SECURE = "ro.secure";
private static final String SYSTEM_DEBUGGABLE = "ro.debuggable";

This oneliner can be used to test these properties

$ (eval $(adb shell getprop | dos2unix | egrep '\[ro\.secure]|\[ro\.debuggable]' | sed 's/\./_/g; s/]: /=/g; s/[][]//g'); [[ 1 == $ro_secure && 0 == $ro_debuggable ]] && echo "System is secure: AVC won't work" || echo "System is not secure: AVC will work")

when run, this oneliner will tell you if AndroidViewClient could work on your device:

System is secure: AVC won't work

If you run it against any emulator (which is always not secure) it will return

System is not secure: AVC will work

Hierarchyviewer

hierarchyviewer is one of the standard Android tools (now deprecated in favor of tools/monitor) and it's described here.

For its operation hierarchyviewer uses the same ViewServer as AndroidViewClient so if you have doubts about it working on your device just try to run

$ hierarchyviewer

and if you receive a message like this

00:00:00 E/hierarchyviewer: Unable to debug device 0123456789

then neither AndroidViewClient or hierarchyviewer will work unless you follow (at your own risk) some of the instructions mentioned in Resources.

Resources

Clone this wiki locally