| Index: base/android/jni_generator/sample_for_tests.h
|
| diff --git a/base/android/jni_generator/sample_for_tests.h b/base/android/jni_generator/sample_for_tests.h
|
| index c98cf97693638963a322c3fd582bb7f541f526b1..e878e56cf6a427e8b1b5066fbb32d030ba9f79bf 100644
|
| --- a/base/android/jni_generator/sample_for_tests.h
|
| +++ b/base/android/jni_generator/sample_for_tests.h
|
| @@ -20,13 +20,132 @@ namespace android {
|
| // - ensure sample_for_tests_jni.h compiles and the functions declared in it
|
| // as expected.
|
| //
|
| -// All methods are called directly from Java. See more documentation in
|
| -// SampleForTests.java.
|
| +// Methods are called directly from Java (except RegisterJNI). More
|
| +// documentation in SampleForTests.java
|
| +//
|
| +// For C++ to access Java methods:
|
| +// - GYP Build must be configured to generate bindings:
|
| +// # ...
|
| +// 'targets': [
|
| +// {
|
| +// # An example target that will rely on JNI:
|
| +// 'target_name': 'foo',
|
| +// 'type': '<(component)',
|
| +// # ... normal sources, defines, deps.
|
| +// # For each jni generated .java -> .h header file in foo_jni_headers
|
| +// # target there will be a single .cc file here that includes it.
|
| +// #
|
| +// # Add deps for JNI:
|
| +// 'conditions': [
|
| +// ['OS == "android"', {
|
| +// 'dependencies': [
|
| +// 'foo_java',
|
| +// 'foo_jni_headers',
|
| +// ],
|
| +// }],
|
| +// ],
|
| +// },
|
| +// ],
|
| +// # ...
|
| +// # Create targets for JNI:
|
| +// 'conditions': [
|
| +// ['OS == "android"', {
|
| +// 'targets': [
|
| +// {
|
| +// 'target_name': 'foo_jni_headers',
|
| +// 'type': 'none',
|
| +// 'sources': [
|
| +// 'java/src/org/chromium/example/jni_generator/SampleForTests.java',
|
| +// ],
|
| +// 'variables': {
|
| +// 'jni_gen_package': 'foo',
|
| +// },
|
| +// 'includes': [ '../../../build/jni_generator.gypi' ],
|
| +// },
|
| +// {
|
| +// 'target_name': 'foo_java',
|
| +// 'type': 'none',
|
| +// 'dependencies': [
|
| +// '../../../base/base.gyp:base',
|
| +// ],
|
| +// 'variables': {
|
| +// 'java_in_dir': 'java',
|
| +// },
|
| +// 'includes': [ '../../../build/java.gypi' ],
|
| +// },
|
| +// ],
|
| +// }],
|
| +// ],
|
| +//
|
| +// - GN Build must be configured to generate bindings:
|
| +// # Add import at top of file:
|
| +// if (is_android) {
|
| +// import("//build/config/android/rules.gni") # For generate_jni().
|
| +// }
|
| +// # ...
|
| +// # An example target that will rely on JNI:
|
| +// component("foo") {
|
| +// # ... normal sources, defines, deps.
|
| +// # For each jni generated .java -> .h header file in jni_headers
|
| +// # target there will be a single .cc file here that includes it.
|
| +// #
|
| +// # Add a dep for JNI:
|
| +// if (is_android) {
|
| +// deps += [ ":foo_jni" ]
|
| +// }
|
| +// }
|
| +// # ...
|
| +// # Create target for JNI:
|
| +// if (is_android) {
|
| +// generate_jni("jni_headers") {
|
| +// sources = [
|
| +// "java/src/org/chromium/example/jni_generator/SampleForTests.java",
|
| +// ]
|
| +// jni_package = "foo"
|
| +// }
|
| +// android_library("java") {
|
| +// java_files = [
|
| +// "java/src/org/chromium/example/jni_generator/SampleForTests.java",
|
| +// "java/src/org/chromium/example/jni_generator/NonJniFile.java",
|
| +// ]
|
| +// }
|
| +// }
|
| +//
|
| +// For C++ methods to be exposed to Java:
|
| +// - The generated RegisterNativesImpl method must be called, this is typically
|
| +// done by having a static RegisterJNI method in the C++ class.
|
| +// - The RegisterJNI method is added to a module's collection of register
|
| +// methods, such as: example_jni_registrar.h/cc files which call
|
| +// base::android::RegisterNativeMethods.
|
| +// An example_jni_registstrar.cc:
|
| +//
|
| +// namespace {
|
| +// const base::android::RegistrationMethod kRegisteredMethods[] = {
|
| +// // Initial string is for debugging only.
|
| +// { "ExampleName", base::ExampleNameAndroid::RegisterJNI },
|
| +// { "ExampleName2", base::ExampleName2Android::RegisterJNI },
|
| +// };
|
| +// } // namespace
|
| +//
|
| +// bool RegisterModuleNameJni(JNIEnv* env) {
|
| +// return RegisterNativeMethods(env, kRegisteredMethods,
|
| +// arraysize(kRegisteredMethods));
|
| +// }
|
| +//
|
| +// - Each module's RegisterModuleNameJni must be called by a larger module,
|
| +// or application during startup.
|
| +//
|
| class CPPClass {
|
| public:
|
| CPPClass();
|
| ~CPPClass();
|
|
|
| + // Register C++ methods exposed to Java using JNI.
|
| + static bool RegisterJNI(JNIEnv* env);
|
| +
|
| + // Java @CalledByNative methods implicitly available to C++ via the _jni.h
|
| + // file included in the .cc file.
|
| +
|
| class InnerClass {
|
| public:
|
| jdouble MethodOtherP0(JNIEnv* env, jobject obj);
|
|
|