Android 6.0 Preview 3 设备(目标 sdk 23),System.loadLibrary 失败
Android 6.0 Preview 3 device (with target sdk 23) , System.loadLibrary is fail
(1) 构建状态
* 目标 SDK:23
(1-1) 构建状态 - 添加
* 日食-靛蓝
* ndk-android-ndk-r7c
(2) 设备状态
* 设备 OS : Android 6.0 预览版 3 OS , Android 6.0
* 设备名称:Nexus 9
(3) 代码
案例一
System.loadLibrary("game");
案例2
System.load(“/lib/libc2scommon.so");
(4) 错误消息
案例 1
09-30 19:06:56.091: D/AndroidRuntime(3512): Shutting down VM
09-30 19:06:56.091: E/AndroidRuntime(3512): FATAL EXCEPTION: main
09-30 19:06:56.091: E/AndroidRuntime(3512): Process: <MY_APP_ID>, PID: 3512
09-30 19:06:56.091: E/AndroidRuntime(3512): java.lang.UnsatisfiedLinkError: dlopen failed: /data/app/<MY_APP_ID>-1/lib/arm/libgame.so: has text relocations
09-30 19:06:56.091: E/AndroidRuntime(3512): at java.lang.Runtime.load(Runtime.java:332)
09-30 19:06:56.091: E/AndroidRuntime(3512): at java.lang.System.load(System.java:1069)
案例 2
09-30 18:43:42.390: E/AndroidRuntime(3082): Process: <MY_APP_ID> , PID: 3082
09-30 18:43:42.390: E/AndroidRuntime(3082): java.lang.UnsatisfiedLinkError: dlopen failed: /data/app/<MY_APP_ID>-2/lib/arm/libgame.so: has text relocations
09-30 18:43:42.390: E/AndroidRuntime(3082): at java.lang.Runtime.load(Runtime.java:332)
09-30 18:43:42.390: E/AndroidRuntime(3082): at java.lang.System.load(System.java:1069)
问题是什么?
Target SDK 22 没有问题。
请帮忙
如果您的目标是 SDK 23 或更高版本,则具有文本重定位的共享库现在会被拒绝。这记录在这里:
https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-runtime
您必须修复它们,这意味着您需要访问本机代码和准备好的 NDK。最简单的解决方法是将 -fpic 或 -fPIC 添加到 Android.mk 文件中的 LOCAL_CFLAGS,然后重建库。
(1) 构建状态
* 目标 SDK:23
(1-1) 构建状态 - 添加
* 日食-靛蓝
* ndk-android-ndk-r7c
(2) 设备状态
* 设备 OS : Android 6.0 预览版 3 OS , Android 6.0
* 设备名称:Nexus 9
(3) 代码
案例一 System.loadLibrary("game");
案例2 System.load(“/lib/libc2scommon.so");
(4) 错误消息
案例 1
09-30 19:06:56.091: D/AndroidRuntime(3512): Shutting down VM
09-30 19:06:56.091: E/AndroidRuntime(3512): FATAL EXCEPTION: main
09-30 19:06:56.091: E/AndroidRuntime(3512): Process: <MY_APP_ID>, PID: 3512
09-30 19:06:56.091: E/AndroidRuntime(3512): java.lang.UnsatisfiedLinkError: dlopen failed: /data/app/<MY_APP_ID>-1/lib/arm/libgame.so: has text relocations
09-30 19:06:56.091: E/AndroidRuntime(3512): at java.lang.Runtime.load(Runtime.java:332)
09-30 19:06:56.091: E/AndroidRuntime(3512): at java.lang.System.load(System.java:1069)
案例 2
09-30 18:43:42.390: E/AndroidRuntime(3082): Process: <MY_APP_ID> , PID: 3082
09-30 18:43:42.390: E/AndroidRuntime(3082): java.lang.UnsatisfiedLinkError: dlopen failed: /data/app/<MY_APP_ID>-2/lib/arm/libgame.so: has text relocations
09-30 18:43:42.390: E/AndroidRuntime(3082): at java.lang.Runtime.load(Runtime.java:332)
09-30 18:43:42.390: E/AndroidRuntime(3082): at java.lang.System.load(System.java:1069)
问题是什么?
Target SDK 22 没有问题。
请帮忙
如果您的目标是 SDK 23 或更高版本,则具有文本重定位的共享库现在会被拒绝。这记录在这里: https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-runtime
您必须修复它们,这意味着您需要访问本机代码和准备好的 NDK。最简单的解决方法是将 -fpic 或 -fPIC 添加到 Android.mk 文件中的 LOCAL_CFLAGS,然后重建库。