Android入門

1.下載JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html/jdk-8u31-windows-i586.exe, 安裝。html

2.下載Android SDK:http://developer.android.com/tools/sdk/tools-notes.html/android-sdk_r24.0.2-windows.zip,解壓。運行SDK manager下載SDK。SDK tools路徑寫入path環境變量。java

3.下載Eclipse:http://www.eclipse.org/downloads/eclipse-java-luna-SR1a-win32.zip , 解壓。linux

4. 啓動Eclipse,選擇Help>InstallNewSoftware,點擊右上角的Add,安裝ADTPlugin: https://dl-ssl.google.com/android/eclipse/android

 5. 學習文檔和sample,開發者討論,開源代碼網址:git

下載android源代碼:github

官方地址,要FQ。 http://source.android.com/source/downloading.html 官方地址,要FQ。 http://android.git.kernel.org/ 不FQ在線可看。   https://github.com/android?page=2
不FQ在線可看。http://grepcode.com/snapshot/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/ 
不FQ可看。       https://android.googlesource.com 算法

 文檔:shell

http://developer.android.com/training/index.htmlwindows

http://developer.android.com/guide/topics/fundamentals.html安全

http://code.google.com/edu/android/index.html

http://stackoverflow.com/

http://www.youtube.com/user/GoogleDevelopers

 6. windows下載部分android源碼:

1)下載git  https://msysgit.github.com

2)在git bash中運行git clone https://android.googlesource.com/platform/packages/apps/Browser.git

7.windows下載framework源碼:

1)下載git  https://msysgit.github.com

2)在git bash中運行git clone https://android.googlesource.com/platform/frameworks/base   
3) 在base目錄下git tag  而後 git checkout android-sdk-4.0.1_r1

8.windows下載整個android源碼 1) 在cygwin/home/Administratord/bin的.bash_profile文件下加上export PATH=~/bin:$PATH 2)curl --insecure https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo 3)chmod a+x ~/bin/repo 4) git config --global http.sslverify "false" 5)repo init -u git://Android.git.linaro.org/platform/manifest.git -b android-2.3.5_r1 6)repo sync

9.windows下載kernel源碼 1)git clone https://android.googlesource.com/kernel/goldfish.git 2)git branch -a 3)git checkout remotes/origin/android-gldfish-2.6.29

10.運行android源碼 1)emulator -kernel ./prebuilt/android-arm/kernel/kernel-qemu -sysdir ./out/target/product/generic  -system system.img -data userdata.img -ramdisk ramdisk.img

11.運行linux kernel源碼 1)emulator -kernel ./kernel/common/arch/arm/boot/zImage & 2)adb shell

12.Linux內核源代碼版權遵循GNU License,而Android源代碼版權遵循Apache License,前者在發佈產品時,必須公佈源代碼,然後者無須發佈源代碼。若是把對硬件支持的全部代碼都放在Linux驅動層,那就意味着發佈時要公開驅動程序的源代碼,而公開源代碼就意味着把硬件的相關參數和實現都公開了,在手機市場競爭激烈的今天,這對廠家來講,損害是很是大的。

13.內核開發時printk輸出的日誌信息保存在/proc/kmsg 用戶空間中提供了輕量級的logger日誌系統

LOGV("This is the log printed by LOGV in android user space.");

Log.i(LOG_TAG, "This is the log printed by Log.i in android user space.");

logcat

14.源代碼部分:

編寫一個驅動: kernel/common/drivers

編寫HAL部分: hardware/libhardware/include/hardware hardware/libhardware/modules mmm hardware/libhardware/modules/hello make snod

編寫jni部分: frameworks/base/services/jni

編寫硬件訪問服務 frameworks/base/core/java/android/os

15.Logger模塊調用:

應用程序層調用應用程序框架層的Java接口,應用程序框架層的Java接口經過調用本層的JNI方法進入到系統運行庫層的C接口,系統運行庫層的C接口經過設備文件來訪問內核空間層 的Logger驅動程序.Logger是輕量級的日誌系統,以驅動程序形式實如今內核空間,用戶空間分別提供了Java接口和C/C++接口來使用這個日誌系統。 驅動程序代碼在:kernel/common/drivers/staging/android/logger.c 應用框架層代碼在:frameworks/base/core/java/android/util/Log.java jni代碼: frameworks/base/core/jni/android_util_Log.cpp

