2014年1月7日 星期二

[Android] Eclipse NDK porting

Note for my porting steps!
安裝參考這篇很多 -
Reference 2:
http://blog.xuite.net/grimmslaw/78/62743658-Android+NDK+%E5%AE%89%E8%A3%9D


1. 假設 Eclipse 與 ADT 等等都有了, 只是要加裝 NDK 。 那麼只需要加裝 CYGWIN 跟 Android 所提供的 NDK
2. CYGWIN => 我裝在 C:\cygwin64  。安裝時很多選項,devel 裡的 gcc 最為重要, 但基本上我 devel都有安裝。
 PS: 但使用 CYGWIN有點問題就是 Project 的路徑啥麼的都不能有空白。這讓我有很多 project 不能使用

2. 安裝 NDK , 我按照 上面那篇 blog 安裝在 C:\cygwin64\android-ndk-r9, 然後照上篇blog這改成這樣

  • 然後到C:\cygwin\home\"使用者名稱" 目錄下,用windows編輯器編輯.bash_profile :
  • 在最後一行後加入下面四行,然後存檔:
  • PATH=/android-ndk-r9:${PATH}
  • NDK_ROOT=/ android-ndk-r9
  • NDK_Sample=/ android-ndk-r9/samples
  • export PATH NDK_ROOT NDK_Sample
3. 在 Eclipse 上裝 CDT , 這個很順, 也不多說



Reference 2:
(http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/ )

4.照平常一樣開一個 Project, 添加 NDK 在 project 按右鍵 Android tools -> Add Native Support , 這樣就會開一個 Android.mk 跟 一個 cpp 檔。 按照 Reference 2 將 cpp -> c 檔 (使用 Refactor) 。原因就使用 cpp 的寫法跟 c 略有不同。此處先使用 c 。

5. 好的接下來是 eclipse 的環境設置重點 , 歸納有三個地方: 
  5.1. 告知環境 NDK 在哪 (整個 workspace 的設置)
          Window - > Preferences -> Android - > NDK 
          我的是指向C:\cygwin64\android-ndk-r9

  5.2 告知 CYGWIN 在哪  (Project 設置 )
      Project -> Properties -> C/C++ Build -> Environment


  5.3 告知 include file 在哪 
       Project -> Properties-> C/C++ General -> Symbol
       
    


    C:\cygwin64\android-ndk-r9\platforms\android-14\arch-arm\usr\include

6. 接下來要說的點是 Method 的名子
以Hello-jni.c 來說  (在 ndk sample 裡有)
jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,                               jobject thiz )
{
    return (*env)->NewStringUTF(env, "Hello from JNI !");
}


jstring 是 return type 方法名是
Java_com_example_hellojni_HelloJni_stringFromJNI
就是 Java + package名 + 使用這個 method 的 class 名 + 這個 method 的名稱

這要按這這樣命名不然 使用時會找不到方法 


7. build 出來的 Library 放在 libs -> armabi 裡 名子叫 lib + hello-jni + .so => libhello-jni.so 
hello-jni 是這個 library 的名子. 在 load library 時 load 的這個 
 static {
        System.loadLibrary("hello-jni");
  }

8. 在 cygwin bash 中, 轉道 jni 的 folder 打 ndk-build 就可以手動 build library. 如果遇到 說有 multiple target 不讓 build 的, 我的解決方法就是到 放 so 的地方, 把 object 檔殺掉 。 (手動 clean) 雖然網路上有些人說這是因為 cygwin 的路徑問題, 不過我覺得這樣最好解決。




 






 

沒有留言:

張貼留言