官术网_书友最值得收藏!

1.2 Android的開發環境

1.2.1 開發環境

Android的Linux開發環境一般使用Ubuntu主機。在基于Ubuntu的主機環境中,開發Android主機環境包括以下需求:git工具、repo工具、Java的JDK、主機編譯工具等幾個方面。編譯過程中的主要目標機的編譯工具則在Android的源代碼包中自帶。

Java 6開發包(SUN標準的JDK 6)的安裝方式如下所示:

$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk

Java 5開發包(SUN標準的JDK 5)的安裝方式如下所示:

    $ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu hardy main
multiverse"
    $ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu
hardy-updates main multiverse"
    $ sudo apt-get update
    $ sudo apt-get install sun-java5-jdk

在Android 1.6至Android 2.2發布版本中,Android系統要求使用Java 5來編譯系統;Android 2.3.x之后要求使用Java 6進行編譯。

配置Java運行環境和javac編譯器的方法如下所示:

$  update-alternatives --config java
$  update-alternatives --config javac

提示:不同版本的JDK可以共存,可以通過update-alternatives進行配置選擇。

Android系統在編譯的過程中需要編譯主機的工具,因此需要使用主機的GCC工具鏈。而對于編譯目標機文件,Android在prebuilt目錄中集成了GCC交叉編譯工具鏈。

新版本Android源代碼編譯應當使用64位的主機環境,配置方式如下所示:

$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
  zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \
  x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
  libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
  libxml2-utils

而32位的主機開發環境,配置方式如下所示:

$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
  zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \
  libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \
  libxml2-utils

repo是調用git封裝的工具,安裝repo的準備工作如下所示:

$ mkdir ~/bin
$ PATH=~/bin:$PATH

repo工具同樣可以在Android的網站上獲得,方法如下所示:

$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

repo是一個由Google提供的工具,本質上是一個腳本,它可能隨時更新,因此應當從Google的相應地址獲得最新的repo,復制到本地之后更改權限來使用。

1.2.2 源代碼獲取

獲取Android完全的源代碼方法包括初始化代碼倉庫和獲取代碼兩個步驟,每個步驟可以增加不同的參數。

對于Android的代碼倉庫,初始化代碼倉庫的一般方法如下所示:

$ repo init -u https://android.googlesource.com/platform/manifest

此時得到的是代碼倉庫中Master分支(主分支)的最新版本。

提示:Google更新了源代碼倉庫的uri,不再使用從前的android.git.kernel.org。

在經過repo init之后,可以使用repo獲取Android的全部代碼,方法如下所示:

$ repo sync

在repo init時,使用-b選項可指定初始化版本的方法如下所示:

$  repo  init  -u  https://android.googlesource.com/platform/manifest  -b
android-2.2_r1
$  repo  init  -u  https://android.googlesource.com/platform/manifest  -b
android-4.0.1_r1

使用repo sync時,也可以同步一個單個工程的內容,需要使用工程的名稱作為repo sync的參數,工程的名稱可以從manifest.xml獲得。使用方法如下。

$ repo sync {project_name}

1.2.3 編譯Android源代碼

編譯Android系統的方法比較簡單:在Android源代碼的根目錄中有一個Makefile,直接執行make即可,此時表示進行默認產品的全系統構建。可以增加-j N等參數指定并行編譯的線程,加快編譯的速度。

Android系統編譯過程的片斷如下所示:

$ make
# ……編譯過程
Combining NOTICE files: out/target/product/generic/obj/NOTICE.html
Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_
unopt_intermediates/system.img
Install system fs image: out/target/product/generic/system.img
Installed file list: out/target/product/generic/installed-files.txt

在一般情況下,根據編譯過程的輸出信息,system.img和installed-files.txt生成后,表示整個系統已經成功編譯完成。

1.2.4 仿真器運行

使用Android Emulator可以模擬Android整個系統的運行,在運行過程中,可以指定內核、主文件系統、用戶文件系統等。

Android是基于Linux的系統,具有自己的Linux內核映像文件。默認情況下,使用的源代碼包中提供的二進制內核路徑如下所示:prebuilt/android-arm/kernel/。

kernel-qemu文件為ARMv5體系結構的Linux內核。預編譯的內核還有kernel-qemu-armv7文件,它是ARMv7的體系結構。

模擬器運行之前需要配置ANDROID_PRODUCT_OUT環境變量:

$declare -x ANDROID_PRODUCT_OUT
              ="{Android根目錄}/out/target/product/generic"

ANDROID_PRODUCT_OUT宏表示的是產品的目錄,模擬器運行時,需要從這個目錄中找到幾個映像文件。

運行模擬器時,同時得到一個shell終端的方式如下所示:

