Because of this bug in java: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4215269
hierarchyviewer doesn't work with the android-x86. The windows's and views's hashcode could be negative integers, and Integer.parseInt can not cope with it. Two git repo need patch, the first is sdk: diff --git a/hierarchyviewer/src/com/android/hierarchyviewer/device/Window.java b/hierarchyviewer/src/com/android/hierarchyviewer/device/Window.java index 0417df6..6645d01 100644 --- a/hierarchyviewer/src/com/android/hierarchyviewer/device/Window.java +++ b/hierarchyviewer/src/com/android/hierarchyviewer/device/Window.java @@ -20,9 +20,9 @@ public class Window { public static final Window FOCUSED_WINDOW = new Window("<Focused Window>", -1); private String title; - private int hashCode; + private long hashCode; - public Window(String title, int hashCode) { + public Window(String title, long hashCode) { this.title = title; this.hashCode = hashCode; } @@ -31,12 +31,12 @@ public class Window { return title; } - public int getHashCode() { + public long getHashCode() { return hashCode; } public String encode() { - return Integer.toHexString(hashCode); + return Long.toHexString(hashCode); } public String toString() { diff --git a/hierarchyviewer/src/com/android/hierarchyviewer/scene/WindowsLoader.java b/hierarchyviewer/src/com/android/hierarchyviewer/scene/WindowsLoader.java index ef93707..758061a 100644 --- a/hierarchyviewer/src/com/android/hierarchyviewer/scene/WindowsLoader.java +++ b/hierarchyviewer/src/com/android/hierarchyviewer/scene/WindowsLoader.java @@ -58,7 +58,7 @@ public class WindowsLoader { int index = line.indexOf(' '); if (index != -1) { Window w = new Window(line.substring(index + 1), - Integer.parseInt(line.substring(0, index), 16)); + Long.parseLong(line.substring(0, index), 16)); windows.add(w); } } The second is frameworks/base: diff --git a/core/java/android/view/ViewDebug.java b/core/java/android/view/ViewDebug.java index 4baf612..efb1558 100644 --- a/core/java/android/view/ViewDebug.java +++ b/core/java/android/view/ViewDebug.java @@ -702,7 +702,7 @@ public class ViewDebug { if (parameter.indexOf('@') != -1) { final String[] ids = parameter.split("@"); final String className = ids[0]; - final int hashCode = Integer.parseInt(ids[1], 16); + final long hashCode = Long.parseLong(ids[1], 16); View view = root.getRootView(); if (view instanceof ViewGroup) { @@ -927,7 +927,8 @@ public class ViewDebug { } } - private static View findView(ViewGroup group, String className, int hashCode) { + private static View findView(ViewGroup group, String className, long hc_long) { + int hashCode = (int) hc_long; if (isRequestedView(group, className, hashCode)) { return group; } diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java index 8709f54..25c16b8 100644 --- a/services/java/com/android/server/WindowManagerService.java +++ b/services/java/com/android/server/WindowManagerService.java @@ -4667,7 +4667,7 @@ public class WindowManagerService extends IWindowManager.Stub index = parameters.length(); } final String code = parameters.substring(0, index); - int hashCode = "ffffffff".equals(code) ? -1 : Integer.parseInt(code, 16); + long hashCode = "ffffffff".equals(code) ? -1 : Long.parseLong(code, 16); // Extract the command's parameter after the window description if (index < parameters.length()) { @@ -4711,7 +4711,8 @@ public class WindowManagerService extends IWindowManager.Stub return success; } - private WindowState findWindow(int hashCode) { + private WindowState findWindow(long hc_long) { + int hashCode = (int)hc_long; if (hashCode == -1) { return getFocusedWindow(); } -- unsubscribe: android-porting+unsubscr...@googlegroups.com website: http://groups.google.com/group/android-porting