1. 程式人生 > 其它 >android元件化架構,五步搞定Android開發環境部署,程式設計師翻身之路

android元件化架構,五步搞定Android開發環境部署,程式設計師翻身之路

概述

想了很久怎麼樣可以讓文章的標題不那麼悲觀,但是各種文案都在我腦海裡面不斷的被否定,要麼是不那麼抓眼球,要麼是立意不匹配。最後想了想,這個標題是真的符合我最近的感悟。

希望看過文章,能有同感的朋友也能多思考一下。

最近因為疫情的關係,相信很多國內的小夥伴都逐漸開始瞭解到在家上班的體驗。在美國基本上work from home在IT公司裡面算是比較常見的現象了。一般大廠每個周都會有一天被劃為No Meeting Day,說只是不開會日,但通常都會被大家當成在家辦公日。不開會嘛,那我在家和在辦公室也沒區別不是。

也正是因為閒的時間多了,看文章的時間也多了。我是個不喜歡看書,更傾向於看碎片化文章的人,沒事翻翻掘金,翻翻Android Weekly,是我上廁所蹲坑時候的首選項。

但是讓我感到悲傷的是,好多安卓技術博主,就在這麼一個月兩個月之間消失了。點選他們的個人主頁,你會發現上次更新可能都是好幾個月,甚至是一年前的事情了。粗糙的以為是因為疫情,其實想一下,這個事情符合技術這行的發展規律。

JNI 簡介

JNI (Java Native Interface英文縮寫),譯為Java本地介面。是Java眾多開發技術中的一門技術,意在利用原生代碼,為Java程式提供更高效、更靈活的拓展。儘管Java一貫以其良好的跨平臺性而著稱,但真正的跨平臺非C/C++莫屬,因為當前世上90%的系統都是基於C/C++編寫的。同時,Java的跨平臺是以犧牲效率換來對多種平臺的相容性,因而JNI就是這種跨平臺的主流實現方式之一。

總之,JNI是一門技術,是Java 與C/C++ 溝通的一門技術。首先,來回顧下Android的系統架構圖。

我們來簡單介紹下每一層的作用。

Linux層

Linux 核心

由於Android 系統是基礎Linux 核心構建的,所以Linux是Android系統的基礎。事實上,Android 的硬體驅動、程序管理、記憶體管理、網路管理都是在這一層。

硬體抽象層

硬體抽象層(Hardware Abstraction Layer縮寫),硬體抽象層主要為上層提供標準顯示介面,並向更高級別的 Java API 框架提供顯示裝置硬體功能。HAL 包含多個庫模組,其中每個模組都為特定型別的硬體元件實現一個介面,例如相機或藍芽模組。當框架 API 要求訪問裝置硬體時,Android 系統將為該硬體元件載入對應的庫模組。

系統執行庫和執行環境層

Android Runtime

Android 5.0(API 21)之前,使用的是Dalvik虛擬機器,之後被ART所取代。ART是Android作業系統的執行環境,通過執行虛擬機器來執行dex檔案。其中,dex檔案是專為安卓設計的的位元組碼格式,Android打包和執行的就是dex檔案,而Android toolchain(一種編譯工具)可以將Java程式碼編譯為dex位元組碼格式,轉化過程如下圖。

如上所示,Jack就是一種編譯工具鏈,可以將Java 原始碼編譯為 DEX 位元組碼,使其可在 Android 平臺上執行。

原生C/C++ 庫

很多核心 Android 系統元件和服務都是使用C 和 C++ 編寫的,為了方便開發者呼叫這些原生庫功能,Android的Framework提供了呼叫相應的API。例如,您可以通過 Android 框架的 Java OpenGL API 訪問 OpenGL ES,以支援在應用中繪製和操作 2D 和 3D 圖形。

應用程式框架層

Android平臺最常用的元件和服務都在這一層,是每個Android開發者必須熟悉和掌握的一層,是應用開發的基礎。

Application層

Android系統App,如電子郵件、簡訊、日曆、網際網路瀏覽和聯絡人等系統應用。我們可以像呼叫Java API Framework層一樣直接呼叫系統的App。

最後

這裡我特地整理了一份《Android開發核心知識點筆記》,裡面就包含了自定義View相關的內容

如果你有需要的話,可以私信我【進階】發給你

除了這份筆記,還給大家分享?Android學習PDF+架構視訊+面試文件+原始碼筆記,高階架構技術進階腦圖、Android開發面試專題資料,高階進階架構資料這幾塊的內容。非常適合近期有面試和想在技術道路上繼續精進的朋友。

如果你有需要的話,可以點選我的Gitee 免費獲取!

分享上面這些資源,希望可以幫助到大家提升進階,如果你覺得還算有用的話,不妨把它們推薦給你的朋友~

喜歡本文的話,給我點個小贊、評論區留言或者轉發支援一下唄~