編輯:關於Android編程
本文是對《Android深度探索-HAL與驅動開發》中關於此章節的總結,記錄自己學習的點點滴滴。
Android源代碼包含了很多東西,如內嵌在Android系統中的應用程序
(拍照、計算器、日歷、撥號器等)源碼、Android SDK帶的各種工具
源碼、Android NDK源碼、HAL源碼等等,所以Android源碼包非常大。
---源碼下載
/*配置下載環境*/
創建一個用於存放下載腳本文件repo的目錄(該腳本文件可以存放
到任意目錄中,一般使用~/bin)
1)
#mkdir ~/bin
#PATH=~/BIN:PATH
2)下載repo腳本
#curl
https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
#chmod a+x ~/bin/repo
repo文件實際上是用Python腳本對git的封裝,主要是為了簡化下載
Android源代碼的操作。
3)創建存放Android源碼目錄
#mkdir android
#cd android
4)執行初始化
#repo init -u
https://android.googlesource.com/platform/mainfest
上面的代碼要求repo下載最新的源碼,也就是master分支。如果想下
載其他分支,可以使用如下命令。
#repo init -u
https://android.googlesource.com/platform/mainfest -b xxxxx(其他)
5)開始執行下載
#repo sync
根據網速和機器配置的不同這個過程會持續不同的時間起碼幾個小時吧
PS:Android源碼repo下載方式不是必須的,只要有可用的源碼包,何必下載呢?
解壓之後直接用也是不錯的方式。
---Android源代碼目錄結構分析
目錄名 源碼目錄含義
abi | 應用程序二進制接口 application binary interface
bionic | C/C++運行時庫,在NDK程序中很大一部分調用的就是此處程序
bootable | 用於Android裝載和啟動程序,其中包含著名的bootloader和recovery。
bootloader在Linux內核啟動之前啟動,用來初始化硬件、建立映射等等
recovery可以講一個壓縮包中文件覆蓋到手機內存中系統目錄的程序
(刷機程序)
build | 用於編譯Android源碼以及建立system.img、ramdisk.img等文件的工具。
cts | 用於兼容性測試的工具
dalvik | Dalivk虛擬機的源代碼
development 高層的開發和調試工具
device | 與設備相關的代碼。其中包含了motto、三星的設備相關代碼
docs | Android源代碼項目的文檔和工具
external | 擴展工具的源代碼
frameworks Android框架層代碼。也就是Android SDK的源代碼
hardware | 硬件接口層和庫。HAL的源代碼就在此處
libcore | Java核心庫
ndk | NDK的相關代碼
packages | 與Android系統一同發布的應用程序源代碼
prebuilts | Android在各種平台下編譯之前要使用的工具
sdk | 在開發環境中使用的工具,如DDMS、draw9patch、sdkmanager等
system Android的基本系統
/*在prebuilts文件夾下邊果然有部分編譯工具~~*/
---編譯Android源碼
/*初始化編譯環境*/
在Linux終端下執行
#source build/envsetup.sh envsetup.sh腳本主要來初始化一些編譯命令如mm.
mmm等。
envsetup.sh中定義了一些shell函數,當使用source命令之後,就可以在Linux終端
下執行這些命令函數。mm和mmm都可以編譯Android源代碼中指定的工程,他們
的區別是mm命令必須進入指定工程的目錄進行編譯,而mmm可以在Android可以
在源碼樹下任何一級目錄編譯任意指定的工程,只要指定路徑即可。
例如:
1)#cd ~/android/android2.3.4_src
#source build/envsetup.sh
#cd packages/apps/calculator
#mm
2)#cd ~/android/android2.3.4_src
#source build/envsetup.sh
#mmm packages/apps/calculator
/*選擇編譯目標*/
使用lunch命令編譯制定目標
full-eng | 針對所有移動設備,Android模擬器有效,打開所有調試選項
當不能確定或者忘記具體目標的時候可以在命令行上只輸入lunch進行運行
會提示處多種目標選項,從其中選擇合適的目標進行編譯即可。
3)#make 如果擁有多核、多線程、超線程的PC那麼可以附帶-jn參數,這樣可以加快
編譯速度。例如#make -j4 編譯的過程也是一個漫長的等待。~~
---out目錄結構分析
out目錄是存放編譯Android源代碼生成的目標文件的默認目錄。
|--host/ 編譯過程中需要的一些庫和工具
out--|
|--target/ ~/common主要包含Android系統Java庫。~/generic包含目標文件system.img等
---將apk內置發布
將apk嵌入system.img中,這樣apk就和原生系統的app一樣內置,非root無法卸載。
1)將apk嵌入/out/target/product/generic/的system/app文件中,然後重新打包生成system.img
2)因為系統自帶的app不管有apk文件而且還有對應的odex文件,我們也可以將app源碼
放到Android源碼包中重新編譯app,這樣就會在system/app目錄底下生成app的apk和odex
然後重新打包system.img。
重新打包system.img,可以使用out/host/linux-x86/bin目錄下的mkyaffs2image命令行工具,或者
執行make snod打包
---下載和編譯Linux內核源代碼
從剛才的Android源碼樹也可以看到確實沒有和Linux相關的文件夾,OK,原來內核是單獨添
加進去的,而且這個Linux內核是經過Google修改後的,不是linux.kernel.org的原生內核
從Google下載Linux內核、解壓後,配置內核,然後進行編譯。
---總結:
Android移植主要是Linux內核的移植。而Linux內核移植主要是Linux驅動的移植,所以本文概述
了Android源碼的編譯和Android內Linux內核的編譯。
有時候你把手機接到電腦上調試時,Android Studio總是提示你重啟ADB,但是你點重啟後,立馬又跳出那個提示重啟的對話框。會再跳出提示對話框是因為你ADB重啟沒有
1、Pull概述Android系統中和創建XML相關的包為org.xmlpull.v1,在這個包中不僅提供了用於創建XML的 XmlSerializer,還提
先看一下效果圖支持本地圖片以及網絡圖片or本地網絡混合。使用方式:<com.jalen.autobanner.BannerView android:id=@+id/
廢話不多說,先看下效果:先是微信的再是模仿的先說下實現原理,再一步步分析這裡總共有2個Activity一個就是主頁,一個就是顯示我們圖片效果的頁面,參數通過Intent傳