193d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian/* 293d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian * Copyright (C) 2011 The Android Open Source Project 393d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian * 493d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 593d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian * you may not use this file except in compliance with the License. 693d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian * You may obtain a copy of the License at 793d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian * 893d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 993d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian * 1093d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian * Unless required by applicable law or agreed to in writing, software 1193d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 1293d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1393d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian * See the License for the specific language governing permissions and 1493d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian * limitations under the License. 1593d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian */ 1693d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian 1793d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian#include <android_runtime/AndroidRuntime.h> 1893d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian 1993d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian#include "jni.h" 2093d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian#include "DdmConnection.h" 2193d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian 2293d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopianextern "C" jint Java_com_android_internal_util_WithFramework_registerNatives( 2393d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian JNIEnv* env, jclass clazz); 2493d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian 2593d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopiannamespace android { 2693d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian 2793d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopianvoid DdmConnection::start(const char* name) { 2893d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian JavaVM* vm; 2993d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian JNIEnv* env; 3093d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian 3193d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian // start a VM 3293d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian JavaVMInitArgs args; 3393d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian JavaVMOption opt; 3493d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian 3593d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian opt.optionString = 3693d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian "-agentlib:jdwp=transport=dt_android_adb,suspend=n,server=y"; 3793d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian 3893d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian args.version = JNI_VERSION_1_4; 3993d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian args.options = &opt; 4093d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian args.nOptions = 1; 4193d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian args.ignoreUnrecognized = JNI_FALSE; 4293d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian 4393d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian if (JNI_CreateJavaVM(&vm, &env, &args) == 0) { 4493d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian jclass startClass; 4593d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian jmethodID startMeth; 4693d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian 4793d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian // register native code 4893d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian if (Java_com_android_internal_util_WithFramework_registerNatives(env, 0) == 0) { 4993d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian // set our name by calling DdmHandleAppName.setAppName() 5093d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian startClass = env->FindClass("android/ddm/DdmHandleAppName"); 5193d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian if (startClass) { 5293d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian startMeth = env->GetStaticMethodID(startClass, 5393d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian "setAppName", "(Ljava/lang/String;)V"); 5493d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian if (startMeth) { 5593d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian jstring str = env->NewStringUTF(name); 5693d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian env->CallStaticVoidMethod(startClass, startMeth, str); 5793d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian env->DeleteLocalRef(str); 5893d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian } 5993d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian } 6093d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian 6193d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian // initialize DDMS communication by calling 6293d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian // DdmRegister.registerHandlers() 6393d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian startClass = env->FindClass("android/ddm/DdmRegister"); 6493d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian if (startClass) { 6593d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian startMeth = env->GetStaticMethodID(startClass, 6693d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian "registerHandlers", "()V"); 6793d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian if (startMeth) { 6893d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian env->CallStaticVoidMethod(startClass, startMeth); 6993d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian } 7093d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian } 7193d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian } 7293d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian } 7393d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian} 7493d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian 7593d75ec3714d829a41947a29b5c4028b282622c4Mathias Agopian}; // namespace android 76