Android 编译Android7.0版本源码

news2024/9/25 17:19:04

编译Android7.0版本源码

  • 前言
  • 正文
    • 一、前置条件
    • 二、编译准备
    • 三、下载编译源码
      • 1. 下载Repo
      • 2. 初始化仓库
      • 3. 同步远程代码
      • 4. 编译源码
      • 5. 启动模拟器
    • 四、编译中的问题
      • ① Jack-Server
      • ② 本地化设置
      • ③ Communication error with Jack server (35), try 'jack-diagnose' or see Jack server log

前言

  首先说说为什么要编译Android7.0的源码,因为当我们去做系统定制开发的时候,就需要这么去做,举个例子,你们公司有一个客户是做电视机顶盒的,现在购买了你们公司的产品,要求你们公司提供相关的Android系统驱动,类似音频驱动、视频驱动之类的文件,能让这个文件再客户的机顶盒上正常使用,针对这个问题我们要怎么做呢?

正文

  首先我们要做的就是得到客户机顶盒的Android版本,这很重要,因为Android每个版本都不一样,尽量保持版本一致,现在我确定知道是Android7.0版本了,那么我们首先要做的是什么呢?

  一个字,干!问题是怎么开始?我们不能像一个无头苍蝇一样,我说的是之前的自己,你想一下从应用开发跨度到Android驱动开发,我人都是懵的,首先说一下编译的前置条件。

一、前置条件

  编译Android源码需要一些前置条件,这一点很重要,工欲善其事必先利其器,要提前准备好。

  • 台式电脑
    • 系统:Linux,Linux的话你可以使用Arch Linux或者Ubuntu版本,如果你是Window版本的话,那么就装个虚拟机,虚拟机里面安装Ubuntu,Ubuntu版本在 15.04以上,我目前是这么做的。
    • 机型:尽量不要自己组装,最好购买品牌台式机,万一出问题有保障。
    • 显示器:普通的1920x1080分辨率的就可以了。
    • 运行内存:至少要16G,32G属于正常水平。
    • 物理内存:固态硬盘,至少1T,2T属于正常水平。
    • 处理器:i7或者更高。
    • 内核:12核及以上。

满足上述条件,你再考虑编译Android源码。

二、编译准备

  假设你现在已经准备好了,那么下面我们可以打开Ubuntu的Term(命令行终端) 。

安装所需要的程序包:

sudo 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

JDK,这里是Android7.0源码,安装JDK1.8就可以了,更低的Android源码版本使用是1.7版本。

sudo apt-get install openjdk-8-jdk

三、下载编译源码

下载编译Android源码分为好几个步骤,下面我们一一来看。

1. 下载Repo

到这里,我们下载Repo,打开Ubuntu上的Terminal(终端),首先在根目录下创建一个bin目录,输入命令:

mkdir ~/bin

然后添加路径,输入命令:

PATH=~/bin:$PATH

下载Repo工具,这里有两个地址,第一个是Google官方的,可能国内访问没有那么顺利,第一个是清华大学的一个源地址,比较好用,两个选其一几个,命令如下:

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo

下载好Repo工具之后,授予可执行权限,命令如下:

chmod a+x ~/bin/repo

2. 初始化仓库

下面我们初始化仓库,这里需要设置你的邮箱和名称,命令分别如下所示:

git config --global user.email "Your email"

修改成自己的邮箱

git config --global user.name "Your Name"

修改成自己的名称

  下面配置repo,如果你是需要编译多个版本的Android源代码,在一开始就要做好分类,比如我可能需要Android7和Android10两个版本的代码,那么我们可以在ubuntu的根目录下创建一个Project文件夹,输入命令:

mkdir Project

回车即可创建文件夹,然后进入到Project文件夹下,输入命令:

cd Project

回车进入到Project下,再创建一个Android7的文件夹,输入命令:

mkdir Android7

进入到Android7文件夹下,输入命令:

cd Android7

3. 同步远程代码

