欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Android 国内代码下载编译

程序员文章站 2022-06-24 19:49:01
1.安装操作系统安装操作系统 Ubuntuubuntu-16.04.6-desktop-amd64.iso ubuntu-19.10-desktop-amd64.isoRedhat CentOS 和 Fedora 不是 Android 源码官方推荐。使用Ubuntu,,PC机不要使用虚拟机,太慢分硬盘分大一点500G 可以多编译几个Android2.装Android编译环境依赖包apt-get install git-core gnupg flex bison gperf buil...

1.安装操作系统

安装操作系统 Ubuntu

ubuntu-16.04.6-desktop-amd64.iso

ubuntu-19.10-desktop-amd64.iso

Redhat CentOS 和 Fedora 不是 Android 源码官方推荐,请使用Ubuntu,PC机不要使用虚拟机,太慢

分硬盘分大一点500G 可以多编译几个Android

2.装Android编译环境依赖包

apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

3.清华园AOSP镜像站下repo

下载repo

mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
cp  repo ~/bin/
chmod a+x ~/bin/repo

export一下

repo的运行过程中会尝试访问官方的git源更新自己,如果想使用tuna的镜像源进行更新,可以将如下内容复制到你的~/.bashrc里或者/etc/profile /etc/profile.d/里,怎么方便看你喜好。

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

 如放在.bashrc里重启终端

4.下载代码

传统初始化方法:

//建立目录
mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY

//初始化
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest

//初始化特定版本
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-6.0.1_r61

//同步源码树
repo sync

遇到错误,重新多 repo sync 几把即可

remote: Total 107366 (delta 0), reused 0 (delta 0)          
接收对象中: 100% (107366/107366), 5.78 GiB | 1.03 MiB/s, 完成.
处理 delta 中: 100% (73443/73443), 完成. 2.06 MiB/s      
Fetching projects:  66% (8/12) platform/prebuilts/ndk接收对象中:  79% (1848/2319remote: Total 2319 (delta 0), reused 0 (delta 0)        
接收对象中: 100% (2319/2319), 15.37 GiB | 3.15 MiB/s, 完成.
处理 delta 中: 100% (572/572), 完成.
Fetching projects:  75% (9/12), done.
remote: Counting objects: 79416, done.        
remote: Counting objects: 62283, done.        
remote: Counting objects: 111002, done.        8 MiB/s   
remote: Compressing objects: 100% (46/46), done.        
error: RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.
fatal: 远端意外挂断了
fatal: 过早的文件结束符(EOF)
fatal: index-pack 失败
error: RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.
fatal: 远端意外挂断了
fatal: 过早的文件结束符(EOF)
fatal: index-pack 失败
error: Cannot fetch platform/prebuilts/tools (UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 2578: ordinal not in range(128))
error: Cannot fetch platform/prebuilts/gradle-plugin (UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 47: ordinal not in range(128))
Exception in thread Thread-933:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/mnt/opt/android6/.repo/repo/subcmds/sync.py", line 305, in _FetchProjectList
    success = self._FetchHelper(opt, project, *args, **kwargs)
  File "/mnt/opt/android6/.repo/repo/subcmds/sync.py", line 351, in _FetchHelper
    clone_filter=clone_filter)
  File "/mnt/opt/android6/.repo/repo/project.py", line 1546, in Sync_NetworkHalf
    clone_filter=clone_filter, retry_fetches=retry_fetches):
  File "/mnt/opt/android6/.repo/repo/project.py", line 2559, in _RemoteFetch
    print('%s:\n%s' % (self.name, gitcmd.stdout), file=sys.stderr)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 2578: ordinal not in range(128)

