Android源码浅析(三)——Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机

Android源码浅析(三)——Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机


最近比较忙,而且又要维护自己的博客,视频和公众号,也就没仔细的梳理源码的入门逻辑,今天也就来讲一个源码的玩法,各位看官,一起学习学习!

看本篇博客之前,先看下我的前面两篇

参考资料

一.同步源码(sync)

android源码的同步,也就是下载,其实不难,我们先把虚拟机打开了,紧接着,我们需要做一些准备的东西,下载的东西比较多哦,这里要注意一下

1.安装软件

  • sudo apt-get install git

android的源码是托管在github上的,所以安装git来管理,使用git version可以查看版本

  • sudo apt-get install phablet-tools

git工具包

  • sudo apt-get install curl

这是上传和下载数据的工具

  • sudo apt-get install build-essential

提供编译程序必须软件包的列表信息

  • sudo apt-get install make

源码编译工具

  • sudo apt-get install gcc

GNU编译器套件

  • sudo apt-get install g++

同上,最新版本为4.8,但是有些系统指定了版本,并不是越高越好

  • sudo apt-get install libc6-dev

共享库

  • sudo apt-get install patch

补丁工具

  • sudo apt-get install texinfo

文档系统

  • sudo apt-get install libncurses-dev

系统的必备库

  • sudo apt-get install git-core gnupg

git的工具包,虽然有git了,但是有备无患

  • sudo apt-get install ncurses-dev

编译内核的时候需要

  • sudo apt-get install zlib1g-dev

编译的时候需要

  • sudo apt-get install valgrind

内存检查器


以上的都是一些基本使用的,我罗列出来,但是中途如果还提示要安装的什么工具的话也可以直接sudo apt-get install 软件名进行安装即可

2.配置环境

repo

这个也是一个工具,但是这里就提出来讲,因为这个是比较重要的

  • 一个基于git的版本库管理工具, 这里用于自动批量下载android整个项目

我们首先创建一个目录

mkdir ~/bin

下载repo脚本到本地bin文件夹下

curl http://android.git.kernel.org/repo >~/bin/repo  (官网:curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo)

给所有用户追加可执行的权限

chmod a+x ~/bin/repo

到这里我们前期的准备工作就差不多了,我们创建一个文件夹来存放源码

mkdir ~/android_source 

linux的权限很重要,也是最麻烦的东西,我们可以来给这个文件夹配置权限

chmod 777 ~/android_source

好的,我们进入这个目录,什么,怎么进入?直接cd啊

cd ~/android_source

这里我要强调一下,我们既然要编译源码,乃至后期的源码编译修改等,都是要在linux下进行的,所以一些基本的常识和命令我希望大家去复习一下,我也是摸索出来的,大家可以去搜索一下命令大全,简单易懂,到这里,我们就可以开始同步代码了,其实就是下载,我们只是说的专业一点,但是再同步之前,还需要做一点点事情

3.初始化

这里的初始化,主要是针对两个,一个是repo,还有一个是android的源码版本,我们一个个来,首先初始化的是我们的git,你总要配账户之内的

  • 配置邮箱
git config --global user.email "[email protected]"
  • 配置用户
git config --global user.name "LiuGuiLinAndroid"

接着初始化repo,指明下载的android源码,这里我就旋转android5.0,记住哦,需要翻墙哦

repo init -u https://android.googlesource.com/platform/manifest -b android-5.0.0_r2

如果你没有翻墙,那就会提示

这里顺便教一下大家怎么修改host

sudo gedit /etc/hosts

在hosts文件结尾加入源,源从哪里来?这里有个网址

可以去下载host,然后复制到最后面,接着,我们去让他生效

sudo rcnscd restart

当然,还有一种选择,就是下载AOSP,这里有三个版本

  • AOSP 5.1.1
repo init -u git://aosp.tuna.tsinghua.edu.cn/android/platform/manifest -b android-5.1.1_r4
  • AOSP 6.0.1

repo init -u git://aosp.tuna.tsinghua.edu.cn/android/platform/manifest -b android-6.0.1_r22
  • AOSP 7.0 perview-1

repo init -u git://aosp.tuna.tsinghua.edu.cn/android/platform/manifest -b android-n-preview-1

显示是这样的

好了,现在都OK了,我们只要输入

repo sync

就开始同步了

就这样让他一直接收吧!

注意: 下载过程中, 因为网络问题, 可能会中断下载. 当中断下载时, 继续使用repo sync命令继续下载.

二.编译源码(make)

下载好了以后,我们可以看一下,挺大的,我们开始编译了

