導航:首頁 > 操作系統 > android源碼清華

android源碼清華

發布時間:2023-05-05 13:06:51

『壹』 求android源碼下載地址,就像學學源碼的原理

Google剛剛公布,穩定版的Android源代碼已經公布,任何人都可以免費下載。Google希望通過公布源代碼,電信運營商和手機製造商,乃至一般開發者們進一步深刻了解和利用Android系統,從而有益於該平台下的的發展。
看來T-Mobile G1不一定打得過iPhone,那麼Android呢?
現在源代碼公布在http://source.android.com/,SDK網站是http://code.google.com/android/

『貳』 大牛們是怎麼閱讀 Android 系統源碼的

由於工作需要大量修改framework代碼, 在AOSP(Android Open Source Project)源碼上花費了不少功夫, Application端和Services端都看和改了不少.
如果只是想看看一些常用類的實現, 在Android包管理器里把源碼下載下來, 隨便一個IDE配好Source Code的path看就行.
但如果想深入的了解Android系統, 那麼可以看下我的一些簡單的總結.

知識
java
Java是AOSP的主要語言之一. 沒得說, 必需熟練掌握.
熟練的Android App開發
linux
Android基於Linux的, 並且AOSP的推薦編譯環境是Ubuntu 12.04. 所以熟練的使用並了解Linux這個系統是必不可少的. 如果你想了解偏底層的代碼, 那麼必需了解基本的Linux環境下的程序開發. 如果再深入到驅動層, 那麼Kernel相關的知識也要具備.
Make
AOSP使用Make系統進行編譯. 了解基本的Makefile編寫會讓你更清晰了解AOSP這個龐大的項目是如何構建起來的.
Git
AOSP使用git+repo進行源碼管理. 這應該是程序員必備技能吧.
C++
Android系統的一些性能敏感模塊及第三方庫是用C++實現的, 比如: Input系統, Chromium項目(WebView的底層實現).

硬體
流暢的國際網路
AOSP代碼下載需要你擁有一個流暢的國際網路. 如果在下載代碼這一步就失去耐心的話, 那你肯定沒有耐心去看那亂糟糟的AOSP代碼. 另外, 好程序員應該都會需要一個流暢的Google.
一台運行Ubuntu 12.04的PC.
如果只是閱讀源碼而不做太多修改的話, 其實不需要太高的配置.
一台Nexus設備
AOSP項目默認只支持Nexus系列設備. 沒有也沒關系, 你依然可以讀代碼. 但如果你想在大牛之路走的更遠, 還是改改代碼, 然後刷機調試看看吧.
高品質USB線
要刷機時線壞了, 沒有更窩心的事兒了.
軟體
Ubuntu 12.04
官方推薦, 沒得選.
Oracle Java 1.6
注意不要用OpenJDK. 這是個坑, 官方文檔雖然有寫, 但還是單獨提一下.
安裝:
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java6-installer
sudo apt-get install oracle-java6-set-default

Eclipse
估計會有不少人吐槽, 為什麼要用這個老古董. 其實原因很簡單, 合適. 剛開始搞AOSP時, 為了找到效率最優的工具, 我嘗試過Eclipse, IntelliJ IDEA, Vim+Ctags, Sublime Text+Ctags. 最終結果還是Eclipse. 主要優點有:
有語法分析 (快速准確的類, 方法跳轉).
支持C++ (IntelliJ的C++支持做的太慢了).
嵌入了DDMS, View Hierarchy等調試工具.
為了提高效率, 花5分鍾背下常用快捷鍵非常非常值得.
調整好你的classpath, 不要導入無用的代碼. 因為AOSP項目代碼實在是太多了. 當你還不需要看C++代碼時, 不要為項目添加C++支持, 建索引過程會讓你崩潰.
Intellij IDEA
開發App必備. 當你要調試系統的某個功能是, 常常需要迅速寫出一個調試用App, 這個時候老舊的Eclipse就不好用了. Itellij IDEA的xml自動補全非常給力.
巨人的肩膀

這個一定要先讀. 項目介紹, 代碼下載, 環境搭建, 刷機方法, Eclipse配置都在這里. 這是一切的基礎.