Exception in thread Thread-934:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/mnt/opt/android6/.repo/repo/subcmds/sync.py", line 305, in _FetchProjectList
    success = self._FetchHelper(opt, project, *args, **kwargs)
  File "/mnt/opt/android6/.repo/repo/subcmds/sync.py", line 351, in _FetchHelper
    clone_filter=clone_filter)
  File "/mnt/opt/android6/.repo/repo/project.py", line 1546, in Sync_NetworkHalf
    clone_filter=clone_filter, retry_fetches=retry_fetches):
  File "/mnt/opt/android6/.repo/repo/project.py", line 2559, in _RemoteFetch
    print('%s:\n%s' % (self.name, gitcmd.stdout), file=sys.stderr)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 47: ordinal not in range(128)

remote: Total 79416 (delta 0), reused 0 (delta 0)         
接收对象中: 100% (79416/79416), 4.98 GiB | 1.83 MiB/s, 完成.
处理 delta 中: 100% (26719/26719), 完成.
Fetching projects:  33% (1/3), done.
remote: Counting objects: 62283, done.        
remote: Total 62283 (delta 0), reused 0 (delta 0)            
接收对象中: 100% (62283/62283), 3.22 GiB | 2.42 MiB/s, 完成.
处理 delta 中: 100% (15522/15522), 完成.
remote: Counting objects: 111002, done.        
remote: Compressing objects: 100% (46/46), done.        
error: RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.
fatal: 远端意外挂断了
fatal: 过早的文件结束符(EOF)
fatal: index-pack 失败
Fetching projects:  50% (1/2) platform/prebuilts/gradle-pluginerror: Cannot fetch platform/prebuilts/tools (UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 2534: ordinal not in range(128))
Exception in thread Thread-939:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/mnt/opt/android6/.repo/repo/subcmds/sync.py", line 305, in _FetchProjectList
    success = self._FetchHelper(opt, project, *args, **kwargs)
  File "/mnt/opt/android6/.repo/repo/subcmds/sync.py", line 351, in _FetchHelper
    clone_filter=clone_filter)
  File "/mnt/opt/android6/.repo/repo/project.py", line 1546, in Sync_NetworkHalf
    clone_filter=clone_filter, retry_fetches=retry_fetches):
  File "/mnt/opt/android6/.repo/repo/project.py", line 2559, in _RemoteFetch
    print('%s:\n%s' % (self.name, gitcmd.stdout), file=sys.stderr)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 2534: ordinal not in range(128)