首先初始化编译环境

. build/envsetup.sh

然后选择编译的目标包

lunch aosp_arm-eng

当我们不知道目标包的时候可以输入lunch,就可以查看目标了

然后就可以开始编译了,编译命令是

make

为了提高效率,我们一般会多开线程去编译的,只要输入

make -j8  //8是线程的意思,如果配置较低可以改为2或者4,

然后我们就可以静静的等待他编译成功了,当然,这是最理想的状态,一般虚拟机不会让你有好日子过的,他会报各种错误,我这里列举几个比较明显的错误

  • 1.gcc/g++ error

    这个提示应该会提示gcc+版本号,找不到命令行,是什么原因呢?刚开始我也找了挺久的了,但是后来才发现,是版本的问题,我直接apt-get install gcc所安装的版本太高了,他需要指定的版本

  • 2.文件夹权限

这个错误会报各种权限问题的,你只要输入

ls -l

就可以看到文件夹的归属了,一般下载下来是归root用户的,你需要改成你的归属,更改的方法网上也能搜到

  • 3.xxx找不到命令

这个是你缺少了什么工具,比如他提示repo找不到或者找不到命令行,你切记不要用apt-get install repo这个命令,因为有些软件可能只是集合包里的一个罢了,你要直接输入repo,然后他会提示你怎么安装,你再进行安装

make失败或停止后,可以使用make -k 继续编译

目前我这也还在编译,就不发截图了,当然,也会碰到各种各样的问题,如果你不知道,可以加入QQ群:555974449,我们一起来分析一下

三.Samba服务器

源码还在编译,老司机催着开车,也就不等了,有遗漏的话,欢迎评论,这里再分享一个新技能,也就是配置samba服务器,这个在linux行业里可以必备的技能,而像我们工作需要改源码,然后重新烧录,用的虚拟机,让windows就直接访问我们的ubuntu,来进行烧录刷机,好的,我们来学习下samba的配置


ubuntu默认是安装了samba的,但是以防万一,我们还是走一下安装步骤,分三次输入安装

sudo apt-get install samba

sudo apt-get install samba-common

sudo apt-get install samba-client

如果提示安装,你就安装吧!

紧接着,我们打开samba的配置文件,输入命令打开

sudo gedit /etc/samba/smb.conf

我们直接在最下面增加一个用户组

[share]   //共享文件名
    path = /home/lgl/android_source      //共享路径
    available = yes
    browseable = yes
    public = yes
    writable = yes
    valid users =lgl   //用户名
    create mask = 0700
    directory mask =0700
    force user =nobody
    force group = nogroup

其他的都是一些设置相关的数据,然后,我们重启一下samba服务器

/etc/init.d/samba restart

我们现在要做什么?需要查看一下ubuntu的IP地址,在windows上查看的IP地址的方式是在cmd中输入ipconfig,在ubuntu上是输入

ifconfig

然后我们在运行里面输入IP地址

你稍微等待一下就就可以看到分享目录了

但是当你点进去的时候,你会发现,他需要输入账号密码

那我们还需要去创建用户组的账号密码了,我们输入

sudo smbpasswd -a lgl

最后跟的是你想创建的samba用户名,然后他会提示你创建密码,你照着填就行了

然后你会惊讶的发现,可以访问了,当然,samba服务器远不止如此

你们可以慢慢去体验

当然,我在刚搭建的时候,遇到了很多坑,基本上都是权限的问题,也是蛋疼,我只能说,只能耐心去搜索排查问题了,不过你按照我这样子来,成功率还是很高的,好的,本篇博文就闲到这里了,如果有兴趣的话,可以加群聊聊!

QQ群:555974449

博主的部分视频上线了,大家可以去指点一下

通往Android的神奇之旅

Android网络框架Volley项目实战

时间: 2024-10-17 17:38:09

Android源码浅析(三)——Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机的相关文章

ArrayList类源码浅析(三)

1.看一个示例 运行上述代码,抛出一个异常: 这是一个典型的并发修改异常,如果把上述代码中的125行注释,把126行打开,运行就能通过了: 原因: 1)因为在迭代的时候,使用的是Itr类的对象,在调用hasNext()方法的时候,只要cursor和szie不相等就返回true: 2)在Itr类中存在一个属性字段:expectedModCount,每次调用next()方法的时候都会检查expectedModCount和modCount是否相等, 如果不相等,就会抛出异常: 3)调用Itr类的rem

Android AOP之路三 Android上的注解

