當前位置:首頁 » 操作系統 » android源碼分支

android源碼分支

發布時間: 2022-11-24 23:47:10

『壹』 如何編輯android 系統源碼

1、通過 ubuntu 軟體中心安裝 wine;
2、通過 ubuntu 軟體中心安裝 winetricks;
3、通過 winetricks 在 shell中輸入: winetricks mfc42

1、通過 wine windows 的方式啟動代理伺服器
2、設置瀏覽器代理伺服器
3、設置shell代理伺服器:
在shell中輸入 sudo gedit /etc/bash.bashrc
在文件 /etc/bash.bashrc 中添加

通過shell安裝如下的組件:
1、sudo apt-get install bison g++-multilib git gperf libxml2-utils
2、新建一個存放源碼的目錄,如:mkdir ~/andorid/source
3、在源碼目錄中輸入命令:repo init -u -b android-4.0.1_r1
其中: android-4.0.1_r1是android源碼的版本,更多的版本可以通過下面的方式查詢:

4、修改source/.repo/manifest/default.xml 文件中的 fetch 的值為:
git://Android.git.linaro.org/

通過如下的指令來設置郵箱和用戶名
git config --global user.name "<your name>" ----修改用戶名git config --global user.email "<your email>" ----修改email
5、在source目錄下輸入指令:repo sync
便開始了代碼的下載
方便他人亦是方便自己,如果覺得還行就點下下邊的投票吧,這樣可以幫助其他人更快的找到解決問題的方法;有疑問的也可留言哦, 謝謝!

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

如果只是想看看一些常用類的實現, 在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源碼中已經包括了內核為什麼還要goldfish

我也苦惱了幾天,不過剛弄到。步驟是這樣的:先進入git下面的common目錄,輸入命令:git branch -a會列出所有的分支:* android-2.6.36 remotes/origin/HEAD -> origin/android-2.6.36 remotes/origin/android-2.6.35 remotes/origin/android-2.6.36 remotes/origin/archive/android-2.6.25 remotes/origin/archive/android-2.6.27 remotes/origin/archive/android-2.6.29 remotes/origin/archive/android-2.6.32 remotes/origin/archive/android-gldfish-2.6.29 remotes/origin/archive/android-goldfish-2.6.27如上。然後再執行git checkout origin/archive/android-goldfish-2.6.27 -b goldfish命令,一會就可以了。這樣就有golfish的部分代碼了。 查看原帖>>

『肆』 小說Android源碼解析篇 第二期——七月的尾巴

5月似水的季節,雨不知疲倦的下,下濕了多座城市,卻淋濕不了我與小夥伴的基情,我們在github上發布了 Android SDK 源碼解析 的第一期,這期有10幾個小夥伴參與了分析、校對文章的工作!你也可以看到,目前 AndroidSdkSourceAnalysis 這個倉庫已經有 1900+ Star, 400+ fork,至少數據說明,還是有很多人關注的。

6月的雨下的很安靜,有點夏天的味道,而我需要尋找一個短暫居住的窩。和一個好友找了兩個周末,終於找到了小區二房一廳便宜出租的,我們從天河棠下搬到了員村二橫路,我以為,短暫安穩,卻沒想到短暫的有點短,好友因為有點事要離開廣州發展!我又無可奈何搬家了。又找了兩個周末,我從員村搬到了學院。這個月,也就這樣顛簸結束了!

很多朋友問我二期什麼時候出,我說:7月。我喜歡7月,滿滿都是西瓜的味道!而我,也為面試做著准備,並沒有心情去搞源碼解析。究其根本,是我懶惰了,我不想活的太累。因為這事對我來說,可有可無!我也只是一時興起,但既然回應了人家,做了承諾,就有責任去完成它。所以,在7月的尾巴,我們還是出了二期。真的非常感謝 「C」君 CaMnter 這些小夥伴,能陪我一起弄這個。

文章我們整理好了,文章好壞需要讀者自己去判斷,我們水平有限,只能這樣了!

最後,感謝下二期辛勤的小夥伴們(名字都是Github ID):
android-cjj(無恥的我),CaMnter,Nukc,lber19535,hongyangAndroid,asLody,liaohuqiu,Skykai521,maoruibin,xmuSistone,YZHIWEN,ASPOOK,czhzero,Wuxiaolong,wbersaty,peerless2012,yanbober......

