2011-08-11 40 views
2

只是审查NDK文档,http://developer.android.com/sdk/ndk/index.html,首先对国家Android NDK歧义,编译为字节或机器代码?

如果你写本地代码,你的应用程序仍然打包成一个.apk文件,他们仍然在虚拟机内的设备上运行。

这违背了修订6的第一点,

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

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

- 编辑---

也许我已阅读,错了,当然应用在虚拟机中运行,同时还呼吁分解成明确的,定制的,本地(机器)码。听起来正确吗?

+0

很明显,我不会瞄准x86而是ARM,但列出的URL并没有那么远。 – John

回答

2

您的编辑是正确的。您仍然需要在java中创建标准活动,并使用jni来调用您编译的本地代码,这很像调用一些未在dalvikVM中运行的API(例如sqlite)。这个本地代码当然是依赖于架构。 AFAIK,这确实随着本地活动(android 2.3+)而改变,但由于只有一小部分手机运行2.3+,我还没有调查过它。

编辑:可以这样想,通过NDK,您可以创建一个库,然后您可以在使用SDK制作的应用程序中使用它。尽管知道一点,但是你可以将大部分应用程序智能化放入该库中,使你的应用程序仅仅是库上的一些胶水代码。尽管如此,您可以使用NDK为android创建完全本机的程序,就像使用任何交叉编译器(主要方法和所有)一样。但是,除非您计划将来发布Android手机,或者仅针对使用root的用户,否则不会这样做,因为普通用户无法将其安装为应用程序而无法执行本机程序,因为相当明显(安全性)的原因。

+0

一直在我的'聪明'如此AFK工作。实际上是以root用户为目标,以避免25英镑的市场注册费用。 – John

+0

因此,这个库将像一个Linux .so?当我建立cygwin时,这对我来说都是有意义的。只需阅读NDK附带的专门针对ARM的X编译器,再多一次就可以了:) – John

+0

仅供参考,与iOS不同,您无需root权限即可安装第三方APK,afaik,所有手机普通用户有权执行此操作(尽管AT&T用户可能需要跳过一些小圈子)。是的,这很像一个正常的linux.so库,它使用JNI加载。 –