• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Android-0.Android源碼相關簡介

    Android Studio下查看源碼

    下載源碼

    點擊Settings–>Android SDK–>勾選Show Package Details,這時就可以看到Sources for Android XX,勾選下載即可。

    在這里插入圖片描述
    下載的源碼位于Sdk\sources\android-27下。

    關聯源碼

    找到C:\Users\{USER_NAME}\.AndroidStudio{version}\config\options\jdk.table.xml ,比如我這里是:
    C:\Users\Administrator\.AndroidStudio3.3\config\options\jdk.table.xml, 打開搜索Android API 27 Platform,在<sourcePath>配置路徑:

    <sourcePath>
          <root type="composite">
                <root url="file://$USER_HOME$/AppData/Local/Android/Sdk/sources/android-27" type="simple" />
          </root>
    </sourcePath>
    

    重啟一下Android Studio即可。

    如果在系統函數中跳轉遇到紅色的顯示類,可以嘗試點擊File菜單下面的Invalidate Caches/Restart,選擇Invalidate and Restart即可。

    這種方式下載的源碼,只適用于google這種未修改rom的手機,可以直接下斷點,如果像小米這種深度rom的手機,很多斷點是無效的。

    AOSP源碼

    很多時候,會遇到

    throw new RuntimeException("Stub!");
    

    表示實際運行時的邏輯會由Android ROM里面相同的類代替執行。

    當你需要的源碼在Android SDK Source中找不到的時候,就有必要去AOSP(Android Open Source Project)項目里面找了。
    chrome有個擴展叫:Android SDK Search
    在這里插入圖片描述
    安裝后,到 Android開發者官網 查看API時,這個擴展可以在API類名旁邊顯示一個跳轉鏈接,用于跳轉到AOSP中對應的類的源碼,方便查看源碼。
    在這里插入圖片描述

    另外在瀏覽器輸入框輸入 ad + tab,注意是ad字母后輸入tab鍵,之后輸入要查詢的API, 就會進入Android SDK搜索功能:
    在這里插入圖片描述
    這時,你在AOSP查看代碼時,還可以返回上一級看到同目錄的其他源碼在這里插入圖片描述

    另外還有個網站 http://androidxref.com 可以快速在線查詢,跳轉,非常方便

    Android目錄分類

    AOSP源碼很多,所以 最好分類查看:
    https://developer.android.com/guide/platform?hl=zh-cn 上有平臺構架圖:
    在這里插入圖片描述
    對應AOSP的目錄結構:
    第一層:應用程序層(applications)對應根目錄下platform/packages/apps
    第二層:應用程序框架層(application framework)對應根目錄下的platform/frameworks
    第三層:運行庫層包括運行庫(libraries)和android運行時環境(android runtime)
    運行庫(libraries)對應目錄很多,其中libc庫對應的是platform/bionic
    android運行時環境(android runtime),Core Libraries 對應根目錄下的platform/libcoreDalvik Virtual Machine 對應根目錄下的platform/dalvik ,不過現在已經是ART了,所以目錄是platform/art
    第四層:Linux內核層對應根目錄下的kernel,每一個目錄對應了一個kernel的版本
    三、四層中間還有個硬件抽象層(HAL)對應根目錄下的platform/hardware

    packages 目錄
    |——apps//應用程序庫
    |——|——BasicSmsReceiver//基礎短信接收
    |——|——Bluetooth//藍牙
    |——|——Browser//瀏覽器
    |——|——Calculator//計算器
    |——|——Calendar//日歷
    |——|——Camera//照相機
    |——|——CellBroadcastReceiver//單元廣播接收
    |——|——CertInstaller//被調用的包,在Android中安裝數字簽名
    |——|——Contacts//聯系人
    |——|——DeskClock//桌面時鐘
    |——|——Email//電子郵件
    |——|——Gallery//圖庫
    |——|——Gallery2//圖庫2
    |——|——HTMLViewer//HTML查看器
    |——|——KeyChain//密碼管理
    |——|——Launcher2//啟動器
    |——|——Launcher3//啟動器
    |——|——Music//音樂
    |——|——MusicFX//音頻增強
    |——|——PackageInstaller//包安裝器
    |——|——Phone//電話
    |——|——Protips//主屏幕提示
    |——|——Provision//引導設置
    |——|——QuickSearchBox//快速搜索框
    |——|——Settings//設置
    |——|——SoundRecorder//錄音機
    |——|——SpareParts//系統設置
    |——|——Tag//標簽
    |——|——WallpaperPicker
    |——experimental//非官方的應用程序
    |——|——BugReportSender//Bug的報告程序
    |——|——Bummer
    |——|——CameraPreviewTest//照相機預覽測試程序
    |——|——DreaamTheater
    |——|——ExampleImsFramework
    |——|——LoaderApp
    |——|——NotificationLog
    |——|——NotificationShowcase
    |——|——procstatlog
    |——|——RpcPerformance
    |——|——StrictModeTest
    |——inputmethods//輸入法
    |——|——LatinIME//拉丁文輸入法
    |——|——OpenWnn//OpenWnn輸入法
    |——|——PinyinIME//拼音輸入法
    |——providers//提供器
    |——|——ApplicationsProvider//應用程序提供器,提供應用程序所需的界面
    |——|——CalendarProvider//日歷提供器
    |——|——ContactsProvider//聯系人提供器
    |——|——DownloadProvider//下載管理提供器
    |——|——MediaProvider//媒體提供器
    |——|——TelephonyProvider//彩信提供器
    |——|——UserDictionaryProvider//用戶字典提供器
    |——screensavers//屏幕保護
    |——|——Basic//基本屏幕保護
    |——|——PhotoTable//照片方格
    |——|——WebView//網頁
    |——wallpapers//墻紙
    |——|——Basic//系統內置墻紙
    |——|——Galaxy4//S4內置墻紙
    |——|——HoloSpiral//手槍皮套墻紙
    |——|——LivePicker// 選擇動態壁紙
    |——|——MagicSmoke// 壁紙特殊效果
    |——|——MusicVisualization// 音樂可視化,圖形隨音樂而變化
    |——|——NoiseField
    |——|——PhaseBeam

    frameworks/base目錄
    |——api
    |——cmds //Android中的重要命令(am,app_proce等)
    |——core //核心庫
    |——data //聲音字體等數據文件
    |——docs //文檔
    |——drm //數字版權管理
    |——graphics //圖形圖像
    |——keystore //數字簽名證書相關
    |——libs //庫
    |——location //地理位置
    |——media //多媒體
    |——native //本地庫
    |——nfc-extras //NFC相關
    |——obex //藍牙傳輸
    |——opengl //OpenGL相關
    |——packages //設置,TTS,VPN程序
    |——sax //XML解析器
    |——services //Android服務
    |——telephony //電話相關
    |——test-runner //測試相關
    |——tests //測試相關
    |——tools //工具
    |——wifi //無線網絡

    參考:
    閱讀ANDROID源碼的一些姿勢
    https://github.com/foxleezh/AOSP

    版權聲明:本文為hgy413原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/hgy413/article/details/89489396

    智能推薦

    Android Activity簡介

    1. Activity生命周期 Activity從onCreate()開始,到onDestroy()結束。 首次打開Activity,依次調用onCraete()、onStart()和onResume()。 選擇Home鍵,依次調用onPause()和onStop()。 再次打開Activity,依次調用onRestart()、onStart()和onResume()。 按返回鍵,依次調用onPa...

    Android Fragment簡介

    1. 前言 Fragment是Android3.0后引入的一個新的API,為了適應大屏幕的平板電腦。使用Fragment可以把屏幕劃分成幾塊,然后進行分組,進行一個模塊化的管理。 2.Fragment的生命周期 Fragment相對于Activity多了onAttach()和onDetach(),用于加載和釋放資源。 3. Framgment加載方式 靜態加載 在布局文件中直接加載自定義fragm...

    Android網絡編程簡介

    一、Android網絡編程簡介        我們在平時的開發中,不可避免的會使用到網絡編程方面的知識;在我的理解中,App好比是一個殼,它的作用是將用戶和服務器聯系起來,用戶通過操作App向服務器發送或者接收數據,并且以友好的方式反饋給用戶,而App要和服務器交互數據,就會設計到網絡編程。在Android App的開發中,用到最多的通信方式是基于Http協...

    Android Hook簡介

    Hook:Hook翻譯過來是鉤子的意思,無論是手機還是電腦運行的時候都依賴系統各種各樣的api,當某些api不能滿足我們的要求時,我們就得去需改某些api,使之滿足我們的要求。這樣api hook就自然而然的出現了。我們可以通過api hook,改變一個系統api的原有功能。基本的方法就是通過hook“接觸”到需要修改的api函數入口點,改變它的地址指向新的自定義的函數。當...

    Android Hook 簡介

    1、Hook基本概述 Hook翻譯過來是鉤子的意思,我們都知道無論是手機還是電腦運行的時候都依賴系統各種各樣的API,當某些API不能滿足我們的要求時,我們就得去修改某些api,使之能滿足我們的要求。這樣api hook就自然而然的出現了。我們可以通過api hook,改變一個系統api的原有功能。基本的方法就是通過hook“接觸”到需要修改的api函數入口點,改變它的地址...

    猜你喜歡

    Android WebRTC簡介

    Android WebRTC簡介 WebRTC簡介 WebRTC WebRTC名稱源自網頁實時通信(Web Real-Time Communication)的縮寫,是一個支持網頁瀏覽器進行實時語音對話或視頻對話的技術,是谷歌2010年以6820萬美元收購Global IP Solutions公司而獲得的一項技術。Google于2011年6月3日開源的即時通訊項目,旨在使其成為客戶端視頻通話的標準。...

    Android JNI基礎簡介

    簡介:         JNI的全稱就是Java Native Interface,Java本地接口。     作用:使得Java 與 本地其他類型語言(如C、C++)交互     注意:JNI開發前提是要引入jni.h頭文件,這個文件Android...

    Android ANR簡介

    1、ANR是什么 Application Not Responding即應用無響應。 當操作在一段時間內,系統無法處理是,就會發生ANR。彈出對應的無響應的對話框。 2、ANR的類型 發生ANR的主要是三種類型: A)KeyDispatchTimeout 這個Key事件分發超時的時間,Android默認是5秒,主要是定義在ActivityManagerService.java B)Broadcas...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    精品国产乱码久久久久久蜜桃不卡