我已經掌握了需要爲MIPS設備構建的專有JNI應用程序。我讀過"Initializing a Build Environment",部分NDK文檔,一些Google網上論壇主題和衆多StackOverflow問題,但我仍然沒有回答。爲JNI應用程序設置Android構建環境
到目前爲止,我已經使用Google的回購腳本檢出了Android源代碼,並且在~/AndroidSource
之下。我還單獨下載了~/AndroidSDK
下的SDK和~/AndroidNDK
下的NDK。我正在嘗試構建的代碼位於不同的位置。 SDK和NDK二進制文件在我的路徑中。對於構建,我試圖使用兩個不同版本的NDK以及Android源代碼樹下的版本,並且遇到了不同的問題。我目前的設置使用NDK r8b,從Android源單獨下載。
該應用程序有其Android.mk
和jni/Android.mk
。然而,後者中的若干指令指向如下路徑,如
frameworks/base/include
system/core/include
沒有前綴。我認爲這些是爲了指向Android源代碼中的相應目錄,所以我將它們鏈接到當前目錄。經過一些更多的符號鏈接和makefile以及源代碼的黑客入侵之後,我得到了應用程序進行編譯,但我目前停留在鏈接階段,並且有大量缺少方法體的引用。在整個過程中,我知道我做錯了什麼。
我在Linux x86_64主機上,如果有任何問題的話。
所以我的問題是:
什麼是設立JNI應用的編譯環境的正確方法?我應該設置哪些環境變量,符號鏈接和/或路徑擴展?我需要在調用每個ndk-build
之前或之前調用任何腳本嗎?
另外,如果你糾正了我錯誤的任何概念或術語,我會很高興。
我認爲鏈接問題與應用程序代碼構建的庫有關,而不是預先構建在設備上,但現在我無法測試。我不再在該應用程序上工作,並且我的本地Android源與其目標不匹配。然而,我正在尋找「正確的做法」的答案。 – mcmlxxxvi
如果include路徑中包含'frameworks/base/include'和'system/core/include',則很可能會有'-lutils'和'-lcutils'。這兩個庫實際上是無處不在的,但不是NDK附帶的「穩定API」的一部分。 –