Loading core/java/android/app/ActivityThread.java +1 −0 Original line number Original line Diff line number Diff line Loading @@ -6254,6 +6254,7 @@ public final class ActivityThread extends ClientTransactionHandler { // send up app name; do this *before* waiting for debugger // send up app name; do this *before* waiting for debugger Process.setArgV0(data.processName); Process.setArgV0(data.processName); android.ddm.DdmHandleAppName.setAppName(data.processName, android.ddm.DdmHandleAppName.setAppName(data.processName, data.appInfo.packageName, UserHandle.myUserId()); UserHandle.myUserId()); VMRuntime.setProcessPackageName(data.appInfo.packageName); VMRuntime.setProcessPackageName(data.appInfo.packageName); Loading core/java/android/ddm/DdmHandleAppName.java +51 −13 Original line number Original line Diff line number Diff line Loading @@ -17,10 +17,12 @@ package android.ddm; package android.ddm; import android.annotation.UnsupportedAppUsage; import android.annotation.UnsupportedAppUsage; import android.util.Log; import org.apache.harmony.dalvik.ddmc.Chunk; import org.apache.harmony.dalvik.ddmc.Chunk; import org.apache.harmony.dalvik.ddmc.ChunkHandler; import org.apache.harmony.dalvik.ddmc.ChunkHandler; import org.apache.harmony.dalvik.ddmc.DdmServer; import org.apache.harmony.dalvik.ddmc.DdmServer; import android.util.Log; import java.nio.ByteBuffer; import java.nio.ByteBuffer; Loading @@ -31,7 +33,7 @@ public class DdmHandleAppName extends ChunkHandler { public static final int CHUNK_APNM = type("APNM"); public static final int CHUNK_APNM = type("APNM"); private volatile static String mAppName = ""; private static volatile Names sNames = new Names("", ""); private static DdmHandleAppName mInstance = new DdmHandleAppName(); private static DdmHandleAppName mInstance = new DdmHandleAppName(); Loading Loading @@ -65,46 +67,82 @@ public class DdmHandleAppName extends ChunkHandler { /** * Sets all names to the same name. */ @UnsupportedAppUsage public static void setAppName(String name, int userId) { setAppName(name, name, userId); } /** /** * Set the application name. Called when we get named, which may be * Set the application name. Called when we get named, which may be * before or after DDMS connects. For the latter we need to send up * before or after DDMS connects. For the latter we need to send up * an APNM message. * an APNM message. */ */ @UnsupportedAppUsage @UnsupportedAppUsage public static void setAppName(String name, int userId) { public static void setAppName(String appName, String pkgName, int userId) { if (name == null || name.length() == 0) if (appName == null || appName.isEmpty() || pkgName == null || pkgName.isEmpty()) return; return; mAppName = name; sNames = new Names(appName, pkgName); // if DDMS is already connected, send the app name up // if DDMS is already connected, send the app name up sendAPNM(name, userId); sendAPNM(appName, pkgName, userId); } } @UnsupportedAppUsage @UnsupportedAppUsage public static String getAppName() { public static Names getNames() { return mAppName; return sNames; } } /* /** * Send an APNM (APplication NaMe) chunk. * Send an APNM (APplication NaMe) chunk. */ */ private static void sendAPNM(String appName, int userId) { private static void sendAPNM(String appName, String pkgName, int userId) { if (false) if (false) Log.v("ddm", "Sending app name"); Log.v("ddm", "Sending app name"); ByteBuffer out = ByteBuffer.allocate( ByteBuffer out = ByteBuffer.allocate( 4 /* appName's length */ 4 /* appName's length */ + appName.length() * 2 /* appName */ + appName.length() * 2 /* appName */ + 4 /* userId */); + 4 /* userId */ + 4 /* pkgName's length */ + pkgName.length() * 2 /* pkgName */); out.order(ChunkHandler.CHUNK_ORDER); out.order(ChunkHandler.CHUNK_ORDER); out.putInt(appName.length()); out.putInt(appName.length()); putString(out, appName); putString(out, appName); out.putInt(userId); out.putInt(userId); out.putInt(pkgName.length()); putString(out, pkgName); Chunk chunk = new Chunk(CHUNK_APNM, out); Chunk chunk = new Chunk(CHUNK_APNM, out); DdmServer.sendChunk(chunk); DdmServer.sendChunk(chunk); } } /** * A class that encapsulates the app and package names into a single * instance, effectively synchronizing the two names. */ static final class Names { private final String mAppName; private final String mPkgName; private Names(String appName, String pkgName) { mAppName = appName; mPkgName = pkgName; } public String getAppName() { return mAppName; } public String getPkgName() { return mPkgName; } } } } core/java/android/ddm/DdmHandleHello.java +8 −6 Original line number Original line Diff line number Diff line Loading @@ -126,10 +126,9 @@ public class DdmHandleHello extends ChunkHandler { String vmVersion = System.getProperty("java.vm.version", "?"); String vmVersion = System.getProperty("java.vm.version", "?"); String vmIdent = vmName + " v" + vmVersion; String vmIdent = vmName + " v" + vmVersion; //String appName = android.app.ActivityThread.currentPackageName(); DdmHandleAppName.Names names = DdmHandleAppName.getNames(); //if (appName == null) String appName = names.getAppName(); // appName = "unknown"; String pkgName = names.getPkgName(); String appName = DdmHandleAppName.getAppName(); VMRuntime vmRuntime = VMRuntime.getRuntime(); VMRuntime vmRuntime = VMRuntime.getRuntime(); String instructionSetDescription = String instructionSetDescription = Loading @@ -142,12 +141,13 @@ public class DdmHandleHello extends ChunkHandler { + (vmRuntime.isCheckJniEnabled() ? "true" : "false"); + (vmRuntime.isCheckJniEnabled() ? "true" : "false"); boolean isNativeDebuggable = vmRuntime.isNativeDebuggable(); boolean isNativeDebuggable = vmRuntime.isNativeDebuggable(); ByteBuffer out = ByteBuffer.allocate(28 ByteBuffer out = ByteBuffer.allocate(32 + vmIdent.length() * 2 + vmIdent.length() * 2 + appName.length() * 2 + appName.length() * 2 + instructionSetDescription.length() * 2 + instructionSetDescription.length() * 2 + vmFlags.length() * 2 + vmFlags.length() * 2 + 1); + 1 + pkgName.length() * 2); out.order(ChunkHandler.CHUNK_ORDER); out.order(ChunkHandler.CHUNK_ORDER); out.putInt(CLIENT_PROTOCOL_VERSION); out.putInt(CLIENT_PROTOCOL_VERSION); out.putInt(android.os.Process.myPid()); out.putInt(android.os.Process.myPid()); Loading @@ -161,6 +161,8 @@ public class DdmHandleHello extends ChunkHandler { out.putInt(vmFlags.length()); out.putInt(vmFlags.length()); putString(out, vmFlags); putString(out, vmFlags); out.put((byte)(isNativeDebuggable ? 1 : 0)); out.put((byte)(isNativeDebuggable ? 1 : 0)); out.putInt(pkgName.length()); putString(out, pkgName); Chunk reply = new Chunk(CHUNK_HELO, out); Chunk reply = new Chunk(CHUNK_HELO, out); Loading Loading
core/java/android/app/ActivityThread.java +1 −0 Original line number Original line Diff line number Diff line Loading @@ -6254,6 +6254,7 @@ public final class ActivityThread extends ClientTransactionHandler { // send up app name; do this *before* waiting for debugger // send up app name; do this *before* waiting for debugger Process.setArgV0(data.processName); Process.setArgV0(data.processName); android.ddm.DdmHandleAppName.setAppName(data.processName, android.ddm.DdmHandleAppName.setAppName(data.processName, data.appInfo.packageName, UserHandle.myUserId()); UserHandle.myUserId()); VMRuntime.setProcessPackageName(data.appInfo.packageName); VMRuntime.setProcessPackageName(data.appInfo.packageName); Loading
core/java/android/ddm/DdmHandleAppName.java +51 −13 Original line number Original line Diff line number Diff line Loading @@ -17,10 +17,12 @@ package android.ddm; package android.ddm; import android.annotation.UnsupportedAppUsage; import android.annotation.UnsupportedAppUsage; import android.util.Log; import org.apache.harmony.dalvik.ddmc.Chunk; import org.apache.harmony.dalvik.ddmc.Chunk; import org.apache.harmony.dalvik.ddmc.ChunkHandler; import org.apache.harmony.dalvik.ddmc.ChunkHandler; import org.apache.harmony.dalvik.ddmc.DdmServer; import org.apache.harmony.dalvik.ddmc.DdmServer; import android.util.Log; import java.nio.ByteBuffer; import java.nio.ByteBuffer; Loading @@ -31,7 +33,7 @@ public class DdmHandleAppName extends ChunkHandler { public static final int CHUNK_APNM = type("APNM"); public static final int CHUNK_APNM = type("APNM"); private volatile static String mAppName = ""; private static volatile Names sNames = new Names("", ""); private static DdmHandleAppName mInstance = new DdmHandleAppName(); private static DdmHandleAppName mInstance = new DdmHandleAppName(); Loading Loading @@ -65,46 +67,82 @@ public class DdmHandleAppName extends ChunkHandler { /** * Sets all names to the same name. */ @UnsupportedAppUsage public static void setAppName(String name, int userId) { setAppName(name, name, userId); } /** /** * Set the application name. Called when we get named, which may be * Set the application name. Called when we get named, which may be * before or after DDMS connects. For the latter we need to send up * before or after DDMS connects. For the latter we need to send up * an APNM message. * an APNM message. */ */ @UnsupportedAppUsage @UnsupportedAppUsage public static void setAppName(String name, int userId) { public static void setAppName(String appName, String pkgName, int userId) { if (name == null || name.length() == 0) if (appName == null || appName.isEmpty() || pkgName == null || pkgName.isEmpty()) return; return; mAppName = name; sNames = new Names(appName, pkgName); // if DDMS is already connected, send the app name up // if DDMS is already connected, send the app name up sendAPNM(name, userId); sendAPNM(appName, pkgName, userId); } } @UnsupportedAppUsage @UnsupportedAppUsage public static String getAppName() { public static Names getNames() { return mAppName; return sNames; } } /* /** * Send an APNM (APplication NaMe) chunk. * Send an APNM (APplication NaMe) chunk. */ */ private static void sendAPNM(String appName, int userId) { private static void sendAPNM(String appName, String pkgName, int userId) { if (false) if (false) Log.v("ddm", "Sending app name"); Log.v("ddm", "Sending app name"); ByteBuffer out = ByteBuffer.allocate( ByteBuffer out = ByteBuffer.allocate( 4 /* appName's length */ 4 /* appName's length */ + appName.length() * 2 /* appName */ + appName.length() * 2 /* appName */ + 4 /* userId */); + 4 /* userId */ + 4 /* pkgName's length */ + pkgName.length() * 2 /* pkgName */); out.order(ChunkHandler.CHUNK_ORDER); out.order(ChunkHandler.CHUNK_ORDER); out.putInt(appName.length()); out.putInt(appName.length()); putString(out, appName); putString(out, appName); out.putInt(userId); out.putInt(userId); out.putInt(pkgName.length()); putString(out, pkgName); Chunk chunk = new Chunk(CHUNK_APNM, out); Chunk chunk = new Chunk(CHUNK_APNM, out); DdmServer.sendChunk(chunk); DdmServer.sendChunk(chunk); } } /** * A class that encapsulates the app and package names into a single * instance, effectively synchronizing the two names. */ static final class Names { private final String mAppName; private final String mPkgName; private Names(String appName, String pkgName) { mAppName = appName; mPkgName = pkgName; } public String getAppName() { return mAppName; } public String getPkgName() { return mPkgName; } } } }
core/java/android/ddm/DdmHandleHello.java +8 −6 Original line number Original line Diff line number Diff line Loading @@ -126,10 +126,9 @@ public class DdmHandleHello extends ChunkHandler { String vmVersion = System.getProperty("java.vm.version", "?"); String vmVersion = System.getProperty("java.vm.version", "?"); String vmIdent = vmName + " v" + vmVersion; String vmIdent = vmName + " v" + vmVersion; //String appName = android.app.ActivityThread.currentPackageName(); DdmHandleAppName.Names names = DdmHandleAppName.getNames(); //if (appName == null) String appName = names.getAppName(); // appName = "unknown"; String pkgName = names.getPkgName(); String appName = DdmHandleAppName.getAppName(); VMRuntime vmRuntime = VMRuntime.getRuntime(); VMRuntime vmRuntime = VMRuntime.getRuntime(); String instructionSetDescription = String instructionSetDescription = Loading @@ -142,12 +141,13 @@ public class DdmHandleHello extends ChunkHandler { + (vmRuntime.isCheckJniEnabled() ? "true" : "false"); + (vmRuntime.isCheckJniEnabled() ? "true" : "false"); boolean isNativeDebuggable = vmRuntime.isNativeDebuggable(); boolean isNativeDebuggable = vmRuntime.isNativeDebuggable(); ByteBuffer out = ByteBuffer.allocate(28 ByteBuffer out = ByteBuffer.allocate(32 + vmIdent.length() * 2 + vmIdent.length() * 2 + appName.length() * 2 + appName.length() * 2 + instructionSetDescription.length() * 2 + instructionSetDescription.length() * 2 + vmFlags.length() * 2 + vmFlags.length() * 2 + 1); + 1 + pkgName.length() * 2); out.order(ChunkHandler.CHUNK_ORDER); out.order(ChunkHandler.CHUNK_ORDER); out.putInt(CLIENT_PROTOCOL_VERSION); out.putInt(CLIENT_PROTOCOL_VERSION); out.putInt(android.os.Process.myPid()); out.putInt(android.os.Process.myPid()); Loading @@ -161,6 +161,8 @@ public class DdmHandleHello extends ChunkHandler { out.putInt(vmFlags.length()); out.putInt(vmFlags.length()); putString(out, vmFlags); putString(out, vmFlags); out.put((byte)(isNativeDebuggable ? 1 : 0)); out.put((byte)(isNativeDebuggable ? 1 : 0)); out.putInt(pkgName.length()); putString(out, pkgName); Chunk reply = new Chunk(CHUNK_HELO, out); Chunk reply = new Chunk(CHUNK_HELO, out); Loading