Home | History | Annotate | Download | only in native
      1 /* Copyright (C) 2014 The Android Open Source Project
      2  * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
      3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
      4  *
      5  * This code is free software; you can redistribute it and/or modify it
      6  * under the terms of the GNU General Public License version 2 only, as
      7  * published by the Free Software Foundation.  Oracle designates this
      8  * particular file as subject to the "Classpath" exception as provided
      9  * by Oracle in the LICENSE file that accompanied this code.
     10  *
     11  * This code is distributed in the hope that it will be useful, but WITHOUT
     12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
     13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     14  * version 2 for more details (a copy is included in the LICENSE file that
     15  * accompanied this code).
     16  *
     17  * You should have received a copy of the GNU General Public License version
     18  * 2 along with this work; if not, write to the Free Software Foundation,
     19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
     20  *
     21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
     22  * or visit www.oracle.com if you need additional information or have any
     23  * questions.
     24  */
     25 
     26 #define LOG_TAG "libcore" // We'll be next to "dalvikvm" in the log; make the distinction clear.
     27 
     28 #include <stdlib.h>
     29 
     30 #include <log/log.h>
     31 
     32 #include <nativehelper/JniConstants.h>
     33 #include <nativehelper/ScopedLocalFrame.h>
     34 
     35 extern "C" {
     36 
     37 extern void register_java_io_Console(JNIEnv* env);
     38 extern void register_java_io_FileDescriptor(JNIEnv*);
     39 extern void register_java_io_FileInputStream(JNIEnv*);
     40 extern void register_java_io_FileOutputStream(JNIEnv*);
     41 extern void register_java_io_ObjectInputStream(JNIEnv*);
     42 extern void register_java_io_ObjectOutputStream(JNIEnv*);
     43 extern void register_java_io_ObjectStreamClass(JNIEnv*);
     44 extern void register_java_io_UnixFileSystem(JNIEnv*);
     45 extern void register_java_lang_Double(JNIEnv*);
     46 extern void register_java_lang_Float(JNIEnv*);
     47 extern void register_java_lang_ProcessEnvironment(JNIEnv*);
     48 extern void register_java_lang_Runtime(JNIEnv*);
     49 extern void register_java_lang_StrictMath(JNIEnv*);
     50 extern void register_java_lang_Math(JNIEnv*);
     51 extern void register_java_lang_System(JNIEnv*);
     52 extern void register_java_lang_Thread(JNIEnv*);
     53 extern void register_java_lang_UNIXProcess(JNIEnv*);
     54 extern void register_java_net_DatagramPacket(JNIEnv*);
     55 extern void register_java_net_Inet4Address(JNIEnv*);
     56 extern void register_java_net_Inet6Address(JNIEnv*);
     57 extern void register_java_net_InetAddress(JNIEnv*);
     58 extern void register_java_net_PlainDatagramSocketImpl(JNIEnv*);
     59 extern void register_java_net_SocketInputStream(JNIEnv*);
     60 extern void register_java_net_SocketOutputStream(JNIEnv*);
     61 extern void register_java_nio_Bits(JNIEnv* env);
     62 extern void register_java_nio_MappedByteBuffer(JNIEnv* env);
     63 extern void register_java_util_zip_Adler32(JNIEnv* env);
     64 extern void register_java_util_zip_CRC32(JNIEnv*);
     65 extern void register_java_util_zip_Deflater(JNIEnv*);
     66 extern void register_java_util_zip_Inflater(JNIEnv*);
     67 extern void register_java_util_zip_ZipFile(JNIEnv*);
     68 extern void register_java_util_prefs_FileSystemPreferences(JNIEnv*);
     69 extern void register_sun_nio_ch_DatagramChannelImpl(JNIEnv*);
     70 extern void register_sun_nio_ch_DatagramDispatcher(JNIEnv*);
     71 extern void register_sun_nio_ch_FileChannelImpl(JNIEnv*);
     72 extern void register_sun_nio_ch_FileDispatcherImpl(JNIEnv*);
     73 extern void register_sun_nio_ch_FileKey(JNIEnv*);
     74 extern void register_sun_nio_ch_IOUtil(JNIEnv*);
     75 extern void register_sun_nio_ch_NativeThread(JNIEnv*);
     76 extern void register_sun_nio_ch_Net(JNIEnv*);
     77 extern void register_sun_nio_ch_ServerSocketChannelImpl(JNIEnv*);
     78 extern void register_sun_nio_ch_SocketChannelImpl(JNIEnv* env);
     79 
     80 extern jint net_JNI_OnLoad(JavaVM*, void*);
     81 
     82 }
     83 
     84 extern void register_java_lang_Character(JNIEnv*);
     85 
     86 // DalvikVM calls this on startup, so we can statically register all our native methods.
     87 jint JNI_OnLoad(JavaVM* vm, void*) { JNIEnv* env;
     88     if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
     89         ALOGE("JavaVM::GetEnv() failed");
     90         abort();
     91     }
     92 
     93     ScopedLocalFrame localFrame(env);
     94     register_java_util_zip_ZipFile(env);
     95     register_java_util_zip_Inflater(env);
     96     register_java_util_zip_Deflater(env);
     97     register_java_util_zip_CRC32(env);
     98     register_java_util_zip_Adler32(env);
     99     register_sun_nio_ch_IOUtil(env);
    100     register_sun_nio_ch_FileChannelImpl(env);
    101     register_sun_nio_ch_FileDispatcherImpl(env);
    102     register_java_io_Console(env);
    103     register_java_io_FileOutputStream(env);
    104     register_java_io_FileInputStream(env);
    105     register_java_io_FileDescriptor(env);
    106     register_java_io_ObjectInputStream(env);
    107     register_java_io_ObjectOutputStream(env);
    108     register_java_io_UnixFileSystem(env);
    109     register_sun_nio_ch_NativeThread(env);
    110     register_sun_nio_ch_FileKey(env);
    111     register_java_io_ObjectStreamClass(env);
    112     register_java_lang_Character(env);
    113     register_java_lang_Float(env);
    114     register_java_lang_Double(env);
    115     register_java_lang_StrictMath(env);
    116     register_java_lang_Math(env);
    117     register_java_lang_ProcessEnvironment(env);
    118     register_java_lang_Runtime(env);
    119     register_java_lang_System(env);
    120     register_java_lang_UNIXProcess(env);
    121     // register_java_net_InetAddress depends on java_lang_Float & Math being
    122     // fully registered (getMethodId on InetAddress class triggers its
    123     // <clinit> which depends on java.lang.Float)
    124     register_java_net_InetAddress(env);
    125     register_java_net_Inet4Address(env);
    126     register_java_net_Inet6Address(env);
    127     register_java_net_SocketInputStream(env);
    128     register_java_net_SocketOutputStream(env);
    129     register_java_nio_Bits(env);
    130     register_java_util_prefs_FileSystemPreferences(env);
    131     register_sun_nio_ch_ServerSocketChannelImpl(env);
    132     register_sun_nio_ch_SocketChannelImpl(env);
    133     register_sun_nio_ch_Net(env);
    134     register_sun_nio_ch_DatagramChannelImpl(env);
    135     register_sun_nio_ch_DatagramDispatcher(env);
    136     register_java_nio_MappedByteBuffer(env);
    137     net_JNI_OnLoad(vm, NULL);
    138     return JNI_VERSION_1_6;
    139 }
    140