2014年7月25日 星期五

關於Java,JNI與NativeActivity之間的恩怨情仇…

很多Native派的Android的開發者,應該對NativeActivity不陌生,但目前Android並未將所有的Service(比方Location,IAP…等)都開C++存取的介面。如果使用Java Base來開發,ServiceView都要自己處理,除了Java Thread迴圈要自己建立之外,還要開很多JNI delegate函式才能達到跟C++溝通的目標,用NativeActivity可以解決上述的問題(一行Java Code都不用),難道沒有兩全其美的做法嗎?

其實有,就是直接繼承NativeActivity,然後再做自己的JNI(也就是NativeActivity與JNI混用),以Tegra Nsight專案為例,用Android Application with Native Code模板來建立專案,之後將android_native_app_glue的c及.h檔(用Android Native Application模板來建立專案,就會自動copy到專案Folder之下)copy過來編譯即可。

之後在建製專案時,會發生link不過的問題,這時參考Android Native Application的專案設定,在Linker頁面裡的Input裡的Android System Libraries欄位,加入android;EGL;GLESv1_CM即可。

接下來即可在自己的Activity(extends NativeActivity)來處理有關JNI的部份…

Dream continues in...

沒有留言:

張貼留言