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);