2018年12月10日星期一

Android2.3源码学习02 -- 环境搭建

编译环境

AOSP源码只能在LinuxmacOS操作系统中编译,Android2.3及更高版本只支持64位环境。这里学习在Ubuntu 12.04LTS操作系统中搭建编译环境。

JDK

Android2.3源码编译需要Java JDK 6,详细的对应关系参看官方列表
目前JDK6已经无法通过官方源或PPA直接下载安装,需要手动从官网下载,且需要注册Oracle账户才能下载。下载地址:Java SE 6 Downloads
进入下载页面,勾选Accept License Agreement单选框,选择Linux版本安装包,点击下载,下载页面重定向到Oracle登录页面,注册新账户或使用已有的账户登录后即可下载JDK6安装包。
下载完成后,安装:
$ chmod a+x jdk-6u45-linux-x64.bin
$ ./jdk-6u45-linux-x64.bin
# 如果/usr/lib/jvm目录不存在,创建目录
$ sudo mkdir -p /usr/lib/jvm
$ sudo mv jdk1.6.0_45 /usr/lib/jvm/java-6-oracle

$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-6-oracle/bin/java 1
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-6-oracle/bin/javac 1
选择默认java版本:
$ sudo update-alternatives --set java /usr/lib/jvm/java-6-oracle/bin/java
update-alternatives: using /usr/lib/jvm/java-6-oracle/bin/java to provide /usr/bin/java (java) in manual mode.

$ sudo update-alternatives --set javac /usr/lib/jvm/java-6-oracle/bin/javac
update-alternatives: using /usr/lib/jvm/java-6-oracle/bin/javac to provide /usr/bin/javac (javac) in manual mode.

添加 PPA

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update

安装JDK6

$ sudo apt-get install oracle-java6-installer

设置默认JDK

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

gcc4.4、g++4.4

Ubuntu12.04LTS自带的gcc版本为4.6.3,需要安装4.4版本的gccg++
$ sudo apt-get install gcc-4.4 g++-4.4 gcc-4.4-multilib g++-4.4-multilib
切换默认版本:
$ sudo update-alternatives --remove-all gcc
$ sudo update-alternatives --remove-all g++
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 20
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 20

$ gcc --version
gcc (Ubuntu/Linaro 4.4.7-1ubuntu2) 4.4.7
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ g++ --version
g++ (Ubuntu/Linaro 4.4.7-1ubuntu2) 4.4.7
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

安装其他依赖

目前官方最新依赖包列表如下:
$ sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
其中,libgl1-mesa-glx:i386在我本地环境中安装提示:
The following packages have unmet dependencies:
 libgl1-mesa-glx:i386 : Depends: libglapi-mesa:i386 (= 8.0.4-0ubuntu0.7)
                        Recommends: libgl1-mesa-dri:i386 (>= 7.2)
E: Unable to correct problems, you have held broken packages.
从列表中移除,安装其他包,目前在我本地没发现问题,可以正常编译使用。

参考阅读

2018年1月1日星期一

Android2.3源码学习01 -- 下载源码

Android源码的开发、学习,官方推荐使用UbuntumacOs系统,下面在Ubuntu 12.04LTS中学习Android 2.3源码。
首先,下载Android源码到本地:

安装git

下载Android源码需要安装git工具:
$ sudo apt-get install git
$ git --version
git version 1.7.9.5

下载repo脚本

下载repo脚本到本地,并赋予可执行权限:
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
被墙可以使用国内镜像:
$ curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
$ chmod a+x ~/bin/repo

初始化工作目录

本地建立工作目录以便下载AOSP源码:

$ cd ~
$ mdir WORKING_DIRECTORY
$ export WORKING_DIRECTORY=~/WORKING_DIRECTORY # 设置工作目录环境变量,后面方便引用
$ cd $WORKING_DIRECTORY

初始化工作目录

初始化工作目录,下载代码仓库及BUG修复的列表,默认下载master分支:
$ repo init -u https://android.googlesource.com/platform/manifest
也可以使用-b指定分支:
$ repo init -u https://android.googlesource.com/platform/manifest -b android-2.3.7_r1
分支列表可以参看:Source Code Tags and Builds
被墙使用国内镜像:
首先修改repo脚本,将REPO_URL链接修改为:
REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
或者设置REPO_URL环境变量:
$ export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
然后执行repo init
# master
$ repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
# 分支
$ repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-2.3.7_r1
等待代码同步到本地,如果中断,下次直接执行同步命令,可以继续下载,不用重新开始。

已有仓库修改源

如果已经使用repo sync同步过代码,或者使用repo init初始化过工作目录,可以打开工作目录下配置文件.repo/manifests.git/config,将
url = https://android.googlesource.com/platform/manifest
修改为:
url = https://aosp.tuna.tsinghua.edu.cn/platform/manifest
即可切换仓库。

同步代码

执行同步命令:
$ repo sync

参考阅读

Android logcat

Log等级 Android log 等级在 android/log.h 中定义如下: typedef   enum   android_LogPriority {    /** For internal use only. */ ANDROID_LOG_UNKNOWN =...