-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Description
Description
I have been experimenting with Android and NativeAOT through JNI shared libraries that are consumed by the HelloJNI application.
However with latest runtime version, opening the application closes it due to the absence of the "tls_CurrentThread" symbol into the compiled library.
My last successful experiment was on 2022 July 20th with microsoft.dotnet.ilcompiler 7.0.0-rc.1.22370.2.
The JNI library code is: https://github.com/josephmoresena/NativeAOT-AndroidHelloJniLib
The branch I use to compile NativeAOT is:
https://github.com/josephmoresena/runtime/tree/android
Reproduction Steps
- Download the NDK version r21e.
- Install the NDK in ~/android-ndk-r21e
- Clone the android branch of josephmoresena/runtime to ~/source/repos/runtime
- Clone the main branch of josephmoresena/NativeAOT-AndroidHelloJniLib.
- Declare the following environment variables:
export NDK_VER=r21e export ANDROID_NDK_ROOT=~/android-ndk-${NDK_VER} export ANDROID_SDK_ROOT=~/android-sdk export HOST_OS=linux export RUNTIME_REPO=~/source/repos/runtime - Compile the runtime with the following command:
TARGET_BUILD_ARCH=arm64 ./build.sh -s clr.nativeaotruntime+clr.nativeaotlibs+libs+mono -arch arm64 -os Android -c Release -lc Release -rc Release - Compile NativeAOT-AndroidHelloJniLib using the instructions in the README.md file.
- Rename output AndroidHelloJniLib.so file to libhello-jni.so and put it inside com.example.hellojni jniLibs/ folder.
- Compile and debug com.example.hellojni on Android ARM64 device.
Expected behavior
The android application loads an shows a text generated by NativeAOT JNI library.
Actual behavior
Application crashes and debugger shows following error:
I/xample.hellojn: Late-enabling -Xcheck:jni E/xample.hellojn: Unknown bits set in runtime_flags: 0x8000 D/tperf_getInstance: processName = com.example.hellojni unsupported!!! D/AndroidRuntime: Shutting down VM E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.hellojni, PID: 17805 java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "tls_CurrentThread" referenced by "/data/app/com.example.hellojni-XDL8YyYt8MsAq_ToR3xQ8A==/base.apk!/lib/arm64-v8a/libhello-jni.so"... at java.lang.Runtime.loadLibrary0(Runtime.java:1071) at java.lang.Runtime.loadLibrary0(Runtime.java:1007) at java.lang.System.loadLibrary(System.java:1667) at com.example.hellojni.HelloJni.<clinit>(HelloJni.kt:72) at java.lang.Class.newInstance(Native Method) at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95) at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45) at android.app.Instrumentation.newActivity(Instrumentation.java:1252) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3318) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3562) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2131) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7540) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:980)
Regression?
I don't know with accurrancy, latest succesfull experimente was mate on 2022 July 20th.
Known Workarounds
No response
Configuration
- Linux Host: WLS/WLS2 Ubuntu 22.04 x64
- Android version: 10
- Android Studio: 2021.3.1
Other information
No response