在Android7目录下,初始化repo,这里根据下载源的不同,速度就会不一样,Android源码的每一个版本都有多个分支,-b表示分支,这里下载的是android-7.0.0_r1分支下的源代码,同样有两个源,Google的源和清华的源,建议你使用第二个,速度会快一点,命令如下:

repo init -u https://android.googlesource.com/platform/manifest -b android-7.0.0_r1
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-7.0.0_r1

Repo初始化完成之后,我们就可以同步远程代码了,输入命令:

repo sync

  回车等待同步完成,这里的同步时间和你选择的源以及网速有关,我同步了1个小时就完成了,建议你在晚上下班的时候同步,第二天上班说不定就同步完成了。

4. 编译源码

  源码同步完成会有一个绿色的文字提示,会显示同步了多长时间,如果你是红色的表示有错误,那么你需要解决才行。

  没有错误,我们就可以进行编译了,你可以输入命令查看Android7中的文件,命令如下:

ls

这是查看文件,如果要查看修改时间,命令如下:

ls -al

这个可以查看到文件的权限,修改时间等信息,下面我们输入命令清理一下,命令如下:

clear

在这里插入图片描述

清理之后就很干净了,下面我们来编译源码,使用 envsetup.sh 脚本初始化环境,输入命令:

source build/envsetup.sh

在这里插入图片描述

这里的source可以用·点来代替,命令如下:

. build/envsetup.sh

在这里插入图片描述

效果是一样的,唯一的优势就是让你少打几个字母,狗头滑稽,下面我们要选择编译的目标,输入命令:

lunch

  输入之后,回车看到有很多的编译架构版本,这个和你使用的Android源码版本有关,可能比这个多,也可能比这个少,如下图所示。

在这里插入图片描述

  然后就是选择目标版本了,这个地方你需要注意一点那就是,你对接的客户用的是什么版本的源码,那么你保持一致就可以了,这里的系统架构也保持一致,上面的数字后回车即可,不输入,回车就是第一个,这里我就直接回车了。

在这里插入图片描述

  回车之后能看到将要编译的一些信息,如果你能清楚的知道你的Android源码中有哪些架构,并且你可以清楚的知道所需要的架构,那么你可以这样输入,命令如下:

lunch aosp_arm-eng

  就少了一个选中的过程,下面我们就可以正式编译源码,编译的语句也有多种,比如

m

或者

make -j8

  使用 m 构建所有内容。m 可以使用 -jN 参数处理并行任务。如果您没有提供 -j 参数,构建系统会自动选择您认为最适合您系统的并行任务计数。-j表示线程数,后面的8就是8个线程,你可以改成其他的线程数,最好是在你的电脑的可承受范围内,这里指的是你的虚拟机所分配的线程。

  回车即可进入编译,当然了编译也不是一帆风顺的,你可能会遇到这样或者那样的问题,你可以评论区提一下,我看到了,为你解答。

在这里插入图片描述
编译完成了,25分钟,实际上没有怎么快,这是因为之前编译到一半报错了,然后把报错的信息解决之后继续编译,总体时间大概是1个小时左右,下面我们启动虚拟机。

5. 启动模拟器

emulator

回车等待,虚拟机启动。

在这里插入图片描述

这就启动好了。

四、编译中的问题

  首先你要知道不同的Android版本源码编译方式不同,比如你Android10.0可以编译过,但是不一定Android7.0就能编译过,要因地制宜。

在这里插入图片描述

比如说这个问题,解决的方法可能有多个,下面我会列出来,你可以设置一个编译一下,也可以都设置再编译。

① Jack-Server

  Jack编译器工具是一套新的Android编译工具用来将Java代码转换为Android dex字节代码,你下载的7.0源码中有这个工具,切换工程根目录,输入以下命令查看当前是否有服务启动:

./prebuilts/sdk/tools/jack-admin list-server

如果没有的话,可以执行

cd prebuilts/sdk/tools

到tools目录下执行一下这个命令:

./jack-admin install-server jack-launcher.jar jack-server-4.8.ALPHA.jar

然后启动服务,执行命令:

./jack-admin start-server

启动之后再查看一下,执行命令:

