【问题标题】:Is there a way to don't include .so file if I use created ndk lib?如果我使用创建的 ndk lib,有没有办法不包含 .so 文件?
【发布时间】:2019-11-20 13:52:07
【问题描述】:

我创建了使用 NDK ArCore 的 Android 库

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 dir 并且有四个目录

我刚刚将此源移动到main 目录下的示例项目,现在它完全可以工作了

问题是 - 有没有办法在实现 lib 时不将此目录与 .so 文件包含在项目中?也许我需要以某种方式将它们直接包含到 lib 中?

P.S. 因为每次询问想要实现我的库的用户有点困难,还包括一些带有.so 文件的目录...

【问题讨论】:

    标签: android android-ndk lib ndk-build


    【解决方案1】:

    您可以将 arcore-native 中的 .so 文件放入您的 .aar 文件中,它们将与您的 lib 一起提供。

    【讨论】:

    • 听起来不错,但现在 AS 说它有不止一个 .so 文件...我发布了另一个关于它的问题 stackoverflow.com/questions/58969292/…
    • 我很困惑。 .aar 文件用于您提供的库。这个库应该不再需要 com.google.ar:core 依赖,它应该有 ARCore 捆绑在里面。
    猜你喜欢
    • 2016-01-12
    • 2014-03-30
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 2022-01-18
    相关资源
    最近更新 更多