2011-11-22 58 views
3

在Android NDK网站,你可以阅读:与Java相比,Android C有更好的性能吗?

而Android NDK是一个配套工具到Android SDK,让您可以应用的 构建性能的关键部分在本地代码。

...

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

上运行...

使用本机代码不会导致自动增加性能,但会增加应用程序的复杂性。

那么如果C还编译为VM代码,那么如何使用C和NDK获得性能?你可以绕过API,或者C编译为更优化的代码,或者什么?

或者它只是“开发加速”,所以如果你有一些C代码,你不必将它移植到Java?

编辑:

我做“Java是比C慢”。我的考虑是,如果C是用gcc编译,然后怎么便携解决(但是这是第二个问题,在背景中)

What are the portability implications of using the NDK?

+1

你真的在问C是否比Java快? –

+0

请记住,Android有它自己的虚拟机,比常规的Java虚拟机快很多,所以你只能用Java编写,但字节码是Dalvik。主要原因为什么黑莓应用吸和Android的不要(性能明智)。 – blindstuff

+1

@CédricJulien:我真的问过它吗?再次研究我的问题,发现我询问Android C是否运行在虚拟机上,而不是C比Java更快 –

回答

4

C代码的NDK允许您添加到您的应用程序不编译到VM代码。它使用gcc和链接编译为共享库,可以通过JNI加载并链接到Java。因此,编写Java代码时,您可以通过使用C编写而不是依赖JVM优化来获得性能。

+1

@JakubM:“不会导致自动性能增加”是因为你从Java访问的许多东西在Android中已经在C中用固件实现了,所以你自己的实现可能无关紧要。另外,从Java调用C到C(或相反)的开销很大,因此两者之间设计不佳的接口可能会导致比仅仅使用Java处理任何事情都要慢的结果。 – CommonsWare

+1

好吧,现在问题出现在后台:如果它是通过GCC编译的,那么它如何可以移植? Androids在不同的处理器上运行,使用不同的指令集 –

+1

@JakubM。 :看看这里http://stackoverflow.com/questions/4116684/what-are-the-portability-implications-of-using-the-ndk的可移植性问题。 –