【问题标题】:C++ library for android [closed]用于 android 的 C++ 库 [关闭]
【发布时间】:2014-01-20 16:21:54
【问题描述】:

我使用 SDK 在 Eclipse 中编写了多个应用程序。我以前也使用过 C++。现在我被要求安排一些旧的 C++ 代码被打包到一个 java 库中,或者至少有一个 java 接口,以便其他 android 程序员(不了解 C++)可以在他们的代码中使用它。

我看到了各种使用 NDK 将 C++ 代码制作成完整的独立应用程序的示例和讨论,但从来没有一个库。

如果使用我的库的 android 程序员甚至不需要自己了解或安装 NDK,那就更好了。

有人可以确认我正在尝试做的事情甚至是可能的。如果有,怎么做?

【问题讨论】:

  • 您不能只提供为您所针对的任何 ARM 编译的库并使用 JNI 与之交互吗?我知道 c4droid 可以安装 SDL 和 Qt,因此必须可以使用预编译的库。另外,你可以看看developer.android.com/reference/android/app/NativeActivity.html
  • 有可能。可能和容易之间是有区别的。 This 可能会有所帮助。
  • 这绝对是可能的。 NDK 的全部目的是允许本地代码 (C++) 与 Dalvik VM 交互。你知道你的目标是哪个平台吗?您需要交叉编译本机代码。
  • @bblincoe:被“你知道你针对的是哪个平台”感到困惑——我的目标是各种安卓手机和平板电脑——我误解了这个问题吗?
  • @Mick 当我说平台时,我的意思是架构(例如 ARM)。也看看这个问题:stackoverflow.com/questions/10071204/…

标签: java android c++ eclipse android-ndk


【解决方案1】:

is a way to do it 与 Eclipse (ADT):

您可以创建一个 android 库项目并让开发人员 将该库项目添加到他们的主项目中。任何本机库 在该项目中,如果他们有 已经内置到它的 lib 目录中。这不是一个整洁的 jar,但这与我们对常规 android 库执行此操作的方式相同 导出 java 代码和资源的项目。

对于AndroidStudio,包装有点不同,见this discussion。请注意,AS 当前是一个移动目标;我们都希望它在正式发布之前能得到 NDK 的大力支持。

【讨论】:

    【解决方案2】:

    您需要编写JNI(Java 本机接口)代码才能访问该库。在您的 Java 类中,您将有一个方法,例如:

    private native final int doStuff();
    

    这将对应于使用 NDK 编译的 .cpp 文件中的函数。这个 C++ 函数会在调用 Java 方法时被调用。

    看看这篇文章:http://mobile.tutsplus.com/tutorials/android/ndk-tutorial/

    这是一个我正在做的开源项目:https://github.com/svenoaks/SoundTouch-Android。看一下 soundtouch-jni.cpp 文件,它与 SoundTouch.java 文件中的调用是如何对应的。

    编写适当的方法后,您可以将您的 C++ 库和 JNI 代码编译成二进制 .so 文件,这样用户就无需了解有关 NDK 的任何信息。然后可以像使用常规 Android 库项目一样使用该项目。

    如果您想针对 x86 设备以及 ARM 架构,您需要在 Application.mk 文件中启用 x86 来构建它 - 请查看 http://software.intel.com/en-us/articles/creating-and-porting-ndk-based-android-apps-for-ia#using-x86-ndk-toolset

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-10
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 2010-11-19
      • 2012-03-17
      • 2011-08-22
      相关资源
      最近更新 更多