Ⅰ android編譯和運行在手機上使用的系統源碼版本各是什麼版本
如果app是和android系統一起進行編譯,如果想讓app的源碼保持一套,卻能夠同時在android4.1和android4.2下進行編譯。如果app源碼與android系統的版本無關,那麼,不存在問題。
但,如果app的實現代碼與所依賴的framework的版本強相關,譬如,Location相關的API,在android4.1和android4.2上的差異比較大。應用如果是採用4.2的API來實現的,在配合android4.1系統編譯時就會報錯。此時,可以採用在Android.mk文件中,根據PLATFORM_SDK_VERSION的值,在編譯時決定要編入哪些java文件,源碼中同時保留針對android4.1和android4.2的特有實現。
源碼目錄為:
Ⅱ APP的源代碼是什麼意思(安卓的)
開源(Open Source,開放源碼)被非盈利軟體組織(美國的Open Source Initiative協會)注冊為認證標記,並對其進行了正式的定義,用於描述那些源碼可以被公眾使用的軟體,並且此軟體的使用、修改和發行也不受許可證的限制。
安卓的開源就是開放源代碼,安卓2.x的內核是linux2.6.方便軟體商開發,多數軟體可以免費,手機商不用買系統版權,降低成本和零售價.這些都是對用戶直接或間接的好處.
Ⅲ 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系統源碼 到底有什麼區別
sdk只是開發工具包,這個就是我們用到的api的源碼。但是,這個sdk源碼為何能跑得起來?它也是依賴完整的android系統的。android系統源碼是基於linux內核上的一套解決方案,針對ARM平台的做的各種適合嵌入式設備的一套代碼。舉個例子,你如果在windows上編程,用到它的系統api,這些api存在於一些dll中,這個dll就是你的開發所需的東東,類似android sdk,而這個dll之所以能跑起來,完全也是依賴windows系統的,windows系統源碼有幾千萬行代碼,android系統源碼也不會少。
Ⅳ 求安卓2.3源代碼
一般來說,由開源社區開發並發行的開源軟體,即我們稱之為「開源項目(Open Source Program)」的開源軟體,一般都是「免費開源軟體」;而由企業(發行商,Enterprise or Distributor)進行二次開發並發行的開源軟體,即我們稱之為「開源產品(Open Source Program)」的開源軟體,一般是「付費開源軟體」。
必須指出,開源社區開發和發行的開源軟體,首先要體現自由/開源軟體的價值觀:開放、共享、協同、自由、無償、選擇;所謂開源軟體是「利他主義」(或「共產主義」,Altruism or Communism)與「利己主義」(或「資本主義」,Capitalism)矛盾的對立和統一(或平衡),即體現自由開源軟體價值觀與配置商業服務模式的平衡;企業開發和發行的開源軟體,是在繼承社區開發和發行的開源軟體(價值觀、開放源代碼、開源許可協議)的基礎上,進行再開發(二次開發),並採取相應的商業模式;商業模式是開源軟體得以持續發展,實行規模化、產業化的必要條件,開源軟體的商業模式是一種以服務為主要內容、實施低價銷售戰略的模式。
開源軟體商業版是基於社區版發展起來的,開源軟體商業版與社區版的關系,在實踐中可以歸納為如下各種主要類型:
1,雙授權模式
如MySQL。MySQL(社區版)執行自由/開源軟體許可協議(GPLv3),其源代碼開放,人們可從網上免費下載;MySQL(商業版)是基於MySQL(社區版)再開發的,軟體授權模式發生了變化,MySQL(商業版)是要收費的,或通過提供服務來收費。
又如Apache。Apache(社區、基金會)是一個非盈利性組織,Apache軟體基金會只向社會提供開源版本(可在網上免費下載),有一些企業如「春之源(Spring Source)」提供支持Apache服務或商業版本,但Apache基金會規定這些企業不能隨意使用Apache商標。如果某互聯網網站下載Apache軟體,安裝到伺服器(硬體)中,以建立網路/應用伺服器系統時,Apache基金會允許他們稱為Apache網路/應用伺服器,並在其網站上對外提及「Powered by Apache」。
還有如SugarCRM,也採用雙授權模式,其開放的軟體(佔80%)不收費,不開放的軟體(佔20%)要收費;另外,如Open Office.org與Star Office的關系,也可歸納為雙授權模式。
2,對開源軟體社區版進行工程化、產品化處理(二次開發)
如各種版本的Linux操作系統(產品)。一般由Linux發行商基於Linux(社區版),進行後續的工程化處理或再開發,完成或發布Linux(商業版或產品版);二次開發的工程化技術包含:① 優化內核,發行商發布的內核源代碼為Linux社區發布的「主幹(Official)源代碼」,允許與其實際執行而不公布的源代碼(即發行商的「分支源代碼」)有3-5%的偏差(這是通過測試和經驗來獲得的),②兼容性測試和質量認證,③ 對各種軟體模塊(在內核中約有1500個左右軟體模塊)的不同組合或配置(以提高效率),④ 回歸移植或降級處理(Bug Fix,Patch, back porting),⑤ 專用工具和插件,⑥ 本地化需求功能。社區開發的開源軟體(開源項目)是原創性技術,企業後續開發並完成的開源軟體(開源產品),是開源技術的成熟化過程或產品化過程(二次開發以促使開源軟體趨於穩定、優質、高效、成熟)。企業發行的Linux操作系統軟體(產品),繼承並開放由社區開發的源代碼,但企業開發的工程化技術是不開放的,含有自主創新因素和自主知識產權,這時Linux操作系統作為成型產品的整體軟體是要收費的,或通過服務來收費。
Red Hat的一位開源專家曾說:Red Hat Linux有兩種版本,一種是針對「1億人」的免費版本(或收1元成本費的基本免費版本),這是為大多數人免費提供的社區版,對這種版本,Red Hat不提供Bug Fix、Patch,也不向用戶提供支持、服務;另一種是針對「100個人」(這是指企業用戶),每戶收費「100萬元」(向企業提供若干套收費的版本,並向用戶提供Bug Fix、Patch,提供支持和服務)。
3,在開源軟體(社區版)上採取附加軟體模塊的方式
如國內開發的「銀河麒麟」操作系統,它是在Free BSD(開源軟體)基礎上再開發的(自行開發的主要是安全軟體,約占整個軟體的不足20%),等於在80%的開源軟體上附加上20%的閉源軟體模塊。這樣做的結果,連美國國家安全局(NSA)都認為,「銀河麒麟的研發使美國向中國軍網進行滲透變得無效」。
順便指出,基於開源軟體(社區版),採用附加專用軟體模塊方式,在二次開發後形成的整體軟體中,附加專用模塊的構成不得大於20%,這時整體軟體才還可稱為「開源軟體」。
4,定製模式
如Ubuntu。Ubuntu永遠是免費的,用戶可任意下載、自由使用和修改(這是指其發布的社區版);Ubuntu也有商業版,這是指由Ubuntu的發行商Canonical為用戶定製特別版Ubuntu,Canonical並向用戶提供支持和服務,這是要收費的。舉例來說,Ubuntu支持服務的收費標准為:桌面(每套)9ⅹ5,250美元;24ⅹ7,900美元;伺服器(每套)9ⅹ5,750美元;24ⅹ7,2750美元。
當然,如Linux內核(Kernel)等一些自由軟體,是沒有商業模式的。
在如上所述的基礎上,我要回答一些人對開源軟體認識的思想誤區(談一談開源軟體的是與非):
有人說:Linux都是免費的。不對!如上所述:Linux有免費的和付費的兩類;對其他開源軟體也如同Linux。
有人說:Linux的缺點是不為用戶提供支持和服務。不完全對。只有免費的社區版是如此;而對付費的商業版(或企業版、產品版),Linux發行商要為用戶提供在產品使用壽命周期內全程的支持和服務。
有人說:開源軟體不應是商業軟體,不應具商業模式。不對!上面說的很清楚了,開源軟體可以配置商業服務模式(只有社區版免費的開源軟體沒有商業模式)。
有人問:免費與付費的開源軟體在功能與服務上有什麼區別?其實,免費的開源軟體一般都是原創性的社區版,開源軟體(社區版)的性能尚不夠成熟,也不能完全滿足某些重要用戶的特殊需求,它可以免費獲得,但得不到開發者的技術支持和相應服務;而收費的開源軟體一般都是企業(發行商)後續開發的商業版(或產品版),此時性能趨於成熟(經工程化開發),能更好滿足某些用戶的需求(做好定製化開發工作),這時用戶雖然要付費,但發行商將為用戶提供在產品使用壽命周期內全程的技術支持和相應服務。
有人說:開源軟體的開發無國界,是全球志願者集體開發、合作創新的產物,不能把它限制在某一個企業或某一個國家來進行自主開發或自主創新。其實這說對了一半。開源社區對開源軟體進行的原創性開發,是適用於這種說法的,說的完全對!但要使開源軟體產品化,趨於成熟,更好地滿足用戶需求,還要進行工程化、定製化的後續開發工作,這些開發工作一般由企業(或發行商)來承擔,這時的二次開發工作當然體現自主開發創新的特點。對於企業(發行商)最終推出的更為完整的、更加成熟的、產品化的開源軟體版本(並配置商業服務模式),則可以稱之為某企業的版本(並冠以其商標),也可稱之為某地、某國的版本,所以,如果說到這種版本的「國產化」,我想也是可以的。
有人說:開源軟體既要體現自由軟體的價值觀,又要配置商業模式,這是不可調和的矛盾,只能取其一,不能合其二。我要說的是,請你體會一下上面談到的「開源軟體是『利他主義』與『利己主義』對立統一(平衡)的產物」這句哲學語言的深刻含義,再看一下上面所列的開源軟體社區版與商業版關系的各種類型,這時是否可以解答你的疑惑,而得出這樣的結論:不搞極端,做好統一或平衡是完全可能的。
關於開源和微軟的操作系統哪個安全的問題,現摘要5月12日《華盛頓時報》透露的9月30日美國國會聽證會的有關消息,就一目瞭然了。《華盛頓時報》發表的署名文章,題目是《中國阻止美國發動網路戰爭》,文中透露美國政府網路安全專家、國家情報及美國戰略司令部顧問凱文·G·科爾曼在美國國會(美中經濟與安全評估委員會)聽證會上的一些證詞,科爾曼說:「美國過去一直利用中國軍網和政府網路配備脆弱的操作系統(比如說微軟的系統)的伺服器的機會進行滲透,自從中國研發了名為銀河麒麟(Kylin)這個更加安全的操作系統並於2007年服役後,該系統強化了中國關鍵的伺服器,使美國軍方和情報機構再也無法實行滲透,致使美國網路防衛能力無效!」
當然,我在這里也要指出,如果只是配置完全開放、透明的開源操作系統軟體(社區版),也不足以保證我們網路的安全;網路安全呼喚能將自主創新包含於其中的開源軟體。
系統方面 不用向谷歌申請 好像
Ⅵ 安卓的源代碼是什麼
就是你開發軟體的時候寫的代碼啊,你找一下你的eclipse的WorkSpace(工作空間),代碼一般在這個文件夾裡面的
Ⅶ 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實例。
Ⅷ 編譯Android源碼和內核源碼的區別
Android源碼編譯之後生成的是ramdisk.img、system.img和userdata.img。而內核源碼編譯完成之後生成的是ZImage。在一般情況下Android源碼是不帶有內核源碼的,但是帶有一個鏡像,這樣在編譯完Android源碼之後就可以模擬器啟動了,如果要更換系統的內核,此時將高版本的內核源碼進行編譯生成ZImage然後替換Android系統的的鏡像。這樣使用模擬器啟動之後就可以查看內核是否已經被刷新。
請注意,android源碼和kernel源碼是分開下載的
編譯android源碼
進入source目錄下,執行make 即可。
編譯完成後,可以在源碼目錄的out/target/proct/generic/目錄下看到編譯好的ramdisk.img、system.img和userdata.img了。
編譯內核源碼
新建Kernel/goldfish,在這個目錄下進行編譯
Ⅸ 如何獲取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.
Ⅹ 自己可以編譯安卓源碼嗎
用最新的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內核問題,解決方法如下:
執行如下命令:
通過使用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源碼的多倉庫管理機制.下面,不妨自己動手嘗試一下.