這個其實是給App開發者看的. 但是裡面也有不少關於系統機制的介紹, 值得細讀.

此老羅非彼老羅. 羅升陽老師的博客非常有營養, 基本可以作為指引你開始閱讀AOSP源碼的教程. 你可以按照博客的時間順序一篇篇挑需要的看.但這個系列的博客有些問題:
早期的博客是基於舊版本的Android;
大量的代碼流程追蹤. 讀文章時你一定要清楚你在看的東西在整個系統處於什麼樣的位置.

鄧凡平老師也是為Android大牛, 博客同樣很有營養. 但是不像羅升陽老師的那麼系統. 更多的是一些技術點的深入探討.

Android官方Issue列表. 我在開發過程中發現過一些奇怪的bug, 最後發現這里基本都有記錄. 當然你可以提一些新的, 有沒有人改就是另外一回事了.

一定要能流暢的使用這個工具. 大量的相關知識是沒有人系統的總結的, 你需要自己搞定.
其它
代碼組織
AOSP的編譯單元不是和git項目一一對應的, 而是和Android.mk文件一一對應的. 善用mmm命令進行模塊編譯將節省你大量的時間.
Binder
這是Android最基礎的進程間通訊. 在Application和System services之間大量使用. 你不僅要知道AIDL如何使用, 也要知道如何手寫Binder介面. 這對你理解Android的Application和System services如何交互有非常重要的作用. Binder如何實現的倒不必著急看.
HAL
除非你對硬體特別感興趣或者想去方案公司上班, 否則別花太多時間在這一層.
CyanogenMod
這是一個基於AOSP的第三方Rom. 從這個項目的wiki里你能學到很多AOSP官方沒有告訴你的東西. 比如如何支持Nexus以外的設備.
DIA
這是一個Linux下畫UML的工具, 能夠幫你梳理看過的代碼.
XDA

這里有最新資訊和最有趣的論壇.
想到了再補充.

『叄』 現在到哪獲取android系統源代碼

Android系統源碼都在http://android.git.kernel.org/網址下,其中那個系統app都在platform/packages/apps結構下。
在剛才的Git的shell命名行窗口中輸入下面的命名:
git clone git://android.git.kernel.org/platform/packages/apps/Luancher2.git
你就可以在你的msysGit安裝目錄的git下(~\msysgit\msysgit\git)看到Luancher工程文件夾了。

然後打開~\msysgit\msysgit\git\Luancher2文件夾,就可以看到Android的Luancher系統源碼工程了。

對於其他的app系統源碼的獲取方法和上述的Luancher相同,只是命名行後的參數不同。
git clone git://android.git.kernel.org/需下載源碼的app所在的位置。

『肆』 自己可以編譯安卓源碼嗎

用最新的Ubuntu 16.04,請首先確保自己已經安裝了Git.沒安裝的同學可以通過以下命令進行安裝:

sudo apt-get install git git config –global user.email 「[email protected]」 git config –global user.name 「test」

其中[email protected]為你自己的郵箱.

簡要說明

android源碼編譯的四個流程:1.源碼下載;2.構建編譯環境;3.編譯源碼;4運行.下文也將按照該流程講述.

源碼下載

由於某牆的原因,這里我們採用國內的鏡像源進行下載.
目前,可用的鏡像源一般是科大和清華的,具體使用差不多,這里我選擇清華大學鏡像進行說明.(參考:科大源,清華源)

repo工具下載及安裝

通過執行以下命令實現repo工具的下載和安裝

mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo

補充說明
這里,我來簡單的介紹下repo工具,我們知道AOSP項目由不同的子項目組成,為了方便進行管理,Google採用Git對AOSP項目進行多倉庫管理.在聊repo工具之前,我先帶你來聊聊多倉庫項目:

我們有個非常龐大的項目Pre,該項目由很多個子項目R1,R2,...Rn等組成,為了方便管理和協同開發,我們為每個子項目創立自己的倉庫,整個項目的結構如下:


這里寫圖片描述

