Clone this wiki locally
LocalViewServer is an Android Library that implements ViewServer as part of an application instead of as a system component.
When a device is in secure mode, system ViewServer is not available, so this approach provides an alternative to be able to obtain the View hierarchy used by AndroidViewClient,
LocalViewServer should be included in your project as an Android Library as showed in the following image.
TemperatureConverter is a sample application used to demonstrated several testing techniques and features.
Device with secure mode enabled
If secure mode is enabled and you run this command line:
(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")
this is obtained:
System is secure: AVC won't work
Running TemperatureConverter with LocalViewServer will circumvent this restriction, though for this sole application.
In such case you will be able to run:
$ dump.py -IS
com.android.internal.policy.impl.PhoneWindow$DecorView NO_ID None android.widget.LinearLayout NO_ID None android.view.ViewStub id/action_mode_bar_stub None android.widget.FrameLayout NO_ID None android.widget.TextView id/title TemperatureConverter android.widget.FrameLayout id/content None android.widget.LinearLayout id/main_layout None android.widget.TextView NO_ID Enter the temperature to convert android.widget.TextView id/celsius_label Celsius com.example.i2at.tc.EditNumber id/celsius android.widget.TextView id/fahrenheit_label Fahrenheit com.example.i2at.tc.EditNumber id/fahrenheit android.widget.TextView id/debug
When an application supporting LocalViewServer is running on the device,
monitor will be able to obtain the View hierarchy even if the device is in secure mode and does not support UiAutomator.
The following screenshot shows
monitor displaying the TemperatureConverterActivity with LocalViewServer enabled.