Fetching projects:  50% (1/2), done.
remote: Counting objects: 111002, done.        
remote: Compressing objects: 100% (46/46), done.        
remote: Total 111002 (delta 22), reused 115 (delta 22)        
接收对象中: 100% (111002/111002), 26.75 GiB | 3.78 MiB/s, 完成.
处理 delta 中: 100% (49027/49027), 完成.
Fetching projects: 100% (1/1), done.
正在检出文件: 100% (2596/2596), 完成.
Checking out projects:   1% (5/454) platform/build正在检出文件:  12% (1226/9676)正在检出文件: 100% (9676/9676), 完成.
正在检出文件: 100% (5699/5699), 完成.
Checking out projects:   2% (10/454) platform/developers/docs正在检出文件:  91% 正在检出文件: 100% (4313/4313), 完成.
正在检出文件: 100% (11736/11736), 完成.
Checking out projects:  14% (64/454) platform/external/ceres-solver正在检出文件:正在检出文件: 100% (2101/2101), 完成.
正在检出文件: 100% (10613/10613), 完成.
Checking out projects:  15% (69/454) platform/external/cmockery正在检出文件:  11正在检出文件: 100% (2067/2067), 完成.
Checking out projects:  17% (78/454) platform/external/donuts正在检出文件:  39% 正在检出文件: 100% (1317/1317), 完成.
Checking out projects:  24% (109/454) platform/external/gtest正在检出文件:   9% 正在检出文件: 100% (7397/7397), 完成.
Checking out projects:  37% (168/454) platform/external/libxml2正在检出文件:  34正在检出文件: 100% (3493/3493), 完成.
Checking out projects:  38% (173/454) platform/external/lldb正在检出文件:   5% (正在检出文件: 100% (17133/17133), 完成.
Checking out projects:  39% (178/454) platform/external/marisa-trie正在检出文件:正在检出文件: 100% (4095/4095), 完成.
Checking out projects:  46% (209/454) platform/external/ppp正在检出文件:  97% (7正在检出文件: 100% (755/755), 完成.
Checking out projects:  48% (218/454) platform/external/selinux正在检出文件:  68正在检出文件: 100% (3504/3504), 完成.
Checking out projects:  52% (237/454) platform/external/tinyxml正在检出文件:  24正在检出文件: 100% (4367/4367), 完成.
Checking out projects:  55% (250/454) platform/external/xmp_toolkit正在检出文件:正在检出文件: 100% (26633/26633), 完成.
Checking out projects:  62% (282/454) platform/frameworks/opt/telephony正在检出正在检出文件: 100% (2436/2436), 完成.
Checking out projects:  82% (373/454) platform/packages/apps/QuickSearchBox正在正在检出文件: 100% (2106/2106), 完成.
Checking out projects:  84% (382/454) platform/packages/apps/TvSettings正在检出正在检出文件: 100% (3166/3166), 完成.
Checking out projects:  86% (391/454) platform/packages/providers/ContactsProvidChecking out projects:  87% (395/454) platform/packages/providers/TelephonyProviChecking out projects:  90% (409/454) platform/packages/wallpapers/NoiseField正正在检出文件: 100% (64/64), 完成.
Checking out projects:  91% (414/454) platform/prebuilts/clang/darwin-x86/host/3正在检出文件: 100% (742/742), 完成.
正在检出文件: 100% (263/263), 完成.
Checking out projects:  92% (418/454) platform/prebuilts/gcc/darwin-x86/aarch64/正在检出文件: 100% (205/205), 完成.件:  41% (86/205)   
正在检出文件: 100% (111/111), 完成.
正在检出文件: 100% (242/242), 完成.
Checking out projects:  93% (423/454) platform/prebuilts/gcc/darwin-x86/mips/mip正在检出文件: 100% (269/269), 完成.:   9% (25/269)   
正在检出文件: 100% (273/273), 完成.
正在检出文件: 100% (209/209), 完成.
Checking out projects:  94% (427/454) platform/prebuilts/gcc/linux-x86/arm/arm-l正在检出文件: 100% (3202/3202), 完成.% (1413/3202)   
正在检出文件: 100% (3539/3539), 完成.
正在检出文件: 100% (4198/4198), 完成.
正在检出文件: 100% (270/270), 完成.
Checking out projects:  95% (432/454) platform/prebuilts/gcc/linux-x86/x86/x86_6正在检出文件: 100% (11831/11831), 完成.2536/11831)   
正在检出文件: 100% (2518/2518), 完成.
正在检出文件: 100% (1697/1697), 完成.
Checking out projects:  96% (436/454) platform/prebuilts/misc正在检出文件:   9% 正在检出文件: 100% (72214/72214), 完成.
正在检出文件: 100% (3552/3552), 完成.
正在检出文件: 100% (52/52), 完成.
正在检出文件: 100% (1368/1368), 完成.
Checking out projects:  97% (441/454) platform/prebuilts/sdk正在检出文件:   2% (正在检出文件: 100% (3838/3838), 完成.
Checking out projects:  99% (450/454) platform/system/netd正在检出文件:  44% (8/正在检出文件: 100% (18/18), 完成.
Checking out projects: 100% (454/454), done.

error: Unable to fully sync the tree.
error: Downloading network changes failed.
error: Checking out local projects failed.
Try re-running with "-j1 --fail-fast" to exit at the first error.
root@mayaoyao-Precision-Tower-5810:/mnt/opt/android6# repo sync
repo: warning: Python 2 is no longer supported; Please upgrade to Python 3.6+.

... A new version of repo (2.8) is available.
... You should upgrade soon:
    cp /mnt/opt/android6/.repo/repo/repo /usr/bin/repo

remote: Counting objects: 12, done.        
remote: Compressing objects: 100% (10/10), done.        
remote: Total 12 (delta 4), reused 0 (delta 0)        
Fetching projects:   2% (10/454) platform/external/google-fonts/carrois-gothic-sFetching projects:   5% (23/454) device/lge/hammerhead-kernelremote: Counting objects: 13, done.        
remote: Compressing objects: 100% (12/12), done.        
remote: Total 13 (delta 1), reused 7 (delta 1)        
Fetching projects:   6% (28/454) platform/artremote: Counting objects: 12, done.        
remote: Compressing objects: 100% (12/12), done.        
remote: Total 12 (delta 1), reused 9 (delta 0)        
Fetching projects:  15% (69/454) platform/packages/apps/Bluetoothremote: Counting objects: 94, done.        
remote: Compressing objects: 100% (94/94), done.        
remote: Total 94 (delta 35), reused 0 (delta 0)        
Fetching projects:  21% (96/454) platform/prebuilts/ndkremote: Counting objects: 7, done.        
remote: Compressing objects: 100% (7/7), done.        
remote: Total 7 (delta 4), reused 0 (delta 0)        
Fetching projects:  26% (119/454) platform/external/dhcpcdremote: Counting objects: 29, done.        
remote: Compressing objects: 100% (29/29), done.        
Fetching projects:  29% (132/454) platform/system/netdremote: Counting objects: 121, done.        
remote: Compressing objects: 100% (113/113), done.        
remote: Total 121 (delta 22), reused 23 (delta 6)        
接收对象中: 100% (121/121), 443.68 KiB | 827.00 KiB/s, 完成.
处理 delta 中: 100% (22/22), 完成.
Fetching projects:  30% (137/454) platform/external/webrtcremote: Counting objects: 14, done.        
remote: Compressing objects: 100% (13/13), done.        
remote: Total 14 (delta 3), reused 5 (delta 0)        
remote: Counting objects: 182, done.        
remote: Compressing objects: 100% (108/108), done.        
remote: Total 182 (delta 66), reused 121 (delta 46)        
接收对象中: 100% (182/182), 155.66 KiB | 714.00 KiB/s, 完成.
处理 delta 中: 100% (66/66), 完成.
remote: Total 29 (delta 24), reused 0 (delta 0)        
remote: Counting objects: 56044, done.        
remote: Compressing objects: 100% (12377/12377), done.        
Fetching projects:  31% (141/454) platform/frameworks/base接收对象中:  15% (8407remote: Counting objects: 16, done.        1.10 MiB/s    
remote: Compressing objects: 100% (16/16), done.        
remote: Total 16 (delta 11), reused 1 (delta 0)        
Fetching projects:  32% (146/454) platform/hardware/intel/common/wrs_omxil_coreFetching projects:  33% (150/454) platform/prebuilts/gcc/linux-x86/x86/x86_64-liFetching projects:  34% (155/454) platform/external/google-tv-pairing-protocol接Fetching projects:  35% (159/454) platform/hardware/broadcom/libbt接收对象中:  6Fetching projects:  36% (164/454) platform/external/nanopb-c接收对象中:  75% (42Fetching projects:  37% (168/454) platform/external/netcat接收对象中:  98% (5492remote: Total 56044 (delta 44349), reused 55329 (delta 43639)        
接收对象中: 100% (56044/56044), 16.61 MiB | 1.10 MiB/s, 完成.
remote: Counting objects: 16, done.        
remote: Compressing objects: 100% (12/12), done.        
remote: Total 16 (delta 5), reused 13 (delta 4)        
Fetching projects:  38% (173/454) device/generic/x86_64处理 delta 中:  63% (2837Fetching projects:  39% (178/454) platform/external/mp4parser处理 delta 中:  84%remote: Counting objects: 8, done.        
remote: Compressing objects: 100% (8/8), done.        
remote: Total 8 (delta 0), reused 7 (delta 0)        
处理 delta 中: 100% (44349/44349), 完成 389 个本地对象.
Fetching projects:  45% (205/454) platform/prebuilts/gcc/linux-x86/host/x86_64-wFetching projects:  48% (218/454) platform/hardware/qcom/sensorsremote: Counting objects: 15, done.        
remote: Compressing objects: 100% (15/15), done.        
remote: Total 15 (delta 13), reused 0 (delta 0)        
Fetching projects:  49% (223/454) platform/packages/providers/UserDictionaryProviderremote: Counting objects: 10, done.        
remote: Compressing objects: 100% (10/10), done.        
remote: Total 10 (delta 7), reused 0 (delta 0)        
Fetching projects:  57% (259/454) platform/system/mediaremote: Counting objects: 18, done.        
remote: Compressing objects: 100% (10/10), done.        
remote: Total 18 (delta 6), reused 0 (delta 0)        
Fetching projects:  59% (268/454) platform/hardware/broadcom/wlanremote: Counting objects: 57, done.        
remote: Compressing objects: 100% (57/57), done.        
remote: Total 57 (delta 38), reused 0 (delta 0)        
Fetching projects:  62% (282/454) platform/external/apache-harmonyremote: Counting objects: 7, done.        
remote: Compressing objects: 100% (5/5), done.        
remote: Total 7 (delta 2), reused 5 (delta 2)        
Fetching projects:  64% (291/454) platform/external/libpcapremote: Counting objects: 4, done.        
remote: Compressing objects: 100% (4/4), done.        
remote: Total 4 (delta 2), reused 0 (delta 0)        
Fetching projects:  67% (305/454) platform/external/oauthremote: Counting objects: 1216, done.        
remote: Compressing objects: 100% (689/689), done.        
remote: Total 1216 (delta 229), reused 1024 (delta 170)        
接收对象中: 100% (1216/1216), 713.19 KiB | 1.16 MiB/s, 完成.
处理 delta 中: 100% (229/229), 完成.
Fetching projects:  72% (327/454) platform/frameworks/opt/widgetremote: Counting objects: 57, done.        
remote: Compressing objects: 100% (57/57), done.        
remote: Total 57 (delta 44), reused 0 (delta 0)        
Fetching projects:  77% (350/454) platform/bionicremote: Counting objects: 586, done.        
remote: Compressing objects: 100% (272/272), done.        
Fetching projects:  78% (355/454) platform/packages/apps/CarrierConfigremote: Counting objects: 598, done.        
remote: Compressing objects: 100% (269/269), done.        
remote: Total 598 (delta 496), reused 430 (delta 329)        
接收对象中: 100% (598/598), 97.74 KiB | 1.21 MiB/s, 完成.
处理 delta 中: 100% (496/496), 完成 105 个本地对象./s   
Fetching projects:  79% (359/454) platform/prebuilts/gcc/linux-x86/arm/arm-eabi-remote: Total 586 (delta 360), reused 410 (delta 310)        
接收对象中: 100% (586/586), 1.34 MiB | 743.00 KiB/s, 完成.
处理 delta 中: 100% (360/360), 完成.
Fetching projects:  81% (368/454) platform/developers/samples/androidremote: Counting objects: 4, done.        
remote: Compressing objects: 100% (4/4), done.        
remote: Total 4 (delta 3), reused 0 (delta 0)        
Fetching projects:  88% (400/454) platform/packages/apps/CellBroadcastReceiverremote: Counting objects: 12, done.        
remote: Compressing objects: 100% (12/12), done.        
remote: Total 12 (delta 10), reused 0 (delta 0)        
Fetching projects:  89% (405/454) platform/packages/apps/CertInstallerremote: Counting objects: 437, done.        
remote: Compressing objects: 100% (404/404), done.        
remote: Total 437 (delta 23), reused 418 (delta 15)        
接收对象中: 100% (437/437), 150.28 KiB | 57.00 KiB/s, 完成.
处理 delta 中: 100% (23/23), 完成.
Fetching projects:  96% (436/454) platform/external/pcreremote: Counting objects: 43, done.        
remote: Compressing objects: 100% (38/38), done.        
remote: Total 43 (delta 17), reused 5 (delta 0)        
Fetching projects:  98% (445/454) device/sampleremote: Counting objects: 10, done.        
remote: Compressing objects: 100% (10/10), done.        
remote: Total 10 (delta 1), reused 0 (delta 0)        
Fetching projects: 100% (454/454), done.
Checking out projects:  86% (391/454) platform/packages/providers/ContactsProvidChecking out projects:  87% (395/454) platform/packages/providers/TelephonyProviChecking out projects:  91% (414/454) platform/prebuilts/clang/darwin-x86/host/3Checking out projects:  92% (418/454) platform/prebuilts/gcc/darwin-x86/aarch64/Checking out projects:  93% (423/454) platform/prebuilts/gcc/darwin-x86/mips/mipChecking out projects:  94% (427/454) platform/prebuilts/gcc/linux-x86/arm/arm-lChecking out projects:  95% (432/454) platform/prebuilts/gcc/linux-x86/x86/x86_6Checking out projects: 100% (454/454), done.
repo sync has finished successfully.
root@mayaoyao-Precision-Tower-5810:/mnt/opt/android6# repo sync
repo: warning: Python 2 is no longer supported; Please upgrade to Python 3.6+.

... A new version of repo (2.8) is available.
... You should upgrade soon:
    cp /mnt/opt/android6/.repo/repo/repo /usr/bin/repo

Fetching projects:  37% (168/454) platform/packages/providers/PartnerBookmarksPrFetching projects:  45% (205/454) platform/prebuilts/gcc/linux-x86/host/x86_64-wFetching projects: 100% (454/454) platform/prebuilts/gcc/darwin-x86/host/i686-apFetching projects: 100% (454/454), done.
Checking out projects:  86% (391/454) platform/packages/providers/ContactsProvidChecking out projects:  87% (395/454) platform/packages/providers/TelephonyProviChecking out projects:  91% (414/454) platform/prebuilts/clang/darwin-x86/host/3Checking out projects:  92% (418/454) platform/prebuilts/gcc/darwin-x86/aarch64/Checking out projects:  93% (423/454) platform/prebuilts/gcc/darwin-x86/mips/mipChecking out projects:  94% (427/454) platform/prebuilts/gcc/linux-x86/arm/arm-lChecking out projects:  95% (432/454) platform/prebuilts/gcc/linux-x86/x86/x86_6Checking out projects: 100% (454/454), done.
repo sync has finished successfully.
root@mayaoyao-Precision-Tower-5810:/mnt/opt/android6# 

Android 源码大约120 -150G 耐心等待即可

root@mayaoyao-Precision-Tower-5810:/mnt/opt# du -sh *
121G	android6
1.6G	ubuntu-16.04.6-desktop-amd64.iso
2.3G	ubuntu-19.10-desktop-amd64.iso
root@mayaoyao-Precision-Tower-5810:/mnt/opt# 

下载以后的Android源码编译之前备份一把,以免编坏了重新撸代码

root@mayaoyao-Precision-Tower-5810:/mnt/opt# du -sh *
121G	android6
1.6G	ubuntu-16.04.6-desktop-amd64.iso
2.3G	ubuntu-19.10-desktop-amd64.iso
root@mayaoyao-Precision-Tower-5810:/mnt/opt# 

 安装OpenJDK

apt-get install openjdk-13-jdk

5.编译

本文地址:https://blog.csdn.net/weixin_41557838/article/details/108128018

相关标签: android