『伍』 android系統源碼有多少行

大概有10G的源代碼,一Byte一個字元,也就是說有超過100億個字元,每行按標准80字元來算的話,超過1億行。開放的WinXP系統有2億行,從數量級上來看的話,應該差不多。Android 4.4,是由Google公司製作和研發的代號為KitKat的手機操作系統,於北京時間2013年9月4日凌晨對外公布了該Android新版本的名稱,為Android 4.4(代號 KitKat 奇巧)。據悉,該代號來自雀巢的KitKat巧克力。"Kit Kat"原本是雀巢公司的一款巧克力名稱。谷歌表示,他們非常感謝雀巢授權使用該名稱,但使用的時候會將中間的空格去掉。Android 4.4 KitKat針對RAM佔用進行了優化,甚至可以在一些僅有512MB RAM的老款手機上流暢運行。它也進一步優化了系統在低配硬體上的運行效果, 支持內核同頁合並 KSM,zRAM 交換,似乎是為了更好地在眾多智能穿戴設備上運行。
是指sdk的源碼,還是android操作系統的源碼,不過都有10G左右,另外sdk的源碼是用git管理的,一次下載後,用git check就可以切換到各個版本。Android SDK是用於開發Android上JAVA應用程序的,另外發布Android NDK,可以添加一些C語言寫的鏈接庫,至於Linux代碼,可以在Android源代碼中找到(SDK程序中只有編譯好的測試映像)。應用程序開發用不到Linux代碼(搞嵌入式開發才會用到,而SDK不負責底層開發)。

『陸』 如何使用Android Studio開發/調試Android源碼

本文是以源碼中development/tools/idegen/README作為指導文檔.

環境: Ubuntu 14.10,openJdk 1.7,Android Studio 1.0.2,android-5.0.1_r1源碼

由於AS是基於IntelliJ IDEA開發的,所以本文也適用於IntelliJ IDEA

一、修改Android Studio(以下簡稱AS)的內存配置

因為在導入源碼時需要消耗大量內存,所以先修改IDEA_HOME/bin/studio64.vmoptions(x86的機器修改studio.vmoptions)中-Xms和-Xmx的值。文檔中使用的是748m,可自行修改。

二、配置AS的JDK、SDK

在IDE中添加一個沒有classpath的JDK,這樣可以確保使用源碼里的庫文件

在彈出的選擇進程(Choose Process)對話框中,勾選顯示所有進程,選擇要DEBUG的代碼所在的進程,點擊OK即可.

六、其它

代碼中很多地方提示CallrequiresAPILevelx.... 出現這個問題是因為AS將我們的工程當做安卓應用程序工程了,且源碼中沒有指定minSdkVersion.

我們只需在源碼根目錄加一個聲明minSdkVersion的AndroidManifest.xml文件即可(分享了一個AndroidManifest.xml)。

也可以考慮使用build.gradle來解決該問題。

『柒』 android源碼里有哪些比較好的演算法或框架推薦

