android源碼大全
『壹』 誰有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 中添加:如下內容
export http_proxy=http://127.0.0.1:8580/export https_proxy=http://127.0.0.1:8580/
通過shell安裝如下的組件:
1、sudo apt-get install bison g++-multilib git gperf libxml2-utils
2、新建一個存放源碼的目錄,如:mkdir ~/andorid/source
3、在源碼目錄中輸入命令:repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
其中: android-4.0.1_r1是android源碼的版本,更多的版本可以通過下面的方式查詢:http://source.android.com/source/build-numbers.html
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 APP 源代碼
用壓縮軟體打開apk文件,解壓出根目錄中的classes.dex文件
使用cmd ,dex2jar.bat classes.dex命令將classes.dex轉換為jar
再用jd-gui打開該jar就可以查看源碼了,如果apk安全性好的話,有些代碼是看不到的
『叄』 有研究android系統源碼的博客嗎
我幹了3年Android sdk開發,覺得到了瓶勁沒法更進一步,於是花了一年多點時間,大概摸到點門徑。根據前輩的經驗,Android底層完全入門需要兩年。
先說下我的入門過程:
第零步,下載源碼,我下的4.2的,框架層源碼10G,內核2G多,ctags給框架層建的標簽文件都有600M,當時讓我有點震撼,用的vim+ctags+cscope來閱讀,還算不錯,架構挺清晰的。
第一步,我找到了一本好書《Android的設計與實現 第一卷》它講了Android框架層的啟動,初始化,服務框架初始化,Binder,消息循環,PackageManagerService,ActivityManagerService。據作者說後面會出講UI子系統的第二卷,拭目以待。其實這本書看了幾十頁我就發現需要第二步的知識,否則看不下去,於是跳去第二步。
第二步,學習Linux系統編程,在看《Android的設計與實現》的時候我發現,框架層的Native部分,全是Linux編程。為了掌握這部分知識,我花了4個月學習了《Linux系統編程手冊》(TLPI)這本1000多頁的書,我以前是搞WIndows文件系統這塊的,所以C語言還比較熟,TLPI的習題很有意思,量也比較大,堅持下來還是收獲很多。
第三步,花了4個月學習了一些Linux內核的知識,看了LKD,PLKA看了一半多。越學越沒底,覺得不懂得越來越多,不過這個也正常,只有靠慢慢磨,估計以後要不斷的磨這塊。
第四步,回頭看Android源碼,這次一口氣看完了《Android的設計與實現 第一卷》,終於對框架層有了譜。同時真的數次把我看暈,前面看Linux內核源碼都沒這么暈,不斷在java層和Native層之間跳有點磨腦漿。其中我又覺得Java的基礎沒有打太牢,回去補了一個月的《Core Java》第八版。但是這書沒有涉及UI子系統,於是又看了《Android內核剖析》
第五步,《Android內核剖析》(這本書實際上是講框架層的,作者也是個搞嵌入式的,所以他在寫框架層的時候文筆不太好,很羅嗦,不過還是有很多看點,到他後來寫做ROM,玩開發板時估計是說到了他的本行,一下子遛起來了看得出還是挺有水平的,這本書知識有點舊畢竟講的是2.3很多代碼已經過時,但是作者很多點子很有參考價值)這本書講UI子系統和按鍵/觸摸消息處理系統還是很有分量的,尤其13章View繪制那裡,結合源碼研究很有收獲。而後面他講編譯框架和ROM相關的東西都是挺寶貴的資料。
第六步,為了再補一下其他諸如電源管理模塊等子系統的知識看了,《深入理解android》系列,個人認為這個系列看起來有點不太舒服,不過作為補充印證還是比較有價值。
第七步,《Android系統源代碼情景分析》,羅升陽的源碼分析大作,比《Android的設計與實現》分析得更細致,但缺點是涉及到模塊比較少,選用的源碼也比《Android的設計與實現》更舊一點。看完書後需要去研究作者的博客,東西挺多的,一定讓你滿意。
第八步,買塊開發板自己玩。這步我還沒走到,原因是我覺得我還差點准備知識。可能要再幾個月,到時准備入塊6410或者樹莓派。
最後,由於我11年以前都是搞Windows這塊的,所以對Linux知識不是很了解,不得已看了這么些書,如果是一直做Linux的人,很多步驟估計可以省掉了。直接上源碼才是正道。
我本身做著移動GIS開發的工作,學框架層全是因為興趣,但招聘平台Android框架層開發人員還是蠻有競爭力的有不少定製ROM,智能電視的工作都處於人才難求狀態,畢竟有一定的門檻,現在各種ios培訓,讓奔著錢干開發的人紛紛湧入,而ios只能幹sdk開發的缺點就暴露出來了,一堆新手老手,菜鳥大牛全擠在SDK開發這塊,我覺得不太妙。 反觀Android這邊,雖然入門菜鳥沒有搞ios來錢,但是可持續性很好,從sdk-》框架》驅動》內核這樣幹下去。干著干著發現自己漸漸變成了Linux開發者/嵌入式開發者的人也不少,新人,老手,菜鳥大牛各居其位,層次性很好。
轉載
『肆』 求安卓9.0源碼包
網頁鏈接csdn上可以下載
『伍』 如何獲取android源代碼
當前的Android代碼託管在兩個方:https://github.com/android 和https://android.googlesource.com之前在 android.git.kernel.org上也有託管,不過現在重定向到了https://android.googlesource.com好在都支持git訪問。
google提供的repo工具實際上是一個內部操作git工具來簡化操作Android源碼的Python腳本。經過嘗試,直接使用git工具在ubuntu下可以實現cloneAndroid源碼。下面介紹一下方法:
1.獲取當前的在github上託管的Androidgitrepositories:
github頁面為:https://github.com/android/following。不過這個頁面不支持通過wget"https://github.com/android/following"或者curl"https://github.com/android/following"的方式訪問,錯誤信息如下:
這個時候需能做的只能是"tryagain"了。
需要說明的是"不要試圖同時並發執行多個gitclone命令",這樣會導致大量出現上面貼圖中的錯誤,另外,整個clone過程中耗時最多的gitrepository如下:
kernel_common.gitkernel_msm.gitplatform_frameworks_base.gitplatform_prebuilt.git其中platform_prebuilt.git是google提供的預編譯好的二進制文件,包含:各種庫文件,jar包,可執行程序等等,如果只是閱讀Android源代碼,這個gitrepository可以不用clone.
『陸』 github 上有什麼價值的android 源碼
1. ActionBarSherlock
ActionBarSherlock應該算得上是GitHub上最火的Android開源項目了,它是一個獨立的庫,通過一個API和主題,開發者就可以很方便地使用所有版本的Android動作欄的設計模式。
對於Android
4.0及更高版本,ActionBarSherlock可以自動使用本地ActionBar實現,而對於之前沒有ActionBar功能的版本,基於
Ice Cream Sandwich的自定義動作欄實現將自動圍繞布局。能夠讓開發者輕松開發一款帶動作欄(Action
bar)的應用,並且適用於Android 2.x及其以上所有版本。
詳情請參考:ActionBarSherlock
2. facebook-android-sdk
Facebook SDK for Android是一個開源庫,允許開發者將Facebook集成到所開發的Android應用中。
如果想要獲取更多關於示例、文檔、將SDK集成到App中、源代碼等信息,可直接登陸Facebook Developers查看。
3. SlidingMenu(SlidingMenu Demos)
SlidingMenu是一個開源的Android庫,能夠讓開發者輕松開發一款應用,實現類似於Google+、Youtube和Facebook應用中非常流行的滑動式菜單。
使用SlidingMenu的Android應用:
Foursquare
Rdio
Plume
VLC for Android
ESPN ScoreCenter
MLS MatchDay
9GAG
Wunderlist 2
The Verge
MTG Familiar
Mantano Reader
Falcon Pro (BETA)
MW3 Barracks
4. cocos2d-x
在移動開發領域,將Cocos2D-X用於主流iOS/Android游戲開發的公司、開發團隊多不勝數。cocos2d-x是一個開源的支持多平
台的2D游戲框架,使用C++開發,基於cocos2d-iphone,在MIT許可證下發布。主分支在GitHub上使用OpenGL ES
2.0渲染,而舊版gles11分支則使用OpenGL ES 1.1渲染。
支持iOS、Android、Windows Phone 8、Bada、BlackBerry、Marmalade、Windows、Linux等多個平台。支持C++、Lua、JavaScript編程語言。
5. android
GitHub Android App是
GitHub開源的Android客戶端,支持Issues、Gists,並集成了新聞Feed,能夠讓你及時跟進組織及關注的開發者、庫等。同時,該應
用還提供了一個用戶快速訪問你所創建、監控及發布issue的面板,可查看並將問題加入到收藏夾,可對標簽、里程碑和任務進行過濾配置。
android資源庫包含了GitHub Android App的所有源代碼。
6. Android-ViewPagerIndicator
ViewPager指針項目,在使用ViewPager的時候能夠指示ViewPager所在的位置,就像Google Play中切換的效果一樣,還能使用在應用初始化的介紹頁面。
兼容Android支持庫的ViewPager及ActionBarSherlock,最初是基於Patrik Åkerfeldt的ViewFlow,開發者可以直接登陸Google Play下載該項目的演示應用。
7. MonoGame
MonoGame是一個Microsoft XNA 4.x Framework的開源跨平台實現。用於讓XNA開發者將他們在Xbox
360、Windows & Windows Phone上開發的游戲移植到iOS、Android、Mac OS
X、Linux及Windows 8 Metro上,目前,PlayStation Mobile & Raspberry
PI的開發正在進行中。
詳情請參考:MonoGame
8. Android-PullToRefresh
該項目用於為Android提供一個可重用的下拉刷新部件。它最初來源於Johan Nilsson的庫(主要是圖形、字元串和動畫),但這些後來都已被取代。
9. android-async-http
android-async-http是Android上的一個非同步、基於回調的HTTP客戶端開發包,建立在Apache的HttpClient庫上。
10. Android-Universal-Image-Loader
Android上最讓人頭疼的莫過於從網路獲取圖片、顯示、回收,任何一個環節有問題都可能直接OOM,這個項目或許能幫到你。
Universal Image Loader for Android的目的是為了實現非同步的網路圖片載入、緩存及顯示,支持多線程非同步載入。它最初來源於Fedor Vlasov的項目,且自此之後,經過大規模的重構和改進。
11. GreenDroid
GreenDroid最初是由Cyril Mottier發起,是一個Android的UI開發類庫,能夠讓UI開發更加簡便,並且在應用中始終保持一致。
詳情請參考:Cyril Mottier's Blog
12. Anki-Android
AnkiDroid是一個免費、開源的Android的快閃記憶體應用,可直接從Google Play進行下載。
詳情請參考:ankidroid
13. android-actionbar
Action
bar是一個標識應用程序和用戶位置的窗口功能,並且給用戶提供操作和導航模式。在大多數的情況下,當開發者需要突出展現用戶行為或在全局導航的
activity中使用action bar,因為action
bar能夠使應用程序給用戶提供一致的界面,且系統能夠很好地根據不同的屏幕配置來適應操作欄的外觀。
Action bar的主要目的:
提供一個用於識別應用程序的標示和用戶的位置的專用空間。
在不同的應用程序之間提供一致的導航和視覺體驗。
突出Activity的關鍵操作,並且在可預見的方法內給用戶提供快捷的訪問。
14. android-viewflow
android-viewflow是Android平台上的一個視圖切換的效果庫,ViewFlow相當於Android UI部件提供水平滾動的ViewGroup,使用Adapter進行條目綁定。
15. android-mapviewballoons
當使用Android地圖外部庫(com.google.android.maps)時,android-mapviewballoons會提供一個簡單的方式來對地圖覆蓋進行標注,就是一個簡單的信息氣泡。
它由BalloonOverlayView組成,是一個代表顯示你的MapView及BalloonItemizedOverlay的氣泡的視圖,BalloonItemizedOverlay是ItemizedOverlay的一個抽象擴展。
16. PushSharp
一個向iOS(iPhone/iPad APNS)、Android(C2DM和GCM)、Windows Phone和Windows 8設備發送推送通知的伺服器端庫。
17. androidannotations
Android Annotations是一個開源的框架,用於加速 Android應用的開發,可以讓你把重點放在功能的實現上,簡化了代碼,提升了可維護性。
18. HockeyKit
Hockey是一個iOS Ad-Hoc自動更新框架。蘋果App
Store中的所有App都可以使用它,它能夠顯著地提高Beta測試的整個過程,分為兩部分:伺服器和客戶端框架。伺服器組件需要所有腳本,但在沒有客
戶端庫的情況下,也可以單獨工作。它提供一個Web介面,Beta測試者可以使用它來安裝最新的AdHoc配置文件,也可以直接在設備上通過Safari
安裝最新的Beta版本。
只需在伺服器上安裝一次服務端,就可以處理包標識符不同的多個應用程序(有開發者強烈建議對Debug、AdHoc Beta和AppStore發布版使用不同的包標識符)。
默認當App啟動或喚醒時,客戶端會從伺服器檢測更新,用戶可以在設置對話框中進行修改:一天一次或手動檢查更新。
除了支持iOS,HokeyKit也支持Android平台,不過Android版還處在Alpha階段,支持OTA及應用內更新。
為HockeyKit用戶提供伺服器託管服務。
19. android-menudrawer
Android上的菜單展示風格各異,其中用得最多且體驗最好的莫過於左右滑動來顯示隱藏的菜單,android-menudrawer是一個滑動
式菜單實現,允許用戶在應用當中實現無縫導航。該項目具有多種菜單展示效果,其中最常見的就是通過屏幕邊緣拖動或點擊動作欄的「向上」按鈕顯示。
實現功能:
菜單可以沿著四個邊放置。
支持附加一個始終可見、不可拖動的菜單。
菜單的內容和整個窗口都可以隱藏。
可用於XML布局。
顯示當前可見屏幕的指示器。
20. android-flip
Aphid FlipView是一個能夠實現Flipboard翻頁效果的UI組件。
『柒』 求一android程序源碼 讓小球沿指定路徑運動
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.LinearLayout;
public class MoveballActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LinearLayout root = (LinearLayout)findViewById(R.id.root);
final DrawView draw = new DrawView(this);
draw.setMinimumWidth(300);
draw.setMinimumHeight(500);
draw.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View arg0, MotionEvent event){
draw.currentX = event.getX();
draw.currentY = event.getY();
draw.invalidate();
return true ;
}
});
root.addView(draw);
}
}
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;
public class DrawView extends View{
public float currentX = 40 ;
public float currentY = 50 ;
public DrawView (Context context){
super(context);
}
public void onDraw(Canvas canvas){
super.onDraw(canvas);
//創建畫筆
Paint p = new Paint();
//設置畫筆的顏色
p.setColor(Color.RED);
//繪制一個小圓(作為小球)
canvas.drawCircle(currentX, currentY, 15, p);
}
}
跟隨手指移動的小球,參考一下吧。
『捌』 android項目源碼下載
對於讀項目源代碼來說,可能對大多數人是件困難的事。首先,第一個障礙:看到項目,就已經放棄! 如果有十個人,可能有5個人以上會是上面這種情況,分析其想法:這么多的代碼,我要怎麼讀啊!我要讀好久啊!算了,還是看小Demo吧,所以這樣,他們也就只是把這個項目導入到eclipse中,點了幾下滑鼠,然後就沒有下文了。 解決辦法:其實他們終止的原因很簡單,就是嫌麻煩,那好吧,告訴你,這點麻煩都能對你造成影響,其實你的開發之路也可以終止了。任何東西,你要學到它,你就必須花時間、花精力、還要有面對困難的准備。想一步登天,有可能,除非你是天才,但畢竟天才太少了!對於開發,不是學習1+1,所以,先擺正心態吧,那要具備怎樣的心態呢?那就是:有面對困難的准備,也有解決苦難的信心。 心態問題解決了,那就是讀代碼的技巧了,很多人拿到一個項目不知道怎麼入手,乾脆就胡亂的一通看,看到一定時候發現,實在進行不下去了,又開始重新梳理自己的思路。這樣是很浪費時間的,其實對於讀一個項目,最好按照以下步驟進行(
個人意見,僅供參考
): 1、使用這個應用或者游戲,直到熟悉它的使用流程和功能 2、根據自己的體驗分析代碼實現(整體) 3、如果有條件和原作者請教項目思路 4、從最先啟動的Activity開始,弄懂每個Activity功能如何實現以及它的布局實現 5、遇到不懂的代碼,首先找搜索引擎(一般都能解決)。還不行就可以請教他人了 6、對新學到的知識點,一定要總結下來,並且定期的去回顧
7、最重要的一點:
我認為要自己動手寫,那怕是重新寫一遍這個項目,或者自己設計一個類似的,再或者只寫這個項目中的一部分。 為什麼要自己動手呢?大家都知道coder這個東西,那怕你理論學得再好,不動手,那也是毫無意義的!所以,動手寫一下,你會遇到問題,你就會解決問題,這樣,你才能學到更多。這就是經驗·······
以上回答你滿意么?
『玖』 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源碼里有哪些比較好的演算法或框架推薦
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實例。