Android 编译Android7.0版本源码

简介: Android 编译Android7.0版本源码

前言


  首先说说为什么要编译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的Terminal(命令行终端) 。

安装所需要的程序包:

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


ace3d13e29994b7491fef3ae9a5415bc.png

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

source build/envsetup.sh

9519b66fedfc49f6aa6f867b8c8f8656.png

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

. build/envsetup.sh


a96a2fd6c04e4c49b95d742b4c39c47f.png

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

lunch


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

06208051b7d447c1a8ce5d822010ba62.png

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

5b3e585da02c4b6f81d203d23356befa.png

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

lunch aosp_arm-eng


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

m


或者

make -j8


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


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

e6f8fd6e141c46e088c782cad867dba2.png

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


5. 启动模拟器

emulator


回车等待,虚拟机启动。

e9a93f40fb0048f0bbcece9da13cab3d.png

这就启动好了。


四、编译中的问题


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

9cdb2774788a4a1b8864066252ecb13d.png

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


① 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
• 1


停止命令:

./jack-admin stop-server


② 本地化设置

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

export LC_ALL=C


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

a4a9cd9d242c4552994bc65e23446a76.png


③ 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


06dacd30e72740ee88fab525b00855e8.png

下面我们将这个TLSv1和TLSv1.1给删掉,按A键进入编辑模式,删掉后如下图所示:

d8d6e3b8a7904667afe4095f11141de2.png

按Esc键退出编辑模式,输入如下命令写入退出文件:

:wq


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

cd /prebuilts/sdk/tools/


进入到tools目录下,执行:

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


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

dbfc9ce884634837afaefefe5daa4f23.png

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

cd ~/Project/Android7


然后输入指令重新编译:

make -j8


相关文章
|
4月前
|
存储 机器学习/深度学习 API
Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
696 31
Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
|
6月前
|
XML 搜索推荐 Android开发
Android改变进度条控件progressbar的样式(根据源码修改)
本文介绍了如何基于Android源码自定义ProgressBar样式。首先分析了系统源码中ProgressBar样式的定义,发现其依赖一张旋转图片实现动画效果。接着分两步指导开发者实现自定义:1) 模仿源码创建一个旋转动画XML文件(放置在drawable文件夹),修改图片为自定义样式;2) 在UI控件中通过`indeterminateDrawable`属性应用该动画。最终实现简单且个性化的ProgressBar效果,附带效果图展示。
372 2
|
9月前
|
移动开发 安全 Java
Android历史版本与APK文件结构
通过以上内容,您可以全面了解Android的历史版本及其主要特性,同时掌握APK文件的结构和各部分的作用。这些知识对于理解Android应用的开发和发布过程非常重要,也有助于在实际开发中进行高效的应用管理和优化。希望这些内容对您的学习和工作有所帮助。
856 83
|
12月前
|
人工智能 搜索推荐 物联网
Android系统版本演进与未来展望####
本文深入探讨了Android操作系统从诞生至今的发展历程,详细阐述了其关键版本迭代带来的创新特性、用户体验提升及对全球移动生态系统的影响。通过对Android历史版本的回顾与分析,本文旨在揭示其成功背后的驱动力,并展望未来Android可能的发展趋势与面临的挑战,为读者呈现一个既全面又具深度的技术视角。 ####
|
7月前
|
Java API 开发工具
Android cmdline-tools版本与最小JDK的关系
总的来说,Android的命令行工具和JDK之间的关系就像是一场舞会,两者需要彼此配合,才能共同创造出美妙的舞蹈。如果选择了不合适的舞伴(即不兼容的版本),可能会导致舞蹈中的步伐混乱,甚至无法完成舞蹈。而即使选择了合适的舞伴,也需要考虑舞伴的舞蹈技巧(即性能和稳定性),才能确保舞蹈的完美表现。因此,选择合适的Android命令行工具和JDK版本,是每一个Android开发者都需要面对的重要决定。
221 13
|
8月前
|
安全 开发工具 Android开发
【Android Git】Git版本回退方式
在实际操作中,选择合适的版本回退方式,可以有效地管理代码版本,提高开发效率和代码质量。
447 26
|
7月前
|
NoSQL 应用服务中间件 PHP
布谷一对一直播源码android版环境配置流程及功能明细
部署需基于 CentOS 7.9 系统,硬盘不低于 40G,使用宝塔面板安装环境,包括 PHP 7.3(含 Redis、Fileinfo 扩展)、Nginx、MySQL 5.6、Redis 和最新 Composer。Swoole 扩展需按步骤配置。2021.08.05 后部署需将站点目录设为 public 并用 ThinkPHP 伪静态。开发环境建议 Windows 操作系统与最新 Android Studio,基础配置涉及 APP 名称修改、接口域名更换、包名调整及第三方登录分享(如 QQ、微信)的配置,同时需完成阿里云与腾讯云相关设置。
|
9月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
574 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
991 1
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
424 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库

热门文章

最新文章