android 源码_android源码 - CSDN
精华内容
参与话题
  • Android开发精典案例60个【源码

    千次下载 热门讨论 2020-07-28 23:32:54
    60个Android开发精典案例,好东西 - 给大家分享60个Android开发的精典案例,包含任务监听、设备适配,游戏框架搭建,特效实现,多点触控,网络协议,游戏关卡设置等内容。特别是做游戏开发的朋友值得研究。喜欢就拿...
  • Android 系统源码——下载到编译

    万次阅读 2020-09-30 15:19:26
    一直想下载、编译、调试一下Android源码 ,加强对一些framework的理解,搞了好多次,终于可以正常调试了。这里进行一些总结和分享。 Android源码到模拟器运行,主要有的四个步骤: 下载源码 搭建编译环境 准备...

    一直想下载、编译、调试一下Android源码 ,加强对一些framework的理解,搞了好多次,终于可以正常调试了。这里进行一些总结和分享。

    Android源码到模拟器运行,主要有的四个步骤:

    1. 下载源码
    2. 搭建编译环境
    3. 准备编译

    我使用的环境是Ubuntu16.04 、openJDK8、Android 8.0.0

    硬件软件要求

    官方文档:要求

    硬件要求:

    • 如果是 Android 2.3.x (Gingerbread) 及更高版本(包括 master 分支),需要使用 64 位环境。如果是较低的版本,则可以在 32 位系统中进行编译。
    • 如果要检出代码,至少需要 250GB 可用磁盘空间;如果要进行编译,则还需要 150GB。如果要进行多次编译,则需要更多空间。
    • 如果在虚拟机中运行 Linux,则至少需要 16GB 的 RAM/交换空间。

    我的电脑是双系统,ubuntu 空间划分不集中,分区空间不够,导致编译失败。我在实践过程中,发现不需要官方声明的那么多空间,下载初始化包.repo 40G左右,检出代码(Android 8.0.0),又占用了40G左右,编译用了60G左右。总共算下来160G的分区空间应该是够用了。

    一、 下载源码

    Android 源码是非常庞大的,而且每个模块都是用git来进行管理 ,整个Android源码是由很多个git项目构成,Google对Android代码的更新也是更新到相应模块的git项目上。

    那对于需要编译Android的开发者来说,要分别clone 每个git项目而且还要放到固定的位置确实是件惨绝人寰的事,所以Google就开发了一个基于Python编写的帮助开发者管理多个项目的工具,这个工具就叫repo,repo就是封装了git命令的python脚本。

    由于国内网络的原因,我们使用国内的清华源下载源码和repo工具

    1.1、下载repo

    下面的命令,是从清华源下载repo工具,这样脚本中的路径就是指向清华源的aosp

    mkdir ~/bin   # 在home下创建bin文件夹
    PATH=~/bin:$PATH   # 把bin文件夹加入环境变量的
    curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo  > ~/bin/repo #下载repo脚本
    chmod a+x ~/bin/repo #添加权限
    

    repo 工具讲解

    我们有个非常庞大的项目Pre,该项目由很多个子项目R1,R2,…Rn等组成,为了方便管理和协同开发,我们为每个子项目创立自己的仓库,整个项目的结构如下:

    在这里插入图片描述

    项目Pre进行分库的好处就是,只需要创建需要开发的模块分支,代码量减少了很多。检出的时候也可以只检出某一模块的代码。

    会遇到这么一个问题:如果我们想要创建Pre分支来做feature开发,这就意味着,我们需要到每个子项目中分别创建对应的分支,这个过程如果纯粹靠手工做,那简直是个灾难,于是会写个自动化处理程序(我们假设这个工具叫做RepoUtil)来帮助我们解决这个问题。这个RepoUtil也会有版本管理之类的需求,因此我们也用Git对其管理,并为其创建对应的仓库。此时整个项目的结构如下:

    在这里插入图片描述

    这里RepoUtil知道整个项目Pre下的每个子项目(即维护子项目的列表),同时提供对这些子项目的管理功能,比如统一创建分支等。但是从"单一职责"角度来看,RepoUitl这个工具的功能过于复杂,我们完全可以将维护子项目列表这个功能抽取出来作为一个新项目sub_projects,因为子项目也会变化。因此,为其创建对应的仓库,并用Git管理,RepoUtil只需要通过简单的对ub_projects进行依赖即可,此时整个项目的结构如下:
    在这里插入图片描述

    AOSP项目结构

    • .repo工具对应RepoUtil
    • mainfest对应sub_projects

    在mainfest文件夹中,执行git branch -a 就可以看到所有的分支

    1.2、下载源码

    下载源码有两种方法:

    1)Android 官方下载源代码

    官方文档:下载源代码

    2)使用初始化包(建议)

    初始化包每月都会进行更新,由于首次同步需要下载约 30GB 数据,如果上面的方法,过程中任何网络故障都可能造成同步失败,我第一次是使用官方的方法,失败过一次。后来都是用这个方法。

    下载 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar,下载完成后记得根据 checksum.txt 的内容校验一下。

    由于所有代码都是从隐藏的 .repo 目录中 checkout 出来的,所以我们只保留了 .repo 目录,下载后解压 再 repo sync 一遍即可得到完整的目录。

    使用方法如下:

    wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
    tar xf aosp-latest.tar
    cd AOSP   # 解压得到的 AOSP 工程目录
    # 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
    repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.0.1_r1 # 可选命令,指定版本,如果未指定,则使用最新的版本
    repo sync # 正常同步一遍即可得到完整目录
    # 或 repo sync -l 仅checkout代码
    

    Android各版本列表:https://source.android.google.cn/setup/start/build-numbers.html#source-code-tags-and-builds

    二、搭建编译环境

    官方文档:搭建编译环境

    安装openJDK8

    sudo apt-get update
    sudo apt-get install openjdk-8-jdk
    

    安装软件包

    官方文档没有介绍Ubuntu 16.04所需的软件包。使用Ubuntu 16.04的小伙伴,需要安装下面的软件

    sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib 
    sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 
    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 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
    
    

    三、准备编译

    设置环境

    使用 envsetup.sh 脚本初始化环境。请注意,将 source 替换成 .(一个点)可以省去一些字符,这种简写形式在文档中更为常用。

    source build/envsetup.sh
    

    或者

    . build/envsetup.sh
    

    选择目标

    使用 lunch 选择要编译的目标。确切的配置可作为参数进行传递。例如,以下命令表示针对模拟器进行完整编译,并且所有调试功能均处于启用状态。

    lunch aosp_arm-eng
    

    直接运行 lunch (没有参数),会列出所有支持的类型,输入对应的序号来进行选择。
    在这里插入图片描述

    所有编译目标都采用 BUILD-BUILDTYPE 形式,其中 BUILD 是表示特定功能组合的代号。BUILDTYPE 是以下类型之一:

    编译类型 使用情况
    user 权限受限;适用于生产环境
    userdebug 与“user”类似,但具有 root 权限和可调试性;是进行调试时的首选编译类型
    eng 具有额外调试工具的开发配置

    源码编译

    您可以使用 make 编译任何代码。GNU make 可以借助 -jN 参数处理并行任务,通常使用的任务数 N 介于编译时所用计算机上硬件线程数的 1-2 倍之间。例如,在一台双核 E5520 计算机(2 个 CPU,每个 CPU 4 个内核,每个内核 2 个线程)上,要实现最快的编译速度,可以使用介于 make -j16 到 make -j32 之间的命令。

    make -j4
    

    如果编译完一个版本后想重新编译一个,可以使用 make clobber清除之前编译生成的文件。我们编译产生的文件都在 out文件夹下。

    启动模拟器

    编译成功后,输入emulator可启动模拟器

    四、如何查看源码的版本

    方法一:

    每次执行完lunch后下次进入基本就忘记上次编译的参数设置,可以使用printconfig命令显示当前的设置

    方法二:

    1、 从代码中查看当前版本,找到如下文件

    build\make\core\version_defaults.mk
    

    搜索关键字 PLATFORM_VERSION

    # This is the canonical definition of the platform version,
    # which is the version that we reveal to the end user.
    # Update this value when the platform version changes (rather
    # than overriding it somewhere else).  Can be an arbitrary string.
    
    # When you add a new PLATFORM_VERSION which will result in a new
    # PLATFORM_SDK_VERSION please ensure you add a corresponding isAtLeast*
    # method in the following java file:
    # frameworks/support/compat/gingerbread/android/support/v4/os/BuildCompat.java
    
    # When you change PLATFORM_VERSION for a given PLATFORM_SDK_VERSION
    # please add that PLATFORM_VERSION to the following text file:
    # cts/tests/tests/os/assets/platform_versions.txt
    PLATFORM_VERSION.OPR1 := 8.0.0
    

    五、错误及解决方法

    由于在Ubuntu上开发,很多常用软件都没有,所以后来又在mac上编译源码,遇到不少问题,下面来分享一下

    错误 1、Could not find a supported mac sdk: [“10.10” “10.11” “10.12” “10.13” “10.14”]

    两种解决方法:

    1. 把当前系统有的sdk 版本,加入到这个列表中
    2. 下载列表中的sdk

    具体操作,下载地址,可以参考这里

    错误 2、在mac 10.15.4 上编译Android 8.0.0_r1 ,出现bad cpu type in executable

    这篇文章 也遇到这个错误,但是报错细节、Android版本号 和我的不一样,所以我暂时没有去尝试

    在苹果官网看到 关于bad cpu type in executable 回复 的,

    想了一下,既然Mac 10.15 支持64位,不支持32位,那就用新版Android吧,免得Android 8.0.0_r1 上越改问题越多

    错误3、在mac 10.15.4上编译Android10.0.0_r1,

    Android10.0.0_r1 是支持64位的,但是在编译过程中一定会遇到这个错误

    FAILED: build out/target/product/generic_x86_64/obj/ETC/sepolicy_tests_intermediates/sepolicy_tests
    Outputs: out/target/product/generic_x86_64/obj/ETC/sepolicy_tests_intermediates/sepolicy_tests
    Error: exited with code: 1
    Command: /bin/bash -c "(out/host/darwin-x86/bin/sepolicy_tests -l out/host/darwin-x86/lib64/libsepolwrap.dylib       -f out/target/product/generic_x86_64/obj/ETC/plat_file_contexts_intermediates/plat_file_contexts  -f out/target/product/generic_x86_64/obj/ETC/vendor_file_contexts_intermediates/vendor_file_contexts  -p out/target/product/generic_x86_64/obj/ETC/sepolicy_intermediates/sepolicy ) && (touch out/target/product/generic_x86_64/obj/ETC/sepolicy_tests_intermediates/sepolicy_tests )"
    Output:
    /bin/bash: line 1: 28159 Segmentation fault: 11  ( out/host/darwin-x86/bin/sepolicy_tests -l out/host/darwin-x86/lib64/libsepolwrap.dylib -f out/target/product/generic_x86_64/obj/ETC/plat_file_contexts_intermediates/plat_file_contexts -f out/target/product/generic_x86_64/obj/ETC/vendor_file_contexts_intermediates/vendor_file_contexts -p out/target/product/generic_x86_64/obj/ETC/sepolicy_intermediates/sepolicy )
    

    这个错误是与mac 10.15 兼容问题,可通过这个临时解决

    make SELINUX_IGNORE_NEVERALLOWS=true
    

    还有个官方方案,打上下面的patch:(我是使用这个方法解决的)
    1f944107a3341ab593c93bbdf09e22436cc0e3d3

    官方就是修改 system/sepolicy/tests/Android.bp 去掉stl: “libc++_static”,

    下面这个是Catalina MacOS SDK 10.15的patch:
    89dad60ed5ec30b0f732b612d454151abdb4e449

    出自这篇文章:AOSP SELinux error

    错误4、Mac 下编译 关于 文件格式

    注意在mac 上编译,磁盘格式最好使用 Mac OS扩展(区分大小写,日志式),我在APFS 上解压aosp-laster.rar、同步代码、编译,完整操作了两次都不行。遇到同样的错误,也没再网上找到答案。也有可能是其它原因,按照官方的最好

    六、使用Android studio 查看源码

    Android Studio 导入 Android 源码

    IntelliJ IDEA导入Android源码

    注意:执行命令的时候,需要在bash 环境下,不能再zsh 环境下

    参考:
    官方文档:准备编译
    自己动手编译Android源码(超详细)
    Android 源码下载 到 编译全过程
    从源码中查看当前android版本
    android aosp编译的一些辅助命令

    展开全文
  • Android系统源码下载

    2020-07-30 23:33:23
    Android系统源码, 包含2.1以及4.0-8.0,没有最新的9.0,后续有的话会重新提交更新。
  • Android源码下载(包括最新8.0版本)

    万次阅读 多人点赞 2018-02-08 11:30:55
    终于建了一个自己个人小站:https://huangtianyu.gitee.io,...android-2.2_r1 链接: https://pan.baidu.com/s/1qYfwxEO 密码: r217 android-2.3.7_r1 链接: https://pan.baidu.com/s/1qYqRB1E 密码: qcei ...

    终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~

    android-2.2_r1

    链接: https://pan.baidu.com/s/1qYfwxEO 密码: r217

    android-2.3.7_r1

    链接: https://pan.baidu.com/s/1qYqRB1E 密码: qcei

    android-4.1.1_r1

    链接: https://pan.baidu.com/s/1mhXwVgc 密码: qidj

    android-4.3_r1

    链接: https://pan.baidu.com/s/1geOJDB1 密码: 355a

    android-4.4.4_r1

    链接: https://pan.baidu.com/s/1nuZwEVn 密码: t3qw

    android-wear-5.1.1_r1

    链接: https://pan.baidu.com/s/1hrQJ6XQ 密码: 3g3x

    android-6.0.0_r1

    链接: https://pan.baidu.com/s/1geHYeOz 密码: fsd6

    android-6.0.1_r72

    链接: https://pan.baidu.com/s/1skEVR1F 密码: ik6t

    android-7.1.1_r1

    链接: https://pan.baidu.com/s/1dF6hc3n 密码: pfsq

    android-8.0.0_r1

    链接: https://pan.baidu.com/s/1bqKNx3x 密码: bthv
      先上传这么多,如果有其他版本源码下载需求,我也可以压缩后上传。后续会持续加进一些新的源码。

    展开全文
  • Android源码在线查看网站

    千次阅读 2020-01-17 10:33:42
    安卓社区 https://www.androidos.net.cn/sourcecode (推荐) AndroidXRef http://androidxref.com/ 安卓特性(包括历史版本): https://developer.android.google.cn/

    安卓社区

    https://www.androidos.net.cn/sourcecode   (推荐)

    AndroidXRef  

    http://androidxref.com/

    安卓特性(包括历史版本):

    https://developer.android.google.cn/

    展开全文
  • 八个Android项目源码

    万次阅读 多人点赞 2017-05-24 16:52:00
    给大家分享几个Android开发项目源码,大部分功能相信可以在实战项目中直接使用,供大家下载学习,大部分项目是基于 Android Studio开发,IDE为Eclipse的童鞋可通过网上教程自行转换,这里就不多说了。有句话说,不贴...

    Android项目源码分享


    给大家分享几个Android开发项目源码,大部分功能相信可以在实战项目中直接使用,供大家下载学习,大部分项目是基于

    Android Studio开发,IDE为Eclipse的童鞋可通过网上教程自行转换,这里就不多说了。


    源码项目一:




    源码项目二:




    源码项目三:




    源码项目四:




    源码项目五:

        



    源码项目六:




    源码项目七:

        



       



    源码项目八:

           


    下载链接

    百度云盘链接: http://pan.baidu.com/s/1i3ph1fJ  密码: 99rc



    附:之前也转载了一份干货,也一并来个链接吧!

    (Android源码大放送) http://blog.csdn.net/gao_chun/article/details/47187017

    22个值得收藏的android开源代码-UI篇http://blog.csdn.net/gao_chun/article/details/46809051

    (Android开源项目第三篇——优秀项目篇)http://blog.csdn.net/gao_chun/article/details/45561293

    (Android开源项目第一篇——个性化控件(View)篇)http://blog.csdn.net/gao_chun/article/details/45560191



    展开全文
  • 自己动手编译Android源码(超详细) 涅槃1992 2016.06.20 02:12* 字数 43...
  • 如何学习Android系统源码

    千次阅读 2018-05-22 12:16:37
    Android系统的源代码非常庞大和复杂,我们不能贸然进入,否则很容易在里面迷入方向,进而失去研究它的信心。我们应该在分析它的源代码之前学习好一些理论知识,下面就介绍一些与Android系统相关的资料。 我们知道,...
  • 如何快速阅读并分析Android源码

    千次阅读 2019-04-11 11:09:21
    很多时候为了解决一个问题必须先理解Android系统的运行原理,这...那么,如何阅读并分析Android源码呢? 这里我只讲一些初级的、基础的方法,很快就可以上手,不需要下载和编译系统源码。 我们下载Android SDK的时...
  • 平时我们在用Android Studio开发项目的时候,如果想要查看源码,直接 Ctrl + 左键 查看对应的源码,你可能会发现有一些具体源码看不到,或者部分代码飘红。我们就来说说这一部分。
  • Android 源代码分享

    万次阅读 多人点赞 2016-08-17 09:07:08
    Android 超过2个G的源代码集合~~各种功能实现,应有尽有~~云盘地址:http://yunpan.cn/cQbKArfxFniuS (提取码:f930) Android 好用的源码 Android 酷炫源码
  • 50个Android开发人员必备UI效果源码[转载]

    万次阅读 多人点赞 2012-11-04 12:08:56
    Android 仿微信之主页面实现篇 Android 仿微信之界面导航篇 Android 高仿QQ 好友分组列表 Android 高仿QQ 界面滑动效果 Android 高仿QQ 登陆界面 Android 对Path的旋转效果的拓展 Android高仿360安全卫士布局...
  • 20个Android游戏源码,…

    万次阅读 2017-12-18 14:15:10
    原文地址:分享20个Android游戏源码,希望大家喜欢哈!作者:我算哪根葱 分享20个Android游戏源码,希望大家喜欢哈! ... Android 疯狂足球游戏源码 ... android源码捏苍蝇游戏源码
  • 多款Android播放器源码集锦

    万次阅读 2012-07-20 09:15:03
    Android传说中的3D播放器源码 Android 3D播放器 源码 170 2011-09-28 by:豆沙包 • android音乐播放器源码 android 237 2011-09-03 by:183100934 • ...
  • 1. 安装 Source Insight(1) Source Insight 相关资源安装相关资源 :-- 下载地址 : http://www.sourceinsight.com/down35.html;... 导入 Android 源码导入 Android 源码 :-- 创建工程 : Project -> New Project, 输入
  • 全系列Android源代码在线浏览网站

    万次阅读 2017-10-12 23:53:54
    全系列Android源代码在线浏览网站,欢迎大家学习交流 https://www.androidos.net.cn/sourcecode
  • 通过Android Studio查看SDK源码

    万次阅读 2016-06-03 14:35:55
    通过Android Studio查看源码 最近用Android Studio开发中,想进入源码老是看不到内容(Sources for Android API 23 Platfrom not found),以前没太注意这个问题,因为有的时候还能在线看得到,现在进入就看不到源码...
  • 手把手教你查看android系统源码

    万次阅读 2018-05-11 10:27:25
    引言:android开发人员想必都很想知道,怎么才能查看源码吧。毕竟,想跨入高级,不看源码,你看啥?老司机请远离。准备工作:下载SourceInsight4.0,如果有,就略过。如果没有,下载地址:...
  • 分享20个Android游戏源码,…

    万次阅读 2018-05-13 21:14:44
    原文地址:分享20个Android游戏源码,希望大家喜欢哈!作者:我算哪根葱 分享20个Android游戏源码,希望大家喜欢哈! ... Android 疯狂足球游戏源码 ... android源码捏苍蝇游戏源码
  • 在Eclipse中需要查看某个类的源码,直接按住Ctrl 然后点击该类名就能查看源码啦,比如查看...是不是够方便的呢,接下来我就来教大家怎么关联,我们关联android2.2的源码和support包源码就够了,下面是下载地址 android
1 2 3 4 5 ... 20
收藏数 345,613
精华内容 138,245
关键字:

android 源码