Android源码浅析(三)——Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机
Android源码浅析(三)——Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机
最近比较忙,而且又要维护自己的博客,视频和公众号,也就没仔细的梳理源码的入门逻辑,今天也就来讲一个源码的玩法,各位看官,一起学习学习!
看本篇博客之前,先看下我的前面两篇
- Android源码浅析(一)——VMware Workstation Pro和Ubuntu Kylin 16.04 LTS安装配置
- Android源码浅析(二)——Ubuntu Root,Git,VMware Tools,安装输入法,主题美化,Dock,安装JDK和配置环境
参考资料
一.同步源码(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 "748778890@qq.com"
- 配置用户
git config --global user.name "LiuGuiLinAndroid"
接着初始化repo,指明下载的android源码,这里我就旋转android5.0,记住哦,需要FQ哦
repo init -u https://android.googlesource.com/platform/manifest -b android-5.0.0_r2
如果你没有FQ,那就会提示
这里顺便教一下大家怎么修改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项目实战
Android源码浅析(三)——Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机的更多相关文章
- JDK8 BigDecimal API-创建BigDecimal源码浅析三
第三篇 先介绍以BigInteger为构造参数的构造器 public BigDecimal(BigInteger val) {// 根据BigInteger创建BigDecimal对象 scale = ...
- ArrayList类源码浅析(三)
1.看一个示例 运行上述代码,抛出一个异常: 这是一个典型的并发修改异常,如果把上述代码中的125行注释,把126行打开,运行就能通过了: 原因: 1)因为在迭代的时候,使用的是Itr类的对象,在调用 ...
- Android AOP之路三 Android上的注解
一.简单介绍 啥是注解.不懂的能够先看我上一篇文章. 在android 里面 注解主要用来干这么几件事: 和编译器一起给你一些提示警告信息. 配合一些ide 能够更加方便快捷 安全有效的编写java代 ...
- Android核心服务解析篇(三)——Android系统的启动
从大的方面来说.Android系统的启动能够分为两个部分:第一部分是Linux核心的启动,第二部分是Android系统的启动. 第一部分主要包含系统引导,核心和驱动程序等,因为它们不属于本篇要讲的内容 ...
- 将AOSP源码导入到Android Studio进行查看
生成iml和ipr文件 source build/envsetup.sh lunch aosp_x86-eng # 或者直接输入lunch,然后选择对应的target make idegen deve ...
- Long类源码浅析
1.Long类和Integer相类似,都是基本类型的包装类,类中的方法大部分都是类似的: 关于Integer类的浅析可以参看:Integer类源码浅析 2.这里主要介绍一下LongCache类,该缓存 ...
- Android studio2 中的 SDK Manager的使用-------Android SDK 的安装与更新(Install missing platform(s) and sync project 编译错误解决)
最近在编写Android程序,其中有一个问题就是对旧应用的导入,此时往往你的Android SDK中并没有老版本的Android SDK, 此时往往会提示你出现错误 Install missing p ...
- Android 手势识别类 ( 三 ) GestureDetector 源码浅析
前言:上 篇介绍了提供手势绘制的视图平台GestureOverlayView,但是在视图平台上绘制出的手势,是需要存储以及在必要的利用时加载取出手势.所 以,用户绘制出的一个完整的手势是需要一定的代码 ...
- Android源码浅析(五)——关于定制系统,如何给你的Android应用系统签名
Android源码浅析(五)--关于定制系统,如何给你的Android应用系统签名 今天来点简单的我相信很多定制系统的同学都会有一些特定功能的需求,比如 修改系统时间 静默安装 执行某shell命令 ...
随机推荐
- Linux(Ubuntu)安装libpcap
sudo apt-get install libpcap-dev libnids-dev libnet1-dev正在读取软件包列表... 完成正在分析软件包的依赖关系树 正在读取状态信息. ...
- Spring的注解@Qualifier小结
有以下接口: public interface EmployeeService { public EmployeeDto getEmployeeById(Long id); } 有两个实现类: @Se ...
- 数据库4m10d作业
Create table student ( Sno char(15) primary key , Sname varchar(10) not null, Sage tinyint , Special ...
- Oracle中查询和删除相同记录的3种方法
--创建测试表 )); ,'); ,'); ,'); ,'); ,'); ,'); commit; select * from test; --查询相同记录 ); select id,name fro ...
- Node.js 字符串解码器
稳定性: 3 - 稳定 通过 require('string_decoder') ,可以使用这个模块.字符串解码器(StringDecoder)将缓存(buffer)解码为字符串.这是 buffer. ...
- Node.js NPM 使用介绍
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服务器下载并 ...
- PHP 安装
PHP 安装 您需要做什么? 为了开始使用 PHP,您可以: 找一个支持 PHP 和 MySQL 的 Web 主机 在您自己的 PC 机上安装 Web 服务器,然后安装 PHP 和 MySQL 使用支 ...
- oracle11实战详解
因为最近可以学习oracle了,所以昨天把oracle装好了,装的时候因为种种不知名的原因,把我的mysql居然连连不上了.说实话如果自己看教程安装的话还是有一点小复杂的,特别是对于我这种学渣来说,我 ...
- springMVC源码分析--RequestMappingHandlerAdapter(五)
上一篇博客springMVC源码分析--HandlerAdapter(一)中我们主要介绍了一下HandlerAdapter接口相关的内容,实现类及其在DispatcherServlet中执行的顺序,接 ...
- 【SSH系列】-- hibernate基本原理&&入门demo
什么是hibernate? hibernate在英文中是冬眠的意思,当冬季来临,世界万物开始准备冬眠,但是程序猿这种动物好像不冬眠,因为需求变了,要改bug,冬眠,对于对象来说就是持 ...