| /* //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 Get<type>ArrayElements 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 |
| |