如果我使用创建的 ndk 库,有没有办法不包含 .so 文件?
Is there a way to don't include .so file if I use created ndk lib?
我创建了 Android 使用 NDK ArCore 的库
https://developers.google.com/ar/develop/c/enable-arcore
然后我构建了一个库并得到了 .aar
文件。然后我创建了新的示例项目并将这个 .aar
文件包含为一个模块(导入 .JAR/.AAR 包)并像依赖项一样链接它,所以一切正常。
问题是 - 当我尝试调用使用 ArCore
的方法时出现这样的错误
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.ar, PID: 7822
java.lang.UnsatisfiedLinkError: dlopen failed: library "libarcore_sdk_c.so" not found
at java.lang.Runtime.loadLibrary0(Runtime.java:1016)
at java.lang.System.loadLibrary(System.java:1669)
at com..libtetplayer.JniInterface.<clinit>(JniInterface.java:32)
at com..libtetplayer.JniInterface.createNativeApplication(Native Method)
at com.example.ar.MainActivity.onCreate(MainActivity.kt:20)
at android.app.Activity.performCreate(Activity.java:7326)
at android.app.Activity.performCreate(Activity.java:7317)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3072)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3235)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1926)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:6990)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)
为了修复它:
在我构建我的库之后,在构建目录下有一些自动生成的文件,在那里我找到了 arcore-native
目录并且有四个目录
我刚刚将此源代码移至 main
目录下的示例项目,现在它完全可用
问题 是 - 有没有办法在实施库时不将此目录与 .so
文件一起包含在项目中?也许我需要以某种方式将它们直接包含到 lib 中?
P.S. 因为每次询问想要实现我的库的用户都有点困难,还包括一些带有 .so
文件的目录。 ..
您可以将来自 arcore-native 的 .so
文件放入您的 .aar
文件中,它们将与您的库一起交付。
我创建了 Android 使用 NDK ArCore 的库
https://developers.google.com/ar/develop/c/enable-arcore
然后我构建了一个库并得到了 .aar
文件。然后我创建了新的示例项目并将这个 .aar
文件包含为一个模块(导入 .JAR/.AAR 包)并像依赖项一样链接它,所以一切正常。
问题是 - 当我尝试调用使用 ArCore
的方法时出现这样的错误
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.ar, PID: 7822
java.lang.UnsatisfiedLinkError: dlopen failed: library "libarcore_sdk_c.so" not found
at java.lang.Runtime.loadLibrary0(Runtime.java:1016)
at java.lang.System.loadLibrary(System.java:1669)
at com..libtetplayer.JniInterface.<clinit>(JniInterface.java:32)
at com..libtetplayer.JniInterface.createNativeApplication(Native Method)
at com.example.ar.MainActivity.onCreate(MainActivity.kt:20)
at android.app.Activity.performCreate(Activity.java:7326)
at android.app.Activity.performCreate(Activity.java:7317)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3072)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3235)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1926)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:6990)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)
为了修复它:
在我构建我的库之后,在构建目录下有一些自动生成的文件,在那里我找到了 arcore-native
目录并且有四个目录
我刚刚将此源代码移至 main
目录下的示例项目,现在它完全可用
问题 是 - 有没有办法在实施库时不将此目录与 .so
文件一起包含在项目中?也许我需要以某种方式将它们直接包含到 lib 中?
P.S. 因为每次询问想要实现我的库的用户都有点困难,还包括一些带有 .so
文件的目录。 ..
您可以将来自 arcore-native 的 .so
文件放入您的 .aar
文件中,它们将与您的库一起交付。