一.简介 啥是注解,不懂的可以先看我上一篇文章. 在android 里面 注解主要用来干这么几件事: 和编译器一起给你一些提示警告信息. 配合一些ide 可以更加方便快捷 安全有效的编写java代码.谷歌出的support-annotations这个库 就是主要干这个的. 和反射一起 提供一些类似于spring 可配置的功能,方便简洁. 二.Support Annotations栗子 这里使用官方的一个库,说明在开发中的简单一个应用. 2.1 导包 在新建项目的时候会自动导的,可以看build.

Android核心服务解析篇(三)——Android系统的启动

从大的方面来说.Android系统的启动能够分为两个部分:第一部分是Linux核心的启动,第二部分是Android系统的启动. 第一部分主要包含系统引导,核心和驱动程序等,因为它们不属于本篇要讲的内容,这里就不再讨论. 在本篇博客中,我们重点解说Android系统的启动,这一过程主要经过两个阶段.各自是应用的初始化流程与system_service进程及核心服务的创建流程. 1.初始化流程 初始化流程.顾名思义,它完毕Android的一些初始化工作,包含设置必要的环境变量,启动必要的服务进程,挂

Android聊天客户端Demo开源了.基本的聊天功能基本上都有了,数据库也已搭建,服务器用的baiduPush。可以直接拿来用!!。(希望两个手机通信的话,改一下pushid就可以)

Hello: 我是在飞,最近写了个聊天的Android客户端.今天将此demo分享出来.原澳门大家可以到github直接下载.有问题可以联系我. 几点说明: 1:android聊天客户端的demo,包含了im的基本功能. 1.1比如gif动态表情展示.语音.聊天表情.拍照.多图的发送.大图片的处理.listview缓存的处理等. 1.2数据库也已经搭载好,算是个完整项目,可以直接拿来用. 1.3服务器使用的是baidu push服务.(图片暂时没有处理上传服务器,只是上传了本地sdcard的pa

Android系统源码下载与编译、刷机--Nexus6实测

前言 此博文记录一下Android从系统源码下载到刷机的全过程. (https://source.android.com/source/build-numbers.html 页面中列表信息找到自己设备对应的Android版本进行选择,博文中选择MOB301) 硬件:Google 亲儿子 Nexus6("shamu") Android系统:选择了Android官网上的MOB301对应的android-6.0.1_r42 驱动:自然就是MOB301_Nexus6对应的驱动了 编译系统:Ub

Long类源码浅析

1.Long类和Integer相类似,都是基本类型的包装类,类中的方法大部分都是类似的: 关于Integer类的浅析可以参看:Integer类源码浅析 2.这里主要介绍一下LongCache类,该缓存类比Integer的缓存类,实现更简单 1 private static class LongCache { 2 private LongCache(){} 3 4 static final Long cache[] = new Long[-(-128) + 127 + 1]; 5 6 static

【Spark】DAGScheduler源码浅析2

引入 上一篇文章DAGScheduler源码浅析主要从提交Job的流程角度介绍了DAGScheduler源码中的重要函数和关键点,这篇DAGScheduler源码浅析2主要参考fxjwind的Spark源码分析 – DAGScheduler一文,介绍一下DAGScheduler文件中之前没有介绍的几个重要函数. 事件处理 在Spark 1.0版本之前,在DAGScheduler类中加入eventQueue私有成员,设置eventLoop Thread循环读取事件进行处理.在Spark 1.0源码

Android网络通信Volley框架源码浅析(三)

尊重原创 http://write.blog.csdn.net/postedit/26002961 通过前面浅析(一)和浅析(二)的分析,相信大家对于Volley有了初步的认识,但是如果想更深入的理解,还需要靠大家多多看源码. 这篇文章中我们主要来研究一下使用Volley框架请求大量图片的原理,在Android的应用中,通过http请求获取的数据主要有三类: 1.json 2.xml 3.Image 其中json和xml的获取其实原理很简单,使用Volley获取感觉有点大财小用了,了解Volle

Android应用ViewDragHelper详解及部分源码浅析

[工匠若水 http://blog.csdn.net/yanbober 未经允许严禁转载,请尊重作者劳动成果.私信联系我] 1 背景 很久没有更新博客了,忙里偷闲产出一篇.写这片文章主要是去年项目中的一个需求,当时三下五除二的将其实现了,但是源码的阅读却一直扔在那迟迟没有时间理会,现在拣起来看看吧,否则心里一直不踏实. 关于啥是ViewDragHelper,这里不再解释,官方下面这个解释已经很牛逼了,如下: /** * ViewDragHelper is a utility class for