【问题标题】:Android NDK ambiguity, compiles to byte or machine code?Android NDK 歧义,编译为字节码还是机器码?
【发布时间】:2011-08-13 01:25:21
【问题描述】:

刚刚查看 NDK 文档,http://developer.android.com/sdk/ndk/index.html,第一段状态

如果您编写本机代码,您的应用程序仍会打包到 .apk 文件中,并且它们仍会在设备上的虚拟机内运行。

这与修订版 6 的第一个要点相矛盾,

添加了对 x86 ABI 的支持,它允许您生成在兼容的基于 x86 的 Android 设备上运行的机器代码。

现在我的本机将编译为虚拟机的机器码或字节码吗?

---编辑---

也许我读错了,应用程序当然在虚拟机中运行,同时仍然调用显式、自定义、本机(机器)代码。听起来对吗?

【问题讨论】:

  • 显然我不会针对 x86,而是针对 ARM,但列出的 URL 并没有那么远。

标签: android-ndk


【解决方案1】:

您的编辑是正确的。您仍然需要在 java 中创建标准活动,并使用 jni 调用您已编译的本机代码,这很像调用一些不在 dalvikVM 中运行的 API(例如 sqlite)。这个原生代码当然是依赖于架构的。

AFAIK,这确实会随着原生活动(android 2.3+)而改变,但由于只有一小部分手机运行 2.3+,所以我没有进行太多调查。

编辑:这样想,使用 NDK,您可以制作一个库,然后您可以在您使用 SDK 制作的应用中使用它。不过,只要稍微了解一下,您就可以将大部分应用程序智能放入该库中,使您的应用程序只是库周围的一些胶水代码。

不过,附带说明一下,您可以使用 NDK 为 android 制作完全原生的程序,就像使用任何交叉编译器(main 方法和所有方法)一样。但是,除非您计划将来发布 Android 手机,或者仅针对具有 root 权限的用户,否则您不会这样做,因为普通用户如果不将其安装为应用程序就无法执行本机程序,这相当明显(安全) 原因。

【讨论】:

  • 一直在研究我的“智能”,所以 AFK。实际上是要针对 root 用户来避免 25 英镑的市场注册费......现在。
  • 所以这个库会像一个 linux .so 吗?当我设置好我的cygwin时,这一切对我来说都是有意义的。只需阅读 NDK 如何配备专门用于 ARM 的 x 编译器,还有一个障碍 :)
  • 仅供参考,与 iOS 不同,您不需要对设备具有 root 访问权限即可安装 3rd 方 APK,afaik,所有手机都允许普通用户执行此操作(尽管 AT&T 用户可能需要跳转通过几圈)。是的,它很像一个常规的 linux .so 库,您可以使用 JNI 加载它。
猜你喜欢
  • 2011-05-19
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多