引用动态库的Android NativeActivity无法部署
Android NativeActivity that references a dynamic library fails to deploy
环境
我有一个全新的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,这将部署库。
- 使用调试/崩溃报告将应用程序部署到客户端
- 使用 mod_gsoap 部署服务时,如何在 Gsoap 中更改 soap 上下文的模式?
- Qt QML相机在部署后显示白屏
- WinDeployqt 不会为调试应用程序部署 Qwindowsd.dll
- 在 Linux 上部署 Qt 应用程序
- 如何使用所有依赖项部署C++项目?
- 更改用于部署的凭据提供程序 GUID 的过程
- 由于____chkstk_darwin,在Catalina上使用部署10.10编译的MacOS应用程序在HighSierra版本<崩溃
- Qt5 部署"procedure entry point could not be located"
- 用 Python 训练神经网络并在 C++ 中部署
- 部署在张量流中训练的神经网络来火炬C++的最佳方法是什么?
- 部署基于 qt 的项目后,我的 sqlite3 文件不会被复制 (android)
- Qt-png图像未显示在部署应用程序中
- 从Windows 10编译VS2017在Windows 7和…上部署..找不到DLL
- 如何部署C++DLL
- 使用静态 Qt 构建在 Linux 上部署 Qt5 应用程序
- Windows 上的 KDE 框架部署
- QT QML:使用.qrc文件将SQLite数据库部署到Android不起作用
- CMAKE+QT MAC 如何设置部署目标?
- Java JNI GDAL 本机库在重新部署为 Web 应用程序时出现类加载器错误