2011-08-11 100 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加載。 –