$ ./out/host/linux-x86/bin/emulator -shell

在仿真器環境中使用SD卡的方式如下所示:

$ ./out/host/linux-x86/bin/emulator –shell –sdcard <image_file>

在仿真器環境中指定不同分辨率的方法如下所示:

$ ./out/host/linux-x86/bin/emulator –shell –skin 800x480

1.2.5 使用工具

在Linux主機環境中,如果對Android的源代碼進行了完整的編譯,各種Linux的主機中工具生成在{源代碼根目錄}/out/host/linux-x86/bin/目錄中。可以使用這個目錄中的各種工具。

adb全稱Android Debug Bridge(Android調試橋)。使用adb工具可以直接操作管理Android模擬器或者真實的Android設備。adb工具中幾個通用的基本命令如下所示:

$ adb devices               # 查看當前連接的設備(仿真器和真實設備)
$ adb connect <ip>:5555    # 連接到某個網絡端口
$ adb start-server          # 啟動adb服務器進程
$ adb kill-server           # 終止adb服務器進程

adb得到目標信息的幾個命令如下所示:

$ adb get-product           # 得到設備的id
$ adb get-serialno          # 得到設備的序列號
$ adb get-state             # 得到設備的狀態

使用adb連接目標系統終端的方式如下所示:

$ adb shell

在shell后面可以直接附加目標機的命令行程序,表示直接執行一個命令。

使用adb抓取目標系統的log的方法如下所示:

$ adb logcat

使用adb安裝應用程序的方法如下所示:

$ adb install XXX.apk
$ adb uninstall {應用程序的包名}

如果需要更新已經安裝的包,也就是重新安裝包,需要增加-r參數。使用-s則表示安裝到SD卡,不使用表示安裝到內部存儲器。

使用adb在主機和目標機之間傳送文件的方法如下所示:

$ adb push {host_path} {target_path}
$ adb pull {target_path} {host_path}

push表示從主機向目標機傳送文件,pull表示從目標機向主機傳送文件,二者的參數都是源對象在前,目的對象在后。

當已經有多個設備連接到主機時,可以使用-s參數進行選擇,方法如下所示:

$ adb -s <設備> <命令>

其中,<設備>為adb devices列出的內容,<命令>為任意可執行的命令。除此之外,-d表示只通過USB連接,-e表示只連接仿真器。

fastboot則是一個具有特殊功能的協議,它是一個連接重新燒寫系統的工具。fastboot通常需要Android設備方面的BootLoader中具有fastboot協議的支持。

fastboot幾個控制命令如下所示:

$ fastboot devices                  # 查看當前連接的設備
$ fastboot reboot                   # 正常重新啟動系統
$ fastboot reboot-bootloader       # 重新啟動系統到BootLoader階段

fastboot幾個和燒寫有關的命令如下所示:

$ fastboot flashall                             # 燒寫所有的分區
$ fastboot flash <partition> [ <filename> ]    # 指定燒寫一個分區
$ fastboot erase <partition>                    # 擦除一個分區

fastboot也可以通過-s參數指定操作某個連接的設備。

mksdcard命令幫助創建磁盤映像(disk image),可以在模擬器環境下使用磁盤映像來模擬外部存儲卡(如SD卡)。例如,創建一個256MB映像文件的方法如下所示:

$ mksdcard 256M mmc_disk

mksdcard創建的是fat32格式的磁盤映像,這個磁盤映像可以作為啟動仿真器時的-sdcard后面指定的參數。

aapt為Android資產打包工具(Android Asset Packaging Tool),用于查看和生成zip格式的包;aidl工具則用于自動將Android中特定的aidl接口描述文件生成Java代碼;zipalign用于優化Android中應用程序包。它們都是在編譯的過程中被編譯系統自動調用的。

性能跟蹤工具(Traceview),Dalvik調試監視器服務(Dalvik Debug Monitor Service)和層級觀察器(Hierarchy Viewer)提供了圖形化的界面,是較為復雜的工具。

主站蜘蛛池模板: 东宁县| 社旗县| 丰镇市| 宿松县| 玉树县| 寿光市| 河间市| 石渠县| 平潭县| 潼南县| 石河子市| 库车县| 鞍山市| 茂名市| 喀什市| 拜城县| 泽库县| 齐齐哈尔市| 临高县| 曲松县| 永济市| 白朗县| 阿拉尔市| 麟游县| 离岛区| 梁河县| 左云县| 安国市| 东乌珠穆沁旗| 浠水县| 永靖县| 上思县| 浦江县| 铜山县| 陇南市| 偃师市| 奉新县| 大城县| 东丽区| 德江县| 香河县|