1. Native application
本地應用程序是指可以直接運行在操作系統上,並且處理器直接執行機器碼的程序。
比如windows上的各種*.exe的程序,而linux上的是各種bin程序。
在Android上,OS是linux,因此各種bin程序就是所謂natvie application了,比如/system/bin目錄下的所有文件。
這些應用程序都是由GCC(c/c++)編譯生成。
在Android軟件架構裏,這些應用程序組成了native layer:
2. Native Exception
native layer裏的應用程序崩潰統稱爲Native Exception,比如空指針,非法指針,程序跑飛,內存踩壞等,好比像windows下,程序崩潰彈出某某地址不能爲read/write。
3. 總流程圖
原始的linux,對於用戶進程崩潰之後,處理方式有2種:直接終止進程;輸出coredump再終止進程。
而在Android,爲了方便調試,在收到崩潰信號後,會先輸出tombstone,然後在根據設置是否抓取coredump,最後再終止進程。而我司在這之上還會將coredump及其他關鍵信息打包。
以下是完整的NE處理流程圖:
4. 例子
我們以1個NE的例子來將流程走一遍。
首先寫test.c:
然後編寫Android.mk:
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:=test.c
LOCAL_MODULE:=test
include $(BUILD_EXECUTABLE)
編譯後將test推送到手機端,然後執行它,其中走過的函數步驟如下:
當走到d()函數(也就是第6步之後)時必然產生1個NE。