從零開始完成一個Android JNI開發
背景
最近的一個專案需要用到Android JNI開發,在這裡記錄了一下如何從零開始完成一個JNI開發。
我們知道,Android系統本身是包括Java層和C層兩部分的,相應的Android開發也分SDK開發和NDK開發兩種,SDK開發是Java程式碼,NDK開發則是C/C++程式碼,他們之間通過JNI介面來互動,Java程式碼可以呼叫外部的原生程式碼, 外部的C/C++ 程式碼可以呼叫Java程式碼。
環境配置
首先在Android Studio中安裝相關開發包,從settings中開啟Android SDK,然後安裝三個包:
接下來可參考超級簡單的Android Studio jni實現進行配置,並編寫hello world
需要注意的是,通過java程式碼生成c程式碼時(在新建的類上右鍵執行javah),有可能會遇到找不到類的錯誤,這時需要跑一遍App,讓它生成這個類檔案
相關檔案及其功能
主要涉及的檔案如下
在java中定義呼叫jni的java類,用來從java中呼叫,並生產jni中的h標頭檔案;
在app工程中的build.gradle,用來配置生成和使用jni;
jni資料夾中的Android.mk,用來配置引用、lib包名、待編譯的c檔案等;
jni資料夾中的Application.mk,用來配置生成的lib包名;
jni資料夾中的h標頭檔案,根據java類生成的;
jni資料夾中的c/cpp/h程式碼檔案,是c層程式碼;
需要注意的是,如果Android.mk中配置的待編譯c檔案改名了,在編譯so庫時會遇到報錯,提示改名前的檔案找不到,這是因為以前生成的so庫在干擾編譯,把原so庫目錄(MyTestApplication\app\src\main\obj)清除即可。
Java層呼叫C層
一般來說,JNI的業務模式大部分是從Java層呼叫C層的so庫
C層呼叫Java層
開發中有時會遇到從C層呼叫Java層的需求,也就是Java層—>C層so庫—>Java層的呼叫鏈,其中Java層呼叫C層so庫的方式同上,基本原理是,C層的JNIEnv型別代表Java環境。通過這個JNIEnv*指標,就可以對Java端的程式碼進行操作。
一段C層呼叫Java層的方法如下:
附錄
Android高階技術大綱,以及系統進階視訊;
附錄一;Android高階技術大綱
附錄二;Android進階系統資料視訊
獲取方式;
加Android進階群;701740775。即可前往免費領取。免費備註一下csdn
相關文章
- 從零開始開發一個 WebpackWeb
- 從零開始為 PicGo 開發一個新圖床PicGo圖床
- 從零開始寫一個ExporterExport
- 從零開始仿寫一個抖音App——開始APP
- 從零開始, 開發一個 Web Office 套件 (3): 滑鼠事件Web套件事件
- 【從零開始擼一個App】PKCEAPP
- 【從零開始擼一個App】KotlinAPPKotlin
- 從零開始實現一個RPC框架(零)RPC框架
- [ 從零開始配置一個 Windows 前端開發環境 ] - 一:WT + WSLWindows前端開發環境
- [ 從零開始配置一個 Windows 前端開發環境 ] - 二:vscodeWindows前端開發環境VSCode
- 從零開始搭建一個 Webpack 開發環境配置(附 Demo)Web開發環境
- Android開發之從零開始學RxJava 2.x(一)認識RxjavaAndroidRxJava
- 從零開始搭建一個 hexo 部落格。Hexo
- 從零開始搭建一個mock服務Mock
- 從零開始搭建一個vue專案Vue
- 從零開始設計一個部落格
- 從零開始寫一個node爬蟲(一)爬蟲
- 從零開始實現一個RPC框架(一)RPC框架
- 如何從零開始整合DTM Android SDKAndroid
- 從零開始學習開發人工智慧(一)人工智慧
- 從零開始開發一個Node互動式命令列應用命令列
- 從零開始,開發一個 Web Office 套件(6):游標 & Click 事件Web套件事件
- 從零開始,開發一個 Web Office 套件(5):Mouse hover over textWeb套件
- 從零開始
- 不怕從零開始,只怕從未開始!
- 從零開始實現一個RPC框架(四)RPC框架
- 從零開始實現一個RPC框架(二)RPC框架
- 從零開始編寫一個babel外掛Babel
- 從零開始實現一個RPC框架(五)RPC框架
- 從零開始寫一個Javascript解析器JavaScript
- 從零開始構建一個webpack專案Web
- 【從零開始擼一個App】Dagger2APP
- 從零開始實現一個RPC框架(三)RPC框架
- 從零開始製作一個linux iso映象Linux
- 資料視覺化初探-從零開始開發一個渲染引擎概述視覺化
- VsCode從零開始配置一個屬於自己的Vue開發環境VSCodeVue開發環境
- 從零開始, 開發一個 Web Office 套件 (2): 富文字編輯器Web套件
- 從零開始, 開發一個 Web Office 套件 (1): 富文字編輯器Web套件