/* //device/libs/android_runtime/android_debug_JNITest.cpp ** ** Copyright 2006, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #define LOG_TAG "DebugJNI" #include "jni.h" #include "nativehelper/JNIHelp.h" #include "utils/Log.h" #include "utils/misc.h" //#include "android_runtime/AndroidRuntime.h" namespace android { /* * Implements: * native int part1(int intArg, double doubleArg, String stringArg, * int[] arrayArg) */ static jint android_debug_JNITest_part1(JNIEnv* env, jobject object, jint intArg, jdouble doubleArg, jstring stringArg, jobjectArray arrayArg) { jclass clazz; jmethodID part2id; jsize arrayLen; jint arrayVal; int result = -2; ALOGI("JNI test: in part1, intArg=%d, doubleArg=%.3f\n", intArg, doubleArg); /* find "int part2(double doubleArg, int fromArray, String stringArg)" */ clazz = env->GetObjectClass(object); part2id = env->GetMethodID(clazz, "part2", "(DILjava/lang/String;)I"); if (part2id == NULL) { ALOGE("JNI test: unable to find part2\n"); return -1; } /* get the length of the array */ arrayLen = env->GetArrayLength(arrayArg); ALOGI(" array size is %d\n", arrayLen); /* * Get the last element in the array. * Use the GetArrayElements functions instead if you need access * to multiple elements. */ arrayVal = (int) env->GetObjectArrayElement(arrayArg, arrayLen-1); ALOGI(" array val is %d\n", arrayVal); /* call this->part2 */ result = env->CallIntMethod(object, part2id, doubleArg, arrayVal, stringArg); return result; } /* * Implements: * private static native int part3(String stringArg); */ static jint android_debug_JNITest_part3(JNIEnv* env, jclass clazz, jstring stringArg) { const char* utfChars; jboolean isCopy; ALOGI("JNI test: in part3\n"); utfChars = env->GetStringUTFChars(stringArg, &isCopy); ALOGI(" String is '%s', isCopy=%d\n", (const char*) utfChars, isCopy); env->ReleaseStringUTFChars(stringArg, utfChars); return 2000; } /* * JNI registration. */ static JNINativeMethod gMethods[] = { /* name, signature, funcPtr */ { "part1", "(IDLjava/lang/String;[I)I", (void*) android_debug_JNITest_part1 }, { "part3", "(Ljava/lang/String;)I", (void*) android_debug_JNITest_part3 }, }; int register_android_debug_JNITest(JNIEnv* env) { return jniRegisterNativeMethods(env, "android/debug/JNITest", gMethods, NELEM(gMethods)); } #if 0 /* trampoline into C++ */ extern "C" int register_android_debug_JNITest_C(JNIEnv* env) { return android::register_android_debug_JNITest(env); } #endif }; // namespace android