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

时间:2016-08-16 17:25:51

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

环境......

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

  • 原生活动。这是我想要放置Android特定代码的地方。它有一些默认代码,用于淡化绿色和黑色之间的屏幕颜色。
  • 帮助部署的'打包'项目。

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

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

所有内容都可以编译和链接。我仍然可以创建一个.APK文件。

其他信息:

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

问题......

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

xquery version "3.0";

let $node := 
    <persName>
        <forename>Gaius</forename>
        <surname>Iulius</surname>
        <addName>Caesar</addName>
    </persName>
return
    (
        if ($node/forename) then "1" else "0",
        if ($node/surname) then "1" else "0",
        if ($node/surname and $node/forename) then "1" else "0"
    )

我尝试过的事情......

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

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

这看起来很有意义,但对于必须非常普遍的情况来说,又是一次不必要的破解   - Can't load native shared library with dependencies in a native activity app   - https://github.com/ikonst/android-dl

为了它的价值,我是Visual Studio(15年)的经验丰富的C#开发人员。 因此,在开发应用程序时,我认为很多事情都是理所当然的 - 这是我第一个使用C ++ / Android的项目,似乎更像是一场让一切运转起来的手动战斗!

1 个答案:

答案 0 :(得分:0)

已经挣扎了一段时间但是设法部署了这些库,最终很容易。

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

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