diff --git a/src/native/libs/System.Security.Cryptography.Native.Android/CMakeLists.txt b/src/native/libs/System.Security.Cryptography.Native.Android/CMakeLists.txt index a277d5df3e5bd..f87db8a8c75b6 100644 --- a/src/native/libs/System.Security.Cryptography.Native.Android/CMakeLists.txt +++ b/src/native/libs/System.Security.Cryptography.Native.Android/CMakeLists.txt @@ -33,7 +33,7 @@ set(NATIVECRYPTO_SOURCES add_library(System.Security.Cryptography.Native.Android SHARED - ${NATIVECRYPTO_SOURCES} + ${NATIVECRYPTO_SOURCES} pal_jni_onload.c ${VERSION_FILE_PATH} ) diff --git a/src/native/libs/System.Security.Cryptography.Native.Android/pal_jni.c b/src/native/libs/System.Security.Cryptography.Native.Android/pal_jni.c index 243dbd1d9466d..ee31a3ac58d64 100644 --- a/src/native/libs/System.Security.Cryptography.Native.Android/pal_jni.c +++ b/src/native/libs/System.Security.Cryptography.Native.Android/pal_jni.c @@ -689,11 +689,10 @@ int GetEnumAsInt(JNIEnv *env, jobject enumObj) return value; } -JNIEXPORT jint JNICALL -JNI_OnLoad(JavaVM *vm, void *reserved) +jint AndroidCryptoNative_InitLibraryOnLoad (JavaVM *vm, void *reserved) { (void)reserved; - LOG_INFO("JNI_OnLoad in pal_jni.c"); + LOG_DEBUG("%s in %s", __PRETTY_FUNCTION__, __FILE__); gJvm = vm; JNIEnv* env = GetJNIEnv(); diff --git a/src/native/libs/System.Security.Cryptography.Native.Android/pal_jni.h b/src/native/libs/System.Security.Cryptography.Native.Android/pal_jni.h index 79bc888224629..5f7d7c002c414 100644 --- a/src/native/libs/System.Security.Cryptography.Native.Android/pal_jni.h +++ b/src/native/libs/System.Security.Cryptography.Native.Android/pal_jni.h @@ -605,6 +605,11 @@ jfieldID GetField(JNIEnv *env, bool isStatic, jclass klass, const char* name, co jfieldID GetOptionalField(JNIEnv *env, bool isStatic, jclass klass, const char* name, const char* sig) ARGS_NON_NULL_ALL; JNIEnv* GetJNIEnv(void); +// This is supposed to be called by embedders who link the **static** archive of this library. +// The function must be called from the embedder's `JNI_OnLoad` function prior to using any +// APIs in this library. +jint AndroidCryptoNative_InitLibraryOnLoad (JavaVM *vm, void *reserved); + int GetEnumAsInt(JNIEnv *env, jobject enumObj) ARGS_NON_NULL_ALL; void* xmalloc (size_t size) __mallocfunc __BIONIC_ALLOC_SIZE(1) __wur; diff --git a/src/native/libs/System.Security.Cryptography.Native.Android/pal_jni_onload.c b/src/native/libs/System.Security.Cryptography.Native.Android/pal_jni_onload.c new file mode 100644 index 0000000000000..e2ecc9f3b8aa5 --- /dev/null +++ b/src/native/libs/System.Security.Cryptography.Native.Android/pal_jni_onload.c @@ -0,0 +1,10 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +#include "pal_jni.h" + +JNIEXPORT jint JNICALL +JNI_OnLoad(JavaVM *vm, void *reserved) +{ + return AndroidCryptoNative_InitLibraryOnLoad (vm, reserved); +}