OSDN Git Service

Allow debugging only for apps forked from zygote
authorSebastien Hertz <shertz@google.com>
Mon, 10 Aug 2015 16:55:34 +0000 (18:55 +0200)
committerThe Android Automerger <android-build@android.com>
Tue, 1 Sep 2015 21:20:39 +0000 (14:20 -0700)
When starting the runtime from app_process, we only pass JDWP options
if starting zygote. It prevents from opening a JDWP connection in
non-zygote programs while Android apps (forked from zygote) remain
debuggable.

Bug: 23050463

(cherry picked from commit 7a09b8322cab26d6e3da1362d3c74964ae66b5d4)

Change-Id: Ib5b6d3bc4d45389993c3c54226df5a7b72479d19

cmds/app_process/app_main.cpp
core/jni/AndroidRuntime.cpp
include/android_runtime/AndroidRuntime.h

index 1bb28c3..91cec19 100644 (file)
@@ -304,9 +304,9 @@ int main(int argc, char* const argv[])
     }
 
     if (zygote) {
-        runtime.start("com.android.internal.os.ZygoteInit", args);
+        runtime.start("com.android.internal.os.ZygoteInit", args, zygote);
     } else if (className) {
-        runtime.start("com.android.internal.os.RuntimeInit", args);
+        runtime.start("com.android.internal.os.RuntimeInit", args, zygote);
     } else {
         fprintf(stderr, "Error: no class name or --zygote supplied.\n");
         app_usage();
index 1fbd4a1..09bc93b 100644 (file)
@@ -528,7 +528,7 @@ bool AndroidRuntime::parseCompilerRuntimeOption(const char* property,
  *
  * Returns 0 on success.
  */
-int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv)
+int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv, bool zygote)
 {
     int result = -1;
     JavaVMInitArgs initArgs;
@@ -733,9 +733,13 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv)
         }
     }
 
-    /* enable debugging; set suspend=y to pause during VM init */
-    /* use android ADB transport */
-    addOption("-agentlib:jdwp=transport=dt_android_adb,suspend=n,server=y");
+    /*
+     * Enable debugging only for apps forked from zygote.
+     * Set suspend=y to pause during VM init and use android ADB transport.
+     */
+    if (zygote) {
+      addOption("-agentlib:jdwp=transport=dt_android_adb,suspend=n,server=y");
+    }
 
     parseRuntimeOption("dalvik.vm.lockprof.threshold",
                        lockProfThresholdBuf,
@@ -948,7 +952,7 @@ jstring AndroidRuntime::NewStringLatin1(JNIEnv* env, const char* bytes) {
  * Passes the main function two arguments, the class name and the specified
  * options string.
  */
-void AndroidRuntime::start(const char* className, const Vector<String8>& options)
+void AndroidRuntime::start(const char* className, const Vector<String8>& options, bool zygote)
 {
     ALOGD(">>>>>> START %s uid %d <<<<<<\n",
             className != NULL ? className : "(unknown)", getuid());
@@ -984,7 +988,7 @@ void AndroidRuntime::start(const char* className, const Vector<String8>& options
     JniInvocation jni_invocation;
     jni_invocation.Init(NULL);
     JNIEnv* env;
-    if (startVm(&mJavaVM, &env) != 0) {
+    if (startVm(&mJavaVM, &env, zygote) != 0) {
         return;
     }
     onVmCreated(env);
index fc33b7e..9a3b990 100644 (file)
@@ -64,7 +64,7 @@ public:
      */
     static jclass findClass(JNIEnv* env, const char* className);
 
-    void start(const char *classname, const Vector<String8>& options);
+    void start(const char *classname, const Vector<String8>& options, bool zygote);
 
     void exit(int code);
 
@@ -131,7 +131,7 @@ private:
                                     const char* runtimeArg,
                                     const char* quotingArg);
     void parseExtraOpts(char* extraOptsBuf, const char* quotingArg);
-    int startVm(JavaVM** pJavaVM, JNIEnv** pEnv);
+    int startVm(JavaVM** pJavaVM, JNIEnv** pEnv, bool zygote);
 
     Vector<JavaVMOption> mOptions;
     bool mExitWithoutCleanup;