La vista de la jerarquía de Android Debug Monitor no se muestra

Estoy intentando conectar mi aplicación en ADM, pero desafortunadamente la vista de jerarquía no se muestra. ¿Cómo debo conectar mi aplicación a la herramienta ADM?

Dispositivo: Nexus 4

Os: 4.3.3

Error:

[2014-02-06 13:00:14 - hierarchyviewer]Missing forwarded port for 021df5e049116bac [2014-02-06 13:00:14 - hierarchyviewer]Unable to get view server version from device 021df5e049116bac [2014-02-06 13:00:14 - hierarchyviewer]Missing forwarded port for 021df5e049116bac [2014-02-06 13:00:14 - hierarchyviewer]Unable to get view server protocol version from device 021df5e049116bac [2014-02-06 13:00:14 - ViewServerDevice]Unable to debug device: lge-nexus_4-021df5e049116bac 

Consulte Perfil de su diseño con Hierarchy Viewer para el uso del visor de jerarquía.

Hoy uso el visor de jerarquía con mi aplicación, y obtengo un problema muy similar tanto en el dispositivo silulador como en el dispositivo real, con la ventana de visualización de árbol del visor de jerarquía en negro.

Nota: para la versión más nueva de android studio, puede abrir el visor de jerarquía con Tools > Android > Android Device Monitor > Window > Open Perspective... > Hierarchy View

enter image description here

A continuación, le mostraré cómo resolver el problema en el silulador y el dispositivo real.

Información: el modo de depuración del dispositivo está activado, no pruebo si influye en el resultado siguiente.

un). verificar si el dispositivo tiene abierto el servidor de visualización

 bogon:~ roofe$ adb shell service call window 3 Result: Parcel(00000000 00000000 '........') 

Nota: si obtienes

no puede encontrar el comando adb

adb generalmente está en el camino de sdk, el mío está en /Users/roofe/Library/Android/sdk/platform-tools/adb . Luego puede agregarlo a la ruta o crear un alias para ella.

Puse alias adb='/Users/roofe/Library/Android/sdk/platform-tools/adb' en .bash_profile debajo de la ruta del usuario, luego source ./.bash_profile . Aquí el comando adb debería funcionar.

información de salida:

Ver servidor apagado: Result: Parcel(00000000 00000000 '........')

Ver servidor encendido: Result: Parcel(00000000 00000001 '........')

Si el servidor de vista está activado, el visor de jerarquía debería funcionar bien. Y no necesitas leer a continuación.

Lamentablemente, si su servidor de vistas está apagado, continúe. Ambos servidor de vista de mi simulador y dispositivo de lectura están apagados.

segundo). Inicie el servidor de View

 bogon:~ roofe$ adb shell service call window 1 i32 4939 Result: Parcel(00000000 00000001 '........') 

Si el resultado es Result: Parcel(00000000 00000001 '........') , el servidor de vista se ha iniciado. Mientras que si el resultado es Result: Parcel(00000000 00000000 '........') , el servidor de vista no se puede iniciar.

También puede cerrar el servidor de visualización con

 adb shell service call window 2 i32 4939 

Aquí ejecuta el comando dos veces para apagarlo, quizás haya un tiempo de ejecución aquí.

 bogon:~ roofe$ adb shell service call window 2 i32 4939 Result: Parcel(00000000 00000001 '........') bogon:~ roofe$ adb shell service call window 2 i32 4939 Result: Parcel(00000000 00000000 '........') 

La mayoría del dispositivo real no puede iniciar el servidor de visualización. Por seguridad, Android en un dispositivo real tiene restricciones sobre esto. Puede encontrar el código relativo en el código fuente del archivo WindowManageService.java de Andorid

 if (!checkCallingPermission(Manifest.permission.DUMP, "startViewServer")) { return false; } 

Entonces, si eres un genio cracker, puedes rootear tu dispositivo para eliminar este restrictivo. No lo hice. Si tu bash es exitoso, muéstramelo. Seré muy apreciado en su trabajo inteligente.

Aquí mi simulador funciona. Mientras que el dispositivo real no. Si su servidor de vistas todavía está apagado, continúe.

do). Usando el protocolo ddm , un método del doc de Android studio doc. Profile Your Layout with Hierarchy Viewer

Si está utilizando el emulador de Android, puede omitir esta sección. De lo contrario, debe configurar su dispositivo de la siguiente manera.

Nota: su dispositivo debe ejecutar Android 4.1 o superior.

Habilite las Opciones de desarrollador en su dispositivo.

Establezca la variable de entorno ANDROID_HVPROTO = ddm en su máquina de desarrollo.

Esta variable le dice a Hierarchy Viewer que se conecte al dispositivo usando el protocolo ddm, que es el mismo que el protocolo DDMS. La advertencia es que solo puede haber un proceso en el host que se conecta al dispositivo, por lo que debe eliminar cualquier otra sesión de DDMS para ejecutar Hierarchy Viewer.

Agregue la export ANDROID_HVPROTO=ddm a su .bash_profile luego source ./.bash_profile .

Elimine la aplicación instalada y reinicie Android Studio , luego instale su aplicación y podrá verla en jerarquía ahora.

Nota: configuro el ddm sin reiniciar Android Studio a, no puedo jerarquizarlo. Un día después, me doy cuenta y hago una prueba. Después de establecer el ppm, creo que es mejor reiniciar el estudio de Android. Supongo que cuando el estudio de Android comience leerá esa configuración, puede guardarla en caché.

No lo probé sin desinstalar la aplicación.

re). configurar un servidor de vistas

Por favor, no te frustres aquí. Iniciar un servidor de vistas es muy fácil.

Herramienta: ViewServer en github

agregue esto a su build.gradle

 allprojects { repositories { jcenter() maven {url "https://jitpack.io"} } } dependencies { ... compile 'com.github.romainguy:ViewServer:017c01cd512cac3ec054d9eee05fc48c5a9d2de' } 

Agregar permiso de INTERNET en el archivo de manifest

  

Luego regiester el servidor de visitas a la actividad que desea inspeccionar

 public class MyActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set content view, etc. ViewServer.get(this).addWindow(this); } public void onDestroy() { super.onDestroy(); ViewServer.get(this).removeWindow(this); } public void onResume() { super.onResume(); ViewServer.get(this).setFocusedWindow(this); } } 

Por ahora, puedo ejecutar la vista de Jerarquía en mi dispositivo real.

enter image description here

Últimas herramientas Android SDK 25.3.0 eliminar hierarchyviewer puede encontrar cambios en las herramientas SDK aquí

Intenta reinstalar los controladores del dispositivo. A continuación, asegúrese de que adb esté en funcionamiento, entonces debe poder conectarse correctamente a través del administrador de dispositivos.