執行完該命令後,再使用make命令繼續編譯.某些情況下,當你執行jack-admin kill-server時可能提示你命令不存在,此時去你去out/host/linux-x86/bin/目錄下會發現不存在jack-admin文件.如果我是你,我就會重新repo sync下,然後從頭來過.

錯誤三:使用emulator時,虛擬機停在黑屏界面,點擊無任何響應.此時,可能是kerner內核問題,解決方法如下:
執行如下命令:

  • ./out/host/linux-x86/bin/emulator -partition-size 1024 -kernel ./prebuilts/qemu-kernel/arm/kernel-qemu-armv7

  • 通過使用kernel-qemu-armv7內核 解決模擬器等待黑屏問題.而-partition-size 1024 則是解決警告: system partion siez adjusted to match image file (163 MB >66 MB)

    如果你一開始編譯的版本是aosp_arm-eng,使用上述命令仍然不能解決等待黑屏問題時,不妨編譯aosp_arm64-eng試試.

    結束吧

    到現在為止,你已經了解了整個android編譯的流程.除此之外,我也簡單的說明android源碼的多倉庫管理機制.下面,不妨自己動手嘗試一下.

    『伍』 androidstudio導入系統源碼,附可導入源碼工程-Android API31

    清華大學鏡像站

    可能遇上編譯時jdk版本問題,需要多個jdk切換

    進入根目錄

    用android studio直接打開android.ipr就可以了

    已編譯源碼工程分享

    『陸』 ARM晶元單片機(如SoC的RK3399),如何虛擬安卓系統雲手機

    也許是答非所問。假設你問的是往rk3399主板上安裝android。這需要android源碼編譯運行,國內清華的源(不能直接訪問谷歌),yonglinux系統去make,make後的代碼用adc或其他方式發送(燒寫進去)到主板上,主板就能安卓了。編譯其cpu或其他驅動是最麻煩的了,關於你問的如果不是這個意思,而是打算在android上再虛擬一個Android,可以找一下雙開系統的相關資料(github或其他源碼網址去找一下。小米我記得開源了,但不清楚開源到哪種程度,有可能的話可以借鑒一下源代碼)。

    『柒』 如何編譯lineage不支持的機型

    首先整理相應的機型MK文件

    device文畢友件,android_device_$your-device-name
    kernel文件,android_kernel_$your-device-name
    vendor文件,android_vendor_$your-device-name

    收集或者製作或者修改,完成,你的機型文件後


    同步下載lineage的源碼:

    清華鏡像源,打開看教程(同步出錯有問題就手猜槐網路,一般都有答案,系統最好在Linux和他的各種分支中選擇>經常用Windows-覺得Mac很反人類-不過開發商好像很喜歡-可能是蘋果給出的條件太好-沒人能拒絕我覺得Ubuntu不錯,也很喜歡Deepin-適合新手-國內維護挺不錯的



    然後整理MK文件:

    也可以點這里,去官網找一下相關機型或品牌文件作為參考

    比如我的手機是ZUK EDGE

    ##ZUKEDGE
    #我的機型代號-z2x,這個是開發用的代號;
    #我的內部機型-z2151,這個是從官方下載開源部分需要的型號;
    #ZUK特殊部分其他機型不一定會有一般就是三個:device、kernel、vendor(非必有)
    #<類型name="倉庫名"path="文件路徑"/>
    <android
    name="lineage"
    path="~/bin/lineage"/>
    <device
    name="android_device_zuk_z2"
    path="$android/device/zuk/z2x"/>
    <device
    name="android_device_zuk_msm8996-common"
    path="$android/device/zuk/msm8996-common"/>#ZUK特殊部分
    <kernel
    name="android_kernel_zuk_msm8996"
    path="$android/kernel/zuk/msm8996"/>#這個命名比較特別,打包開發的

    <!--附加部分,vendor一般有生成腳本或者需要額外編寫-->
    <vendor
    name="android_vendor_z2x"
    path="$android/vendor/zuk/z2x"/>
    <vendor
    name="android_vendor_msm8996-common"
    path="$android/vendor/zuk/msm8996-common"/>#ZUK特殊部分

    #end


    ######錯誤部分,可以查閱,幫助理解,最好跳過,跳過

    把上面的文件解包放置到相應文件夾下

    device文件,android_device_$your-device-name
    kernel文件,android_kernel_$your-device-name
    vendor文件,android_vendor_$your-device-name

    "_"對應是一個文件夾分層,比如device就是在「android源碼「文件夾下(看你怎麼起名字,就是清華網站中提示你的「WORKING_DIRECTORY」文件夾,可以是『android』、『lineage』等等)的device文件夾下,你的機子品牌文件夾下,你的機型里(比如我的手機是ZUK EDGE-我是窮逼,沒錢換機,我的相應機型代號就是z2x-根據代號搞開發,內部機型z2151-根據內部型號找官方開源代碼,以下示例)

    示例:

    device:android_device_zuk_z2x
    倉庫文件就在:~/bin/lineageOS/device/zuk/z2x
    kernel:android_kernel_zuk_msm8996#為什麼這個忽然變成msm8996了呢,哈哈|
    倉庫文件就在:~/bin/lineageOS/kernel/zuk/msm8996#因為機型特別
    vendor:android_vendor_zuk_z2x#一般是不提供這個倉庫部分的,
    #會有比如「extract-files.sh」等腳本
    #需要連接你的手機,生成這些文件

    以上引號部分是由網路自動保存編寫錯誤部兆弊分

    最後是編譯:

    sourcebuild/envsetup.sh
    lunchlineage_z2x-userdebug#這條命令去查看機型文件夾下的lineage_*.mk文件,把z2x換成你的
    cddevice/zuk/z2x#這條應該是你的機型文件夾,和下一條命令看情況找找你的vendor擴展腳本
    ./extract-files.sh#這個看情況,找找你的腳本
    croot#返回lineage根目錄
    make-j8#開始編譯ROM,後面的-j*是線程,看你的CPU而定
    #看輸出log,編譯完成ROM在out文件夾下

    這樣就完成了:
    看似簡單,實則簡單,但是肯定會出錯,因為你是在學習,好好學,好好問問,學會用網路,別跟個愣頭B一樣,張嘴就是:我是小白,這個怎麼弄,我不會啊,你教教我唄,這個什麼意思;崽種不會自己學

    # 好了,結束,加油

    『捌』 怎樣查看 Android APP 源代碼

    壓縮軟體打開apk文件,解壓出根目錄中的classes.dex文件

    使用cmd ,dex2jar.bat classes.dex命令將classes.dex轉換為jar

    再用jd-gui打開該jar就可以查看源碼了,如果apk安全性好的話,有些代碼是看不到的

    『玖』 為什麼在清華鏡像下載的frameworks/base的Android源碼中找不到AMS、WMS這些類

    Android是一種基於Linux的自由及開放源代碼的操作系統,主要使用於移動設備,如智能手機和平板電腦,由Google公司和開放手機聯盟領導及開發。Android操作系統最初由Andy Rubin開發,主要支持手機。

    閱讀全文

    與android源碼清華相關的資料

    熱點內容
    解壓最近的壓力 瀏覽:709
    如何知道王牌戰爭新出來的伺服器 瀏覽:591
    程序員建的房子 瀏覽:419
    navicatlinux破解版 瀏覽:454
    找個輔警或者程序員 瀏覽:452
    軍團td預言命令 瀏覽:114
    營指揮員下達作戰命令 瀏覽:258
    exe打開指定文件夾 瀏覽:264
    pdf裡面怎麼去水印 瀏覽:845
    appleid賬號加密碼 瀏覽:220
    蘋果如何下載微倉app 瀏覽:916
    迅雷解壓進度為0 瀏覽:860
    解壓解惑近義詞 瀏覽:316
    壓縮比不一樣燃燒室不一樣 瀏覽:102
    androidbutton左對齊 瀏覽:173
    怎麼找到學校的伺服器 瀏覽:369
    android狀態欄高度是多少 瀏覽:989
    linuxcliphp 瀏覽:516
    蘿卜源碼如何關閉用戶注冊驗證 瀏覽:756
    蘋果手機頭條app怎麼沒有tv 瀏覽:564