Android中對於圖形界面以及多媒體的相關操作比較容易實現。而且對於大多數
手機
用戶來說,他們主要也就是根據這些方面的功能來對系統那個進行修改。我們可以通過本文介紹的Android多媒體框架的源碼解讀,來具體分析一下這方面的基本知識。
Android多媒體框架的代碼在以下目錄中:external/opencore/。這個目錄是Android多媒體框架的根目錄,其中包含的子目錄如下所示:
* android:這裡面是一個上層的庫,它基於PVPlayer和PVAuthor的SDK實現了一個為Android使用的Player和Author。
* baselibs:包含數據結構和線程安全等內容的底層庫
* codecs_v2:這是一個內容較多的庫,主要包含編解碼的實現,以及一個OpenMAX的實現
* engines:包含PVPlayer和PVAuthor引擎的實現
* extern_libs_v2:包含了khronos的OpenMAX的頭文件
* fileformats:文件格式的據具體解析(parser)類
* nodes:編解碼和文件解析的各個node類。
* oscl:操作系統兼容庫
* pvmi: 輸入輸出控制的抽象介面
* protocols:主要是與網路相關的RTSP、RTP、HTTP等協議的相關內容
* pvcommon:pvcommon庫文件的Android.mk文件,沒有源文件。
* pvplayer:pvplayer庫文件的Android.mk文件,沒有源文件。
* pvauthor:pvauthor庫文件的Android.mk文件,沒有源文件。
* tools_v2:編譯工具以及一些可注冊的模塊。
Splitter的定義與初始化
以wav的splitter為例,在fileformats目錄下有解析wav文件格式的pvwavfileparser.cpp文件,在nodes目錄下有pvmf_wavffparser_factory.cpp,pvmf_wavffparser_node.h, pvmf_wavffparser_port.h等文件。
我們由底往上看,vwavfileparser.cpp中的PV_Wav_Parser類有InitWavParser(),GetPCMData(),RetrieveFileInfo()等解析wav格式的成員函數,此類應該就是最終的解析類。我們搜索PV_Wav_Parser類被用到的地方可知,在PVMFWAVFFParserNode類中有PV_Wav_Parser的一個指針成員變數。
再搜索可知,PVMFWAVFFParserNode類是通過PVMFWAVFFParserNodeFactory的CreatePVMFWAVFFParserNode()成員函數生成的。而CreatePVMFWAVFFParserNode()函數是在PVPlayerNodeRegistry::PVPlayerNodeRegistry()類構造函數中通過PVPlayerNodeInfo類被注冊到Oscl_Vector<PVPlayerNodeInfo, OsclMemAllocator> 的vector中,在這個構造函數中,AMR,mp3等node也是同樣被注冊的。
由上可知,Android多媒體框架中對splitter的管理也是與ffmpeg等類似,都是在框架的初始化時注冊的,只不過Opencore注冊的是每個splitter的factory函數。
綜述一下splitter的定義與初始化過程:
每個splitter都在fileformats目錄下有個對應的子目錄,其下有各自的解析類。
每個splitter都在nodes目錄下有關對應的子目錄,其下有各自的統一介面的node類和node factory類。
播放引擎PVPlayerEngine類中有PVPlayerNodeRegistry iPlayerNodeRegistry成員變數。
在PVPlayerNodeRegistry的構造函數中,將 AMR, AAC, MP3等splitter的輸入與輸出類型標示和node factory類中的create node與release delete介面通過PVPlayerNodeInfo類push到Oscl_Vector<PVPlayerNodeInfo, OsclMemAllocator> iType成員變數中。
當前Splitter的匹配過程
PVMFStatus PVPlayerNodeRegistry::QueryRegistry(PVMFFormatType& aInputType, PVMFFormatType& aOutputType, Oscl_Vector<PVUuid, OsclMemAllocator>& aUuids)函數的功能是根據輸入類型和輸出類型,在已注冊的node vector中尋找是否有匹配的node,有的話傳回其唯一識別標識PVUuid。
從QueryRegistry這個函數至底向上搜索可得到,在android中splitter的匹配過程如下:
android_media_MediaPlayer.cpp之中定義了一個JNINativeMethod(JAVA本地調用方法)類型的數組gMethods,供java代碼中調用MultiPlayer類的setDataSource成員函數時找到對應的c++函數
1.{"setDataSource", "(Ljava/lang/String;)V", (void *)
android_media_MediaPlayer_setDataSource},
2.static void android_media_MediaPlayer_setDataSource
(JNIEnv *env, jobject thiz, jstring path)
此函數中先得到當前的MediaPlayer實例,然後調用其setDataSource函數,傳入路徑
3.status_t MediaPlayer::setDataSource(const char *url)
此函數通過調getMediaPlayerService()先得到當前的MediaPlayerService, const sp<IMediaPlayerService>& service(getMediaPlayerService());
然後新建一個IMediaPlayer變數, sp<IMediaPlayer> player(service->create(getpid(), this, fd, offset, length));
在sp<IMediaPlayer> MediaPlayerService::create(pid_t pid, const sp<IMediaPlayerClient>& client, const char* url)中
調status_t MediaPlayerService::Client::setDataSource(const char *url)函數,Client是MediaPlayerService的一個內部類。
在MediaPlayerService::Client::setDataSource中,調sp<MediaPlayerBase> MediaPlayerService::Client::createPlayer(player_type playerType)
生成一個繼承自MediaPlayerBase的PVPlayer實例。

『捌』 在win7下怎麼下載android源代碼

1、下載msysgit,安裝。

2、運行 X:msysgitmsysgitmsys.bat; < X 代表你安裝的盤符,如 C、D等>

