引用动态库的Android NativeActivity无法部署

Android NativeActivity that references a dynamic library fails to deploy

本文关键字:部署 NativeActivity Android 动态 引用      更新时间:2023-10-16

环境

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

  • 本地活动。这就是我想放安卓特定代码的地方。它有一些默认代码,可以使屏幕颜色在绿色和黑色之间渐变
  • 帮助部署的"打包"项目

我已经成功地将其部署到Intel HAXM虚拟设备以及通过USB连接的真实设备上。到目前为止一切都很好。

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

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

其他信息:

  • Android SDK 5.1(Android-22(
  • 安卓NDK 21
  • x86
  • Clang 3.8
  • C++11
  • 不使用生成文件或渐变

问题

现在,每当我部署到虚拟/真实设备时,我都会收到以下错误(取自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

我尝试过的事情

  • 将Core库更改为static(.a(
  • 检查android设备以查看该文件是否存在-它确实存在
  • 手动将.APK部署到android设备

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

这看起来很相关,但很古老,对于非常常见的情况来说,这是一个不必要的破解-可以';t在本机活动应用程序中加载具有依赖项的本机共享库-https://github.com/ikonst/android-dl

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

已经挣扎了一段时间,但最终还是很容易地部署了库。

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

右键单击新添加的库并选择属性,项类型应为库,将Content设置为Yes,这将部署库。