16 .進程間通信: 有傳統的管道(Pipe)、信號(Signal)和跟蹤(Trace),這三項通訊手段只能用於父進程與子進程之間,或者兄弟進程之間;後來又增長了命令管道(Named Pipe), 使得進程間通訊再也不侷限於父子進程或者兄弟進程之間;爲了更好地支持商業應用中的事務處理,在AT&T的Unix系統V中,又增長了三種稱爲「System V IPC」的進程間通訊機制, 分別是報文隊列(Message)、共享內存(Share Memory)和信號量(Semaphore);後來BSD Unix對「System V IPC」機制進行了重要的擴充,提供了一種稱爲插口(Socket)的 進程間通訊機制。Android系統沒有采用上述提到的各類進程間通訊機制,而是採用Binder機制。Binder是一種進程間通訊機制,它是一種相似於COM和CORBA分佈式組件架構, 通俗一點,實際上是提供遠程過程調用(RPC)功能。由一系統組件組成,分別是Client、Server、Service Manager和Binder驅動程序,其中Client、Server和Service Manager 運行在用戶空間,Binder驅動程序運行內核空間。 Service Manager和Binder驅動已經在Android平臺中實現好,開發者只要按照規範實現本身的Client和Server組件 Service Manager在用戶空間的源代碼位於frameworks/base/cmds/servicemanager

廣播機制倒是不可替代的,它和Binder機制不同的地方在於,廣播的發送者和接收者事先是不須要知道對方的存在的,這樣帶來的好處即是, 系統的各個組件能夠鬆耦合地組織在一塊兒,這樣系統就具備高度的可擴展性,容易與其它系統進行集成。

17.內存調用:

Ahshmem: frameworks/base/core/java/android/os/MemoryFile.java -> frameworks/base/core/jni/adroid_os_MemoryFile.cpp ->system/core/libcutils/ashmem-dev.c

18.ART運行時的垃圾收集機制,Dalvik虛擬機的垃圾收集機制都使用到了Mark-Sweep算法. 內存碎片問題可使用dlmalloc技術解決。內存不足問題則經過垃圾回收和在容許範圍內增加堆大小解決.在Android5.0中,ART運行時取代了Dalvik虛擬機。 Android運行時ART,它的核心是OAT文件.在ART運行時中,類方法的執行方式有兩種。一種是像Dalvik虛擬機同樣,將其DEX字節碼交給解釋器執行; 另外一種則是直接將其本地機器指令交給CPU執行。ART之因此會比Dalvik快,是由於ART執行的是本地機器指令,而Dalvik執行的是Dex字節碼.APK在安裝時被執行了AOT。 AOT(Ahead Of Time)是相對JIT(Just In Time)而言的。也就是在APK運行以前,就對其包含的Dex字節碼進行翻譯,獲得對應的本地機器指令,因而就能夠在運行時直接執行了。 當一個進程試圖訪問一個文件時,SEAndroid會將進程和文件的安全上下文提取出來,根據安全策略規則,決定是否容許訪問。

19.一個完整的刷ROM過程,包含如下兩個步驟:

       1)讓設備進入到Fastboot模式,刷入一個recovery.img鏡像

       2)  讓設備進入到Recovery模式,刷入一個包含system.img鏡像和boot.img鏡像的zip包 好在有不少現成的基於AOSP的第三方開源項目,能夠編譯出來在目前市場上大部分的手機上運行。其中,最著名的就是CyanogenMod了,簡稱CM。

採用Git來進行版本管理.由許許多多子項目組成,所以它在Git的基礎上創建了一套本身的代碼倉庫,而且使用工具Repo進行管理。

20.UI的服務:

SurfaceFlinger服務在啓動的過程當中,一共涉及到了三種類型的線程,它們分別是Binder線程、UI渲染線程和控制檯事件監控線程。 SurfaceFlinger服務就是經過向這個幀緩衝區寫入內容來繪製應用程序的用戶界面的。Android系統在硬件抽象層中提供了一個Gralloc模塊,封裝了對幀緩衝區的全部訪問操做。 鏈接上SurfaceFlinger服務以後,Android應用程序就能夠請求SurfaceFlinger服務建立Surface。而當有了Surface後,Android應用程序就能夠用來渲染本身的UI了。

21.Android源碼結構:

Android 2.1
|-- Makefile
|-- bionic               (bionic C庫)
|-- bootable            (啓動引導相關代碼)
|-- build                 (存放系統編譯規則及generic等基礎開發包配置)
|-- cts                    (Android兼容性測試套件標準)
|-- dalvik                (dalvik JAVA虛擬機)
|-- development      (開發者須要的一些例程及工具)
|-- external             (android使用的一些開源的模組)
|-- frameworks       (核心框架——java及C++語言)
|-- hardware           (主要保護硬解適配層HAL代碼)
|-- out                   (編譯完成後的代碼輸出與此目錄)
|-- packages           (應用程序包)
|-- prebuilt             (x86和arm架構下預編譯的一些資源)
|-- sdk                   (sdk及模擬器)
|-- system              (文件系統庫、應用及組件——C語言)
`-- vendor              (廠商定製代碼)

 

 

相關文章
相關標籤/搜索