【问题标题】:Android NativeActivity that references a dynamic library fails to deploy引用动态库的 Android NativeActivity 部署失败
【发布时间】:2016-12-23 04:31:12
【问题描述】:

环境...

我有一个全新的 Visual Studio 2015 Android NDK 解决方案。 这包含 2 个项目(由 Visual Studio 生成的默认模板代码):

  • 本地活动。这是我要放置 Android 特定代码的地方。它有一些默认代码,可以在绿色和黑色之间淡化屏幕颜色。
  • 帮助部署的“打包”项目。

我已成功将其部署到英特尔 HAXM 虚拟设备以及通过 USB 连接的真实设备。到目前为止一切顺利。

然后我添加了一个 Android 动态库项目 (.so) - 这是我想要放置核心代码的地方(与平台无关)。 我从本机活动项目中添加了对这个 Core 库的引用。

一切编译和链接都很好。我仍然可以创建一个 .APK 文件。

其他信息:

  • Android SDK 5.1 (Android-22)
  • Android NDK 21
  • x86
  • Clang 3.8
  • C++ 11
  • 不使用 Make 文件或 Gradle

问题...

现在每当我部署到虚拟/真实设备时,我都会收到以下错误(取自 logcat)

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.NATester/android.app.NativeActivity}: java.lang.IllegalArgumentException: Unable to load native library: /data/app/com.NATester-2/lib/x86/libNATester.so

我尝试过的事情...

  • 将核心库更改为静态 (.a)
  • 检查 android 设备以查看文件是否存在 - 它确实存在。
  • 手动将 .APK 部署到 android 设备。

一些文章建议使用 Java 代码来加载库 - 我想避免调用 Java 代码,例如System.LoadLibrary 因为这似乎是一个 hack - 我觉得应该可以在 android 上拥有一个纯 C++ 应用程序。我不能是唯一遇到这个问题的人吗?!

这看起来很相关,但很老,对于必须非常常见的情况来说,这又是不必要的黑客攻击 - Can't load native shared library with dependencies in a native activity app - https://github.com/ikonst/android-dl

不管怎样,我是一名经验丰富的 C# 开发人员,使用 Visual Studio(15 年)。 因此,在开发应用程序时,我认为很多事情是理所当然的——这是我第一个使用 C++/Android 的项目,而且似乎更像是一场手动战斗才能让一切正常工作!

【问题讨论】:

    标签: android c++ visual-studio-2015 android-ndk


    【解决方案1】:

    苦苦挣扎了一段时间,但设法部署了库,最后很容易。

    在解决方案资源管理器中右键单击项目 [theProject (Andorid-xx)] 并选择添加新项目,添加您的 .so 库。

    在新添加的库上右键选择属性,项目类型应该是库,设置内容为是,这将部署库。

    【讨论】:

      猜你喜欢
      • 2018-09-23
      • 1970-01-01
      • 2018-10-28
      • 2020-05-19
      • 2019-03-12
      • 2022-09-09
      • 1970-01-01
      • 2016-12-12
      • 1970-01-01
      相关资源
      最近更新 更多