blob: f14201ed54120c12c92825ac90457d304adc14d9 [file] [log] [blame]
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001/* //device/libs/android_runtime/android_debug_JNITest.cpp
2**
3** Copyright 2006, The Android Open Source Project
4**
5** Licensed under the Apache License, Version 2.0 (the "License");
6** you may not use this file except in compliance with the License.
7** You may obtain a copy of the License at
8**
9** http://www.apache.org/licenses/LICENSE-2.0
10**
11** Unless required by applicable law or agreed to in writing, software
12** distributed under the License is distributed on an "AS IS" BASIS,
13** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14** See the License for the specific language governing permissions and
15** limitations under the License.
16*/
17
18#define LOG_TAG "DebugJNI"
19
20#include "jni.h"
21#include "nativehelper/JNIHelp.h"
22#include "utils/Log.h"
23#include "utils/misc.h"
24//#include "android_runtime/AndroidRuntime.h"
25
26namespace android {
27
28/*
29 * Implements:
30 * native int part1(int intArg, double doubleArg, String stringArg,
31 * int[] arrayArg)
32 */
33static jint android_debug_JNITest_part1(JNIEnv* env, jobject object,
34 jint intArg, jdouble doubleArg, jstring stringArg, jobjectArray arrayArg)
35{
36 jclass clazz;
37 jmethodID part2id;
38 jsize arrayLen;
39 jint arrayVal;
40 int result = -2;
41
42 LOGI("JNI test: in part1, intArg=%d, doubleArg=%.3f\n", intArg, doubleArg);
43
44 /* find "int part2(double doubleArg, int fromArray, String stringArg)" */
45 clazz = env->GetObjectClass(object);
46 part2id = env->GetMethodID(clazz,
47 "part2", "(DILjava/lang/String;)I");
48 if (part2id == NULL) {
49 LOGE("JNI test: unable to find part2\n");
50 return -1;
51 }
52
53 /* get the length of the array */
54 arrayLen = env->GetArrayLength(arrayArg);
55 LOGI(" array size is %d\n", arrayLen);
56
57 /*
58 * Get the last element in the array.
59 * Use the Get<type>ArrayElements functions instead if you need access
60 * to multiple elements.
61 */
62 arrayVal = (int) env->GetObjectArrayElement(arrayArg, arrayLen-1);
63 LOGI(" array val is %d\n", arrayVal);
64
65 /* call this->part2 */
66 result = env->CallIntMethod(object, part2id,
67 doubleArg, arrayVal, stringArg);
68
69 return result;
70}
71
72/*
73 * Implements:
74 * private static native int part3(String stringArg);
75 */
76static jint android_debug_JNITest_part3(JNIEnv* env, jclass clazz,
77 jstring stringArg)
78{
79 const char* utfChars;
80 jboolean isCopy;
81
82 LOGI("JNI test: in part3\n");
83
84 utfChars = env->GetStringUTFChars(stringArg, &isCopy);
85
86 LOGI(" String is '%s', isCopy=%d\n", (const char*) utfChars, isCopy);
87
88 env->ReleaseStringUTFChars(stringArg, utfChars);
89
90 return 2000;
91}
92
93/*
94 * JNI registration.
95 */
96static JNINativeMethod gMethods[] = {
97 /* name, signature, funcPtr */
98 { "part1", "(IDLjava/lang/String;[I)I",
99 (void*) android_debug_JNITest_part1 },
100 { "part3", "(Ljava/lang/String;)I",
101 (void*) android_debug_JNITest_part3 },
102};
103int register_android_debug_JNITest(JNIEnv* env)
104{
105 return jniRegisterNativeMethods(env, "android/debug/JNITest",
106 gMethods, NELEM(gMethods));
107}
108
109#if 0
110/* trampoline into C++ */
111extern "C"
112int register_android_debug_JNITest_C(JNIEnv* env)
113{
114 return android::register_android_debug_JNITest(env);
115}
116#endif
117
118}; // namespace android
119