3、輸入命令,參考附圖:

cd X: < X 代表你想要安裝的盤符,建議除 C 盤之外的盤符>

git clone https://android.googlesource.com/platform/manifest.git

5、選擇自己想要的版本源碼,如 android-2.2_r1,敲命令

git checkout android-2.2_r1

*** 執行以上操作,manifest 目錄下會生成一個名為 default.xml 的 XML 文件,其中記錄的就是android2.2系統各個模塊的路徑 ***

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

用最新的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源碼的多倉庫管理機制.下面,不妨自己動手嘗試一下.

    『拾』 如何使用Android Studio開發/調試Android源碼

    一、修改Android Studio(以下簡稱AS)的內存配置

    因為在導入源碼時需要消耗大量內存,所以先修改IDEA_HOME/bin/studio.vmoptions中-Xms和-Xmx的值。文檔中使用的是748m, 可自行修改。

    二、配置AS的JDK、SDK

    在IDE中添加一個沒有classpath的JDK, 這樣可以確保使用源碼里的庫文件

    三、生成導入AS所需配置文件(*.ipr)

    ①編譯源碼(為了確保生成了.java文件,如R.java;如果編譯過,則無需再次編譯)

    ②檢查out/host/linux-x86/framework/目錄下是否有idegen.jar

    如果idegen.jar不存在,執行:

    mmm development/tools/idegen/

    在5.0.1的源碼中會生成res.java的文件夾,導致idegen.jar運行時拋FileNotFoundException,這是idegen的代碼不夠嚴謹造成的。

    我的分享里有修改這個bug的patch,或者直接使用我分享的idegen.jar。

    ③執行

    development/tools/idegen/idegen.sh

    等待出現類似下面的結果:

    Read excludes: 5ms

    Traversed tree: 44078ms

    這時會在源碼的根目錄下生成android.ipr和android.iml兩個IntelliJ IDEA(AS是基於IntelliJ IDEA社區版開發的)的配置文件

    ④在AS中打開源碼根目錄下新生成的android.ipr

    四、解決源碼中跳轉錯誤問題

    ①為當前工程設置正確的SDK和JDK

    ②設置'Moles'的依賴

    先將所有依賴刪掉,只留下上圖'1'所指向的兩個(注意:這里刪除全部只是為了方便。如果確實用到了.jar,在將它們的路徑添加進來就可以了.

    如:5.0.1的ContactsCommon用到了geocoder-2.9.jar和libphonenumber-6.2.jar)

    點擊上圖中'2'指向的'+'並選擇上圖'3'指向的'Jars or directories'選項,依次將frameworks和external文件夾添加進來

    五、DEBUG源碼

    可以通過給剛導入的工程在'Moles'中添加'Android Framework'來讓AS將它作為一個Android工程,從而方便調試代碼.

    在彈出的選擇進程(Choose Process)對話框中,勾選顯示所有進程,選擇要DEBUG的代碼所在的進程,點擊OK即可.

    六、其它

    代碼中很多地方提示Call requires API Level x.... 出現這個問題是因為AS將工程當做安卓應用程序工程了,且源碼中沒有指定minSdkVersion.

    只需在源碼根目錄加一個聲明minSdkVersion的AndroidManifest.xml文件即可(分享了一個AndroidManifest.xml)。

    也可以考慮使用build.gradle來解決該問題。

    熱點內容
    linux支持線程 發布:2025-05-17 21:26:14 瀏覽:182
    元神隊伍配置都由什麼組成 發布:2025-05-17 21:20:18 瀏覽:475
    閑魚和安卓哪個賺錢 發布:2025-05-17 21:15:56 瀏覽:583
    c語言一個c源程序 發布:2025-05-17 21:11:44 瀏覽:314
    如何加密手機的文件 發布:2025-05-17 21:11:43 瀏覽:915
    ios開發文件上傳 發布:2025-05-17 21:10:40 瀏覽:983
    g92編程 發布:2025-05-17 21:00:31 瀏覽:170
    匯編語言第三版腳本之家 發布:2025-05-17 20:54:26 瀏覽:399
    資源配置最佳狀態叫什麼 發布:2025-05-17 20:48:58 瀏覽:84
    定義dns伺服器的ip 發布:2025-05-17 20:32:37 瀏覽:954