zoukankan      html  css  js  c++  java
  • 03、Android系统--Android4.4

    Android4.4

    准备工作

    硬件要求

    64位的操作系统只能编译2.3.x以上的版本,所以2.3.x以下的版本需要使用32位操作系统。

    磁盘的空间保持在200GB以上,编译会占用大量的硬盘空间。

    软件要求

    在AOSP开源中,主分支使用Ubuntu长期版本开发和测试的,因此推荐使用Ubuntu进行编译,下面列出不同版本的Ubuntu能够编译哪些Android版本:

    Android版本 编译要求的最低Ubuntu版本
    Android 6.0 Ubuntu 14.04
    Android 2.3.x至Android 5.x Ubuntu 12.04
    Android 1.5至Android 2.2.x Ubuntu 10.04

    除了操作系统外,JDK的版本也需要注意:

    Android版本 编译要求的JDK版本
    Android 5.x至Android6.0 OpenJDK 7
    Android 2.3.x至Android 4.4.x Oracle JDK 6
    Android 1.5至Android 2.2.x Oracle JDK 5

    搭建Android系统开发环境,我们这里如下版本的工具:

    虚拟机:VMware-workstation-full-15.5.0

    Linux系统:ubuntu-14.04.6-desktop-amd64(磁盘空间300G)

    连接工具:FinalShell或xShell

    Android系统:Android 4.4 API19 - KITKAT

    JDK版本:jdk-6u45-linux-x64

    安装VMware虚拟机并载入Ubuntu系统后,再来安装相应的软件。

    VIM编辑器

    安装VIM编辑器命令如下:

    sudo apt-get install vim-gtk
    

    SSH安装

    一般Ubuntu都会默认安装openssh-client,但是没有安装openssh-server。

    安装ssh服务器

    sudo apt install openssh-server
    

    安装ssh客户端

    sudo apt install openssh-client
    

    配置ssh客户端,去掉PasswordAuthentication yes前面的#号,保存退出

    sudo vim /etc/ssh/ssh_config
    

    配置ssh服务器,把PermitRootLogin prohibit-password改成PermitRootLogin yes,保存退出。

    sudo vim /etc/ssh/sshd_config
    

    重启ssh服务

    sudo /etc/init.d/ssh restart
    

    Root用户设置

    由于权限问题建议开启Root用户,命令如下:

    sudo passwd root
    

    然后输入两次密码即可完成Root用户的设置。

    JDK的安装

    由于这里要使用Android 4.4的系统,所以JDK必须选择1.6的版本,安装的流程如下:

    1) 在/usr/local目录下创建java文件夹,并将下载好的jdk-6u45-linux-x64.bin上传到java文件夹下:

    sudo mkdir java
    

    2)安装上传的JDK文件

    sudo chmod +x jdk-6u45-linux-x64.bin
    sudo ./jdk-6u45-linux-x64.bin
    

    3)设置jdk的环境变量,编辑profile文件:

    vim /etc/profile
    

    在profile文件的最后添加如下配置:

    JAVA_HOME=/usr/local/java/jdk1.6.0_45
    JRE_HOME=/usr/local/java/jdk1.6.0_45/jre
    CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
    PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
    

    然后更新环境变量的配置信息

    source /etc/profile
    

    最后输入如下指令来查看JDK是否安装和配置成功:

    java -version
    

    输出结果如下:

    Git的安装

    1) 检查git是否安装,输入git version命令即可,如果没有安装则可以使用如下命令安装:

    sudo apt-get install git
    

    使用apt-get安装的软件一般存放在临时文件以xxx.deb存在,如果想查看软件的安装位置,可以使用如下命令:

    dpkg -L git
    

    2) 配置git的账户名和密码信息

    git config --global user.name "Your Name"
    git config --global user.email "youremail@domain.com"
    

    3)创建仓库文件夹,这里创建android目录,在目录中放入README.md文件,并进行初始化操作

    cd ../../
    sodu mkdir android
    cd android
    git init
    

    4)现在仓库就初始化完成,后续需要添加远程仓库地址、拉取代码或者pull和push的操作都比较简单,常用命令如下:

    git commit -m "init commit"
    git remote add origin https://github.com/xxx.git
    git push origin master
    或者直接clone已经存在的仓库
    git clone https://github.com/xxx.git
    

    源码下载

    Repo是Google开发的用于管理Android版本库的一个工具。repo并不是用来取代Git,而是用Python对Git进行了一定的封装,简化了对多个Git版本库的管理。对应repo管理的任何一个版本库,都需要使用Git命令进行操作。

    首先安装下载clientgit curl,如果已经存在可以不下载

    sudo apt-get install curl git
    

    下面的操作出现任何问题请参考:

    https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

    Repo工具

    下载 repo 工具:

    mkdir ~/bin
    export PATH=~/bin:$PATH
    curl -sSL  'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
    chmod a+x ~/bin/repo
    

    Python下载

    一般Linux系统,这里是ubuntu系统会自带python环境,如果版本Python版本低于3.6则需要调整默认版本。

    whereis python		# 查看ubuntu系统中所有的python版本
    

    因为我们需要的python版本为3.6,此时版本低于36的话,我们需要安装3.6或高于3.6的版本。

    也可以重新安装python3.6,如果下载过程中超时的话,更换下载的源地址来下载:进入/etc/apt 先备份sources.list,然后改成如下内容:

    # 默认注释了源码仓库,如有需要可自行取消注释
    deb https://mirrors.ustc.edu.cn/ubuntu/ trusty main restricted universe multiverse
    # deb-src https://mirrors.ustc.edu.cn/ubuntu/ trusty main restricted universe multiverse
    
    deb https://mirrors.ustc.edu.cn/ubuntu/ trusty-security main restricted universe multiverse
    # deb-src https://mirrors.ustc.edu.cn/ubuntu/ trusty-security main restricted universe multiverse
    
    deb https://mirrors.ustc.edu.cn/ubuntu/ trusty-updates main restricted universe multiverse
    # deb-src https://mirrors.ustc.edu.cn/ubuntu/ trusty-updates main restricted universe multiverse
    
    deb https://mirrors.ustc.edu.cn/ubuntu/ trusty-backports main restricted universe multiverse
    # deb-src https://mirrors.ustc.edu.cn/ubuntu/ trusty-backports main restricted universe multiverse
    
    # 预发布软件源,不建议启用
    # deb https://mirrors.ustc.edu.cn/ubuntu/ trusty-proposed main restricted universe multiverse
    # deb-src https://mirrors.ustc.edu.cn/ubuntu/ trusty-proposed main restricted universe multiverse
    
    

    使用如下命令来安装新的python版本

    sudo add-apt-repository ppa:deadsnakes/ppa
    sudo apt-get update
    sudo apt-get install python3.6
    

    最后,通过命令来设置python新版本的优先级即可

    python --version
    update-alternatives --list python
    sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7  1
    sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.4  2
    sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6  3
    

    替代成后我们可以选择删除或保留不需要的版本

    update-alternatives --remove python /usr/bin/python3.4 
    rm -rf /data/logs
    ln -s  /temp/logs /data/logs
    

    源码同步

    在下载源码前,我们需要在如下网站选择相应的Android版本

    https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds

    选择相应的版本后,输入如下命令进行初始化:

    # 初始化操作,后面-b参数是相应的版本号
    repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-4.4.2_r1
    

    如果google的地址下载失败或无法下载,更改root下的repo的REPO_URL : https://gerrit-googlesource.proxy.ustclug.org/git-repo

    # repo default configuration
    #
    REPO_URL = os.environ.get('REPO_URL', None)
    if not REPO_URL:
      REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'
    REPO_REV = os.environ.get('REPO_REV')
    if not REPO_REV:
      REPO_REV = 'stable'
    # URL to file bug reports for repo tool issues.
    BUG_URL = 'https://bugs.chromium.org/p/gerrit/issues/entry?template=Repo+tool+issue'
    
    # increment this whenever we make important changes to this script
    VERSION = (2, 15)
    
    # increment this if the MAINTAINER_KEYS block is modified
    KEYRING_VERSION = (2, 3)
    
    # Each individual key entry is created by using:
    # gpg --armor --export keyid
    MAINTAINER_KEYS = """
    

    如果出现repo has been initialized in xxx 说明成功了,此时直接同步即可:

    repo sync
    

    目前使用清华的源下载速度只能达到4-5m,使用科大的源大概在40-50m左右。具体可以参考下面的网站:

    https://mirrors.ustc.edu.cn/help/aosp.html // 科大源
    https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ // 清华源

    编译和运行

    编译源码

    1)添加需要用到的依赖

    sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib 
    sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 
    sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
    sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 
    sudo apt-get install git-core gnupg flex bison gperf build-essential  
    sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib 
    sudo apt-get install libc6-dev-i386 
    sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev 
    sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
    sudo apt-get install lib32z-dev ccache
    

    2)初始化编译环境

    source build/envsetup.sh
    

    执行完成会出现如下图示:

    3)选择编译目标,就是选择编译出来的镜像运行在什么样的设备上

    lunch
    

    如下图所示:

    通过make指令进行代码编译,通过-j参数设置参与编译的线程数量来提高编译速度:

    make -j4
    

    如果中途出现错误很可能是文件同步不完全造成的,多同步几次即可。然后进入漫长的等待......

    至此,Android4.4系统编译完成,接下来在模拟器上运行该系统。然后在桌面命令行中运行如下命令即可运行:

    emulator
    

    注意:repo下载的时候需要的是python3.6,而系统编译需要的是python2.7,注意切换即可。

    错误记录

    1、emulator: command not found

    source build/envsetup.sh
    lunch
    

    2、SDL init failure, reason is: No available video device

    不要在ssh命令行输入,需要在XWindow桌面的命令行中输入emulator即可
    

    3、emulator: ERROR: No initial system image for this configuration!

    问题原因是由于没有编译成功,重新编译
    
  • 相关阅读:
    遮罩层可滚动
    toggle函数
    48.判断文本中回车的数量
    47.输出26个字母
    46.@弹出点击次数
    44.@鼠标点击页面中的任意标签,alert该标签的名称
    43.对象深度克隆
    UIscrollView 多图滑动 frame与bounds的区别比较
    累却真心充实 杂感
    delegate
  • 原文地址:https://www.cnblogs.com/pengjingya/p/15009445.html
Copyright © 2011-2022 走看看