課程介紹
在一些Android應用的開發(fā)中,需要通過JNI和Android NDK工具實現JAVA和C/C++之間的相互調用。
Java?Native Interface (JNI)標準是java平臺的一部分,它允許Java代碼和其他語言寫的代碼進行交互。JNI是本地編程接口,它使得在Java虛擬機(VM)內部運行的Java代碼能夠與用其它編程語言(如C、C++和匯編語言)編寫的應用程序和庫進行交互操作。
由于Android的應用層的類都是以Java寫的,這些Java類編譯為Dex型式的Bytecode之后,必須靠Dalvik虛擬機(VM: Virtual Machine)來執(zhí)行。在執(zhí)行Java類的過程中,如果Java類需要與C組件溝通時,VM就會去載入C組件,然后讓Java的函數順利地調用到C組件的函數。此時,VM扮演著橋梁的角色,讓Java與C組件能通過標準的JNI介面而相互溝通。
在實際應用中這兩者之間的調用關系可以歸納為以下四種方式:
1. 在應用的JAVA代碼中調用NDK中C/C++實現的函數。
2. 在NDK開發(fā)中的C/C++代碼調用應用中JAVA類的靜態(tài)函數。
3. 在NDK開發(fā)中的C/C++代碼調用應用中JAVA類當前傳入NDK中的實例的函數。
4. 在NDK開發(fā)中的C/C++代碼調用應用中JAVA類新建實例的函數。