Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d4d3181d authored by Sebastien Hertz's avatar Sebastien Hertz Committed by The Android Automerger
Browse files

Allow debugging only for apps forked from zygote

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 7a09b832)

Change-Id: Ib5b6d3bc4d45389993c3c54226df5a7b72479d19
parent 8fba7e69
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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();
+10 −6
Original line number Diff line number Diff line
@@ -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 */
    /*
     * 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);
+2 −2
Original line number Diff line number Diff line
@@ -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;