원클릭으로
jni-type-conversion
How to use @JniType annotations for ergonomic JNI. Relevant for Java files that use @NativeMethods or @CalledByNative.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
How to use @JniType annotations for ergonomic JNI. Relevant for Java files that use @NativeMethods or @CalledByNative.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Search and reference Chromium documentation from the local docs index, including design docs, APIs, and development guides. Use when the user asks to find, locate, browse, or learn from Chromium docs about architecture, APIs, testing, GPU, networking, or other Chromium topics.
Implements, registers, and verifies fuzz tests in Chromium. Use when the user asks to add or write fuzzers in C++, or mentions fuzz testing or FUZZ_TEST.
Guide for adding new enterprise policies to Chromium. Complete guide for policy definitions, pref mapping, and writing tests.
| name | jni-type-conversion |
| description | How to use @JniType annotations for ergonomic JNI. Relevant for Java files that use @NativeMethods or @CalledByNative. |
This skill guides the process of replacing explicit JNI conversion logic (like
ConvertJavaStringToUTF8) with @JniType annotations in Java and corresponding
native types in C++.
third_party/jni_zero/README.chromium.md for a primer on JNI Zero.@NativeMethods or @CalledByNative) that take or return types that are
currently being explicitly converted in C++.@JniType
conversion defined, search the codebase for FromJniType or ToJniType
definitions for that C++ type:
rg -g "*.h" "\binline .*(From|To)JniType"
If a conversion exists, note the header file where it is defined; you will
need to include it from any C++ files that require the conversion.ConvertJavaStringToUTF8 -> std::stringConvertJavaStringToUTF16 -> std::u16stringJavaIntArrayToIntVector -> std::vector<int32_t>ToJavaArrayOfStrings -> std::vector<std::string>base::android::ConvertJavaStringToUTF8 -> std::stringif block that might skip
it).TRACE_EVENT macros). Moving
these to @JniType makes the conversion eager, which can impact
performance.@JniType("cpp_type") to the parameter or return type.String parameters, @JniType("std::string") automatically converts
Java null to C++ "". Prefer this over std::optional<std::string>
unless the C++ logic specifically distinguishes between null and empty.@JniType("std::vector<uint8_t>") for byte[].@Nullable in Java if the parameter can be null. For
@Nullable String, using std::optional<std::string> in C++ will map
null to std::nullopt.org.jni_zero.JniType is imported.const std::string&, std::vector<int32_t>&, base::OnceClosure).JNIEnv* env parameter used to be used,
but is no longer used after @JniType additions, it should be removed from
the C++ function signature.@NativeMethods, the caller
parameter is usually unnecessary. Remove it from Java and C++ to reduce
boilerplate._jni.h file.base/android/jni_string.h for all string conversions.third_party/jni_zero/default_conversions.h for containers
(std::vector, std::optional, base::span).base/android/callback_android.h for callback conversions.autoninja -C OUTPUT_DIR ../../path/to/foo.cc^ ../../path/to/Foo.java^ ...
OUTPUT_DIR (e.g. start with ../../)OUTPUT_DIR you must have been told it.Java: @JniType("std::string") String uuid C++:
base::Uuid::ParseLowercase(uuid_string) (incoming) or
uuid.AsLowercaseString() (outgoing).
@JniType("std::vector<...>") works for return types. C++ can return a
std::vector and it will be automatically converted to a Java array or List.
Java:
void doSomething(@JniType("base::OnceClosure") Runnable callback);
C++:
#include "base/android/callback_android.h"
void JNI_MyClass_DoSomething(base::OnceClosure callback) {
std::move(callback).Run();
}