Make libnativehelper stand-alone.
Bug: 6369821
Change-Id: I502211bddaf60d6097b81b35f606bbcdd1a3e092
diff --git a/Android.mk b/Android.mk
index dea0907..a113eb3 100644
--- a/Android.mk
+++ b/Android.mk
@@ -15,31 +15,8 @@
LOCAL_PATH := $(call my-dir)
-#
-# Common definitions for host and device.
-#
-
-src_files := \
- JNIHelp.cpp \
- Register.cpp
-
-c_includes := \
- $(JNI_H_INCLUDE)
-
-# Any shared/static libs required by libcore
-# need to be mentioned here as well.
-# TODO: fix this requirement
-
-shared_libraries := \
- libcrypto \
- libicui18n \
- libicuuc \
- libssl
-
-static_libraries := \
- libjavacore \
- libfdlibm
-
+local_src_files := \
+ JNIHelp.cpp
#
@@ -47,14 +24,14 @@
#
include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(src_files)
-LOCAL_C_INCLUDES := $(c_includes)
-LOCAL_STATIC_LIBRARIES := $(static_libraries)
-LOCAL_SHARED_LIBRARIES := $(shared_libraries) libcutils libexpat liblog libstlport libz
+LOCAL_SRC_FILES := $(local_src_files)
+LOCAL_SHARED_LIBRARIES := liblog
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := libnativehelper
+LOCAL_C_INCLUDES := external/stlport/stlport bionic/ bionic/libstdc++/include
+LOCAL_SHARED_LIBRARIES += libstlport
+
include $(BUILD_SHARED_LIBRARY)
@@ -62,25 +39,9 @@
# Build for the host.
#
-ifeq ($(WITH_HOST_DALVIK),true)
-
- include $(CLEAR_VARS)
-
- LOCAL_SRC_FILES := $(src_files)
- LOCAL_C_INCLUDES := $(c_includes)
- LOCAL_WHOLE_STATIC_LIBRARIES := $(static_libraries:%=%-host)
-
- ifeq ($(HOST_OS)-$(HOST_ARCH),darwin-x86)
- # OSX has a lot of libraries built in, which we don't have to
- # bother building; just include them on the ld line.
- LOCAL_LDLIBS := -lexpat -lssl -lz -lcrypto -licucore
- else
- LOCAL_SHARED_LIBRARIES := $(shared_libraries)
- LOCAL_STATIC_LIBRARIES := libcutils libexpat liblog libz
- endif
-
- LOCAL_MODULE_TAGS := optional
- LOCAL_MODULE := libnativehelper
- include $(BUILD_HOST_STATIC_LIBRARY)
-
-endif
+include $(CLEAR_VARS)
+LOCAL_MODULE := libnativehelper
+LOCAL_MODULE_TAGS := optional
+LOCAL_SRC_FILES := $(local_src_files)
+LOCAL_SHARED_LIBRARIES := liblog
+include $(BUILD_HOST_SHARED_LIBRARY)
diff --git a/JNIHelp.cpp b/JNIHelp.cpp
index bf50930..041776c 100644
--- a/JNIHelp.cpp
+++ b/JNIHelp.cpp
@@ -310,26 +310,32 @@
jfieldID descriptorField;
} gCachedFields;
-int registerJniHelp(JNIEnv* env) {
+jint JNI_OnLoad(JavaVM* vm, void*) {
+ JNIEnv* env;
+ if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
+ ALOGE("JavaVM::GetEnv() failed");
+ abort();
+ }
+
gCachedFields.fileDescriptorClass =
reinterpret_cast<jclass>(env->NewGlobalRef(env->FindClass("java/io/FileDescriptor")));
if (gCachedFields.fileDescriptorClass == NULL) {
- return -1;
+ abort();
}
gCachedFields.fileDescriptorCtor =
env->GetMethodID(gCachedFields.fileDescriptorClass, "<init>", "()V");
if (gCachedFields.fileDescriptorCtor == NULL) {
- return -1;
+ abort();
}
gCachedFields.descriptorField =
env->GetFieldID(gCachedFields.fileDescriptorClass, "descriptor", "I");
if (gCachedFields.descriptorField == NULL) {
- return -1;
+ abort();
}
- return 0;
+ return JNI_VERSION_1_6;
}
jobject jniCreateFileDescriptor(C_JNIEnv* env, int fd) {
diff --git a/Register.cpp b/Register.cpp
deleted file mode 100644
index b6b1b1f..0000000
--- a/Register.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 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.
- */
-
-#include "jni.h"
-
-extern int registerCoreLibrariesJni(JNIEnv* env);
-extern int registerJniHelp(JNIEnv* env);
-
-/*
- * Register all methods for system classes.
- */
-int jniRegisterSystemMethods(JNIEnv* env) {
- // JniHelp depends on core library classes such as java.io.FileDescriptor.
- return registerCoreLibrariesJni(env) != -1 && registerJniHelp(env) != -1;
-}
diff --git a/include/nativehelper/JNIHelp.h b/include/nativehelper/JNIHelp.h
index f5666f2..446a710 100644
--- a/include/nativehelper/JNIHelp.h
+++ b/include/nativehelper/JNIHelp.h
@@ -37,7 +37,8 @@
/*
* Register one or more native methods with a particular class.
- * "className" looks like "java/lang/String".
+ * "className" looks like "java/lang/String". Aborts on failure.
+ * TODO: fix all callers and change the return type to void.
*/
int jniRegisterNativeMethods(C_JNIEnv* env, const char* className, const JNINativeMethod* gMethods, int numMethods);