./jack-admin list-server

停止命令:

./jack-admin stop-server

② 本地化设置

回到Android7目录下,执行命令:

export LC_ALL=C

回车,这是为了去除所有本地化的设置,让命令能正确执行。

在这里插入图片描述

③ Communication error with Jack server (35), try ‘jack-diagnose’ or see Jack server log

  在启动Jack-Server时提示这个错误,究其原因是新的Java版本禁用了TLSv1, TLSv1.1导致,修改java.security文件,指令如下所示:

sudo vim /etc/java-8-openjdk/security/java.security

在这里插入图片描述
下面我们将这个TLSv1和TLSv1.1给删掉,按A键进入编辑模式,删掉后如下图所示:
在这里插入图片描述
按Esc键退出编辑模式,输入如下命令写入退出文件:

:wq

然后重启服务,在Android7目录下执行

cd /prebuilts/sdk/tools/

进入到tools目录下,执行:

./jack-admin kill-server && ./jack-admin start-server

这是先杀死服务,再启动服务。

在这里插入图片描述

服务启动成功了,下面我们回到Android7目录下,输入指令:

cd ~/Project/Android7

然后输入指令重新编译:

make -j8

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/696261.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pycharm中运行Allure报错不是内部或外部命令的解决方案

问题现象: Allure已安装并配置好系统环境变量: 1、Allure的下载地址:https://github.com/allure-framework/allure2/releases 2、下载后解压,将解压后的bin路径配置到环境变量中: allure-pytest插件也已安装好&#x…

Thinkphp5分页后携带参数进行跳转传递

问题: 我在tp框架中写了一个图书详情分页的,代码如下: public function verify_details(){$sell_order_numinput(sell_order_num);$resDB::table(verif)->where(["sell_order_num">$sell_order_num])->paginate(10);// 模…

Linux上安装matlab

首先需要下载文件,微人大正版软件下载里有 然后直接点击,就可以就可以安装,不需要使用挂载命令,然后使用 ./install就可以进行安装了,这里记住是得登录自己的人大邮箱,否则无法激活,然后修改安…

LINUX7下安装kaldi实战

LINUX7下安装kaldi实战,需要升级gcc版本。还需要将kaldi相关的github.com替换为kgithub.com。 1 升级安装gcc过程 我是在LINUX7.5下安装部署得kaldi。自带的gcc版本为4.8.5,所以需要安装升级gcc. 1.1 安装说明 gcc库包含3个依赖库:gmp、m…

【各种乐器波形图】笛子、二胡、钢琴、号角等乐器波形图研究

标题:不同乐器波形图 笛子的频率取决于其音高,不同音高的笛子频率也不同。以C调笛子为例,其最基本的频率为261.63 Hz(即中央C的频率)。而其他调号的笛子的基本频率则会有所不同。 笛子的波形图: import n…

有奖问卷 | 2023 中国软件研发效能调查问卷即将截止

中国信通院将根据问卷征集和企业调研结果,与业内专家共同撰写**《2023 中国软件研发效能调查报告》**,研判发展趋势,提供研发效能体系建设建议,并于 2023 年 7 月 7 日正式发布调查报告解读。 随着云计算应用的不断深入&#xff0…

微信小程序中使用echart、动态加载几条折线

一、示例 echart小程序示例 gitub地址:GitHub - ecomfe/echarts-for-weixin: Apache ECharts 的微信小程序版本 在小程序中放入 效果 二、 小程序代码 json 组件的位置取决于一示例中的的echart的位置 { "navigationStyle":"custom","…

STM32速成笔记—EEPROM(AT24C02)

文章目录 一、AT24C02简介二、AT24C02引脚三、AT24C02寻址四、AT24C02读/写操作4.1 AT24C02写操作4.2 AT24C02读操作 五、AT24C02程序六、应用实例七、拓展应用 一、AT24C02简介 AT24C01/02/04/08/16…是一个1K/2K/4K/8K/16K位电可擦除PROM,内部含有128/256/512/10…

数据中心供配电系统负荷的计算方法(三)

数据中心供配电系统是为机房内所有需要动力电源的设备提供稳定、可靠的动力电源支持的系统;是数据中心日常运维的重大支出之一,在数据中心,供配电系统相当于一个人的“心脏和血管”,负责把能量输送到系统的每一台设备。一旦供配电…

伦敦金价格实时查询

伦敦金是具有显著杠杆效应的投资品种,参与其中的投资者,往往需要时刻关注它的实时行情走势,以及自己交易账户内的情况,才能及时地兑现利润和控制交易的风险。所以对于每一位伦敦金投资者来说,实时的行情报价都是十分重…

stable-diffusion 预训练模型汇总

目前各个github上各个库比较杂乱,故此做些整理方便查询 Stable UnCLIP 2.1 New stable diffusion finetune (Stable unCLIP 2.1, Hugging Face) at 768x768 resolution, based on SD2.1-768. This model allows for image variations and mixing operations as d…

OA办公系统如何通过审批流程提高效率

企业的发展与管理离不开信息化,很多企业的信息化都会选择从OA信息化开始。一个成熟先进的OA办公系统流程审批也是核心功能关注的功能之一,今天小编举例有18年平台经验的天翎低代码平台OA系统,给大家分享一下如果提升流程审批效率:…

展会回顾|万应低代码重磅亮相2023全球人工智能产品应用博览会

6月25-27日,人工智能领域的行业盛会——第五届全球人工智能产品应用博览会(简称“全球智博会”)在苏州国际博览中心成功举行。大会由苏州市人民政府指导、苏州工业园区管理委员会支持、新一代人工智能产业技术创新战略联盟、苏州市人工智能协…

Qt 事件过滤器使用QPainter绘制温度

文章目录 【1】eventFilter使用简介【2】QPainter使用简介【3】QPainter绘制温度案例头文件源文件 【4】 UI界面设计【5】温度绘制图 【1】eventFilter使用简介 Qt的eventFilter是一个事件过滤器,可以用来捕获和处理Qt对象的事件。事件过滤器可以被安装到一个对象上…

【js30天挑战】第四天:数组操作

总结 filter(筛选条件为true的项) map(你想要输出的东西),进来多少个 出去多少个 sort(),默认可排字母顺序。sort(compareFn(a, b))其中compareFn(a, b)返回的值若大于0则a在b的后面。 reduce(),最复杂。reduce(func(){上一轮计算出的结果…

Vue 3 + vite技术架引入静态文件的问题(require和import方式)

Vue 3 vite技术架无法使用require()的方式引入静态文件 使用Vue 3 vite技术架开发过程中,引入静态资源时,习惯性使用require()引入,突然发现报错了。 研究了一下才发现,好像vite引入静态资源或者插件啥的,不用requi…

JAVA 二维码绘制,可定义背景图与在背景图种的位置,码点绘制避开logo区域10个像素点

效果图: 背景图: 直接看代码和代码说明: 方法drawQr() 为绘制核心,仅绘制出图上的二维码 方法createQr() 包含 读取背景图和 调用drawQr() 。绘制出完整的带有背景图的二维码 drawQr()方法参数说明: * param conten…

新星计划【数据结构与算法】赛道开启,欢迎报名!

前排提醒:这里是新星计划2023【数据结构与算法】学习方向的报名入口,一经报名,不可更换。 ↓↓↓报名方式:新星计划2023【数据结构与算法】学习方向报名入口!-CSDN社区 一、关于本学习方向导师 博客昵称:…

上海亚商投顾:沪指探底回升微跌 减速器概念股大涨

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪 指数今日探底回升,三大股指盘中均跌超1%,随后跌幅逐渐收窄,沪指午后一度拉升翻…

Elasticsearch:使用 SIMD 指令加速向量搜索

作者:Chris Hegarty, Elastic Principal Engineer, Lucene PMC 翻译:杰瑞朱 多年来,Java 平台上运行的代码一直受益于自动向量化 —— HotSpot C2 编译器中的 superword 优化,将多个标量操作打包到 SIMD(单指令多数据…