前提:
1. 你已經安裝好 cygwin + NDK 等環境了
2. 你已經做好手動建立 JNI 的 makefile 了 (或是拿別人的專案要改自動化NDK)
如非上述, 請忽略本文吧. 還是從我之前的 Eclipse+Android SDK/NDK 開發環境的過程 1 & 2 開始練起.
---------------------------------------------------------------------
58. (2) (用 Eclipse 每次編譯 (build) 時自動建立 libhello.so)
59. menu -> 'Project' -> 'Properties', 開啟 Properties for xx 對話盒
註: 如果在 Project Explorer 裡有多個專案, 請確認哪一個需要做自動執行 ndk-build, 先選好其中的一個 project, 也可以在其名字上按滑鼠右鍵彈出選單後, 選 'Properties'. 如果多個專案都需要自動執行 ndk-build, 那 "各自" 都要做下面的步驟!
60. 點選 Builders 項目, 按下 'New...', 開啟 Choose configuration type
對話盒
61. 點選 Program 項目, 按下 'OK', 開啟 Edit launch configuration
properties 對話盒
Name: 隨你高興 (建議取有意義的字, 我都用 'NDK Builder')
Main 標籤頁下 (如下圖):
Location: C:\cygwin\bin\bash.exe
Working Directory: (留白)
Arguments: --login -c "/cygdrive/c/android-ndk/ndk-build -C `cygpath -u '${build_project}' `"
NOTE: 1. 以上 cygwin 及 android-ndk 路徑, 請依真實情況修改
2. 另外一種 Arguments 寫法:
--login -c "cd '${project_loc}' && /cygdrive/c/android-ndk/ndk-build"
註: 這裡非常重要, 就是實際手動執行 bash, ndk-build 的方式在此輸入好.
Refresh 標籤頁下 (如下圖):
Refresh resources upon completion 打勾
註:告知當 ndk-build 執行完畢後, 要接著刷新專案的哪些資源, 一般我們只選因為 ndk-build 執行後所影響(變更)的文件 (如 libs...), 這樣專案其他不相關的文件不會重新又編譯一次.
選取下方的
The Entire workspace
或
Specific resources 項目
按 'Specify Resources...' 按鈕, 將專案中的 libs 目錄(*) 打勾
註: (*) 第一次建立時, 若沒有編譯 jni 過, 可能沒有 libs 目錄, 建議編譯過 jni 後改選這個.
Recursive include sub-folders 打勾
Environment 標籤頁下 (如下圖):
(留白)
Build Options 標籤頁下 (如上圖):
Allocate Console 打勾
File 不勾
Launch in background 打勾
After a "Clean" 打勾 (或不勾看你習慣)
During manual builds 打勾
During auto builds 打勾 (或不勾看你習慣)
During a "Clean" 不勾 (或勾看你習慣)
Specify working set of relevant resources 打勾
註: Eclipse help 裡說鑑於效能考量, 不建議 During auto builds 打勾, 我是覺得還好啦. 看你習不習慣 Eclipse 自動(暗自)啟動 ndk-build 囉.
按 'Specify Resources...' 按鈕, 將專案中的 jni 目錄打勾
註: 這樣子只有 jni 資源目錄下的文件有變更時才會啟動自動編譯, 或是依你需求可以加選擇其他的資源目錄. (例如把 C/C++ source files 放在另外一個目錄, 如果不選 Specify working set of relevant resources 則專案內任一資源變動都會啟動自動編譯)
設置好後, 按 'Finish' 回到上一層對話盒, 再按 'OK'
62. 此時, 你的 makefile 會依 Run the builder 的指定時機自動編譯, 或手動在選單->Project->Clean + Build Project
注意 NDK Builder 編譯的時候, Eclipse 的 Console 視窗會同手動一樣顯示 ndk-build 結果,下圖, Console 顯示 bash 執行 NDK Builder...
註: 我經驗上, 以上是設置好了, 但 console 視窗卻沒有出現上圖執行過程...原因
1. 確認步驟 61 的 bash ndk-build 路徑有沒有正確...
2. Eclipse 認定不需要執行 NDK Builder (也許因為你已經手動執行過一次了, 之後沒有再修改 C sources 或 makefile), 試著強制從選單-> clean project 看看...
P.S. 我都是修改一下 jni 的 makefile 內容, 多加一個空白按儲存, 就 (或按 F5 Refresh) 判定需要重新編譯了~
P.S. 我都是修改一下 jni 的 makefile 內容, 多加一個空白按儲存, 就 (或按 F5 Refresh) 判定需要重新編譯了~
3. C sources 的檔案應該要放到 Project Explorer 裡得 jni folder (或 working set of relevant resources 之處) 才能有相依關連.
後記:
以上的設置 Eclipse 會放在 .externalToolBuilders 下 (NAME).launch, 我的是 NDK_Builder.launch, 這個文件可以直接編輯, 我把此文件隨著專案檔案控管, 當專案其他的成員 check out 時也能直接使用(或修改一下路徑)而不是重複以上的 NDK 環境設置.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration
..略...
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="--login -c "/cygdrive/c/android-ndk/ndk-build -C `cygpath -u '${build_project}' `""/>
..略...
</launchConfiguration>
沒有留言:
張貼留言