OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/android/jni_android.h" | 5 #include "base/android/jni_android.h" |
6 #include "base/android/jni_utils.h" | |
6 #include "base/android/library_loader/library_loader_hooks.h" | 7 #include "base/android/library_loader/library_loader_hooks.h" |
7 #include "base/bind.h" | 8 #include "base/bind.h" |
8 #include "chrome/app/android/chrome_jni_onload.h" | 9 #include "chrome/app/android/chrome_jni_onload.h" |
9 | 10 |
10 namespace { | 11 namespace { |
11 | 12 |
12 bool RegisterJNI(JNIEnv* env) { | 13 bool RegisterJNI(JNIEnv* env) { |
13 return true; | 14 return true; |
14 } | 15 } |
15 | 16 |
16 bool Init() { | 17 bool Init() { |
17 return true; | 18 return true; |
18 } | 19 } |
19 | 20 |
20 bool NativeInit() { | 21 bool NativeInit() { |
21 return android::OnJNIOnLoadInit(base::Bind(&Init)); | 22 return android::OnJNIOnLoadInit(base::Bind(&Init)); |
22 } | 23 } |
23 | 24 |
24 } // namespace | 25 } // namespace |
25 | 26 |
26 // This is called by the VM when the shared library is first loaded. | 27 // This is called by the VM when the shared library is first loaded. |
27 JNI_EXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) { | 28 JNI_EXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) { |
29 // By default, all JNI methods are registered. However, since render processes | |
30 // don't need very much Java code, we enable selective JNI registration on the | |
31 // Java side and only register a subset of JNI methods. | |
32 base::android::InitVM(vm); | |
Ted C
2017/01/31 17:56:54
why do we need this InitVM here? Wondering why th
Torne
2017/01/31 18:04:50
You need to call InitVM before AttachCurrentThread
estevenson
2017/01/31 18:56:41
Yeah, we need JNIEnv for making calls to Java. I t
| |
33 JNIEnv* env = base::android::AttachCurrentThread(); | |
34 if (base::android::isSelectiveJniRegistrationEnabled(env)) { | |
35 base::android::SetJniRegistrationType( | |
36 base::android::SELECTIVE_JNI_REGISTRATION); | |
37 } | |
28 if (!android::OnJNIOnLoadRegisterJNI(vm, base::Bind(&RegisterJNI))) { | 38 if (!android::OnJNIOnLoadRegisterJNI(vm, base::Bind(&RegisterJNI))) { |
29 return -1; | 39 return -1; |
30 } | 40 } |
31 base::android::SetNativeInitializationHook(NativeInit); | 41 base::android::SetNativeInitializationHook(NativeInit); |
32 return JNI_VERSION_1_4; | 42 return JNI_VERSION_1_4; |
33 } | 43 } |
OLD | NEW |