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

Reply via email to