编译android7.1源码环境的配置以及中途可能出现问题的总结

2023-05-16

在项目要求将apk文件打包到安卓系统7.1出了一大堆问题,由于我是windows10系统,所以在电脑上装了个virtualbox虚拟机,并且装上了ubuntu-18.04.2。

接下来就是在这个虚拟机系统上搭建编译安卓7.1源码所需要的环境要求了

1.安装jdk并配置环境变量

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

    配置环境变量:sudo vim /etc/profile,在打开的文件中输入下面配置即可完成jdk环境变量的配置

    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
   export JRE_HOME=${JAVA_HOME}/jre 
   export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib 
   export PATH=${JAVA_HOME}/bin:$PATH

  注意:当有多套代码需要不同的jdk编译是,可以在指令窗口直接输入下面的命令进行切换,注意,切换只对当前终端有效。(记得路径要根据自己jdk路径修改)export JAVA_HOME=/usr/lib/jvm/jdk1.6;export PATH=/usr/lib/jvm/jdk1.6/bin:$PATH

 

2.安装其他环境要求的配置如下:

  sudo apt-get install libx11-dev:i386 libreadline-dev:i386 libgl1-mesa-dev g++-multilib -y git flex bison gperf build-essential libncurses5-dev:i386 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 dpkg-dev libsdl1.2-dev  gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev libgl1-mesa-dev libxml2-utils xsltproc unzip m4 lib32z1-dev ccache 

3.为了避免中途安装过程中出现一些奇怪的错误,也可以安装一下如下的配置; 

    sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

4.设置缓存

  export USE_CCACHE=1

5.让其永久生效,这样就不用每次重新打开终端时,重新设置ccache环境变量了。

在源码的根目录下执行下述命令,设置缓存最大50G

$ prebuilts/misc/linux-x86/ccache/ccache -M 50G

6. 其他预处理

为防止编译中途出现问题,请先额外安装如下软件包:

$ sudo apt-get install sharutils

$ sudo apt-get install lzop

 

为防止编译时内存不够,请先设置交换分区

$ sudo fallocate -l 4G /swapfile
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
//
如果不执行以下步骤,则关机重启后需要重新设置swap分区,

开机自动挂载swap,需要root权限:
使用 vi  nano  /etc/fstab 文件底部添加如下内容:

$ vi /etc/fstab

或者使用gedit进行编译:

$ gedit /etc/fstab

将下述字符添加到最末尾,保存退出。
/swapfile none swap sw 0 0

7.编译安卓7.0源码出现make: *** [ninja_wrapper] Error 1时

   做如下处理:

   1.在源码根目录下:

      ./prebuilts/sdk/tools/jack-admin list-server
      prebuilts/sdk/tools/jack-admin start -server
      prebuilts/sdk/tools/jack-admin stop -server,如果这几个命令不存在,则执行如下安装操作

      cd prebuilts/sdk/tools/
     ./jack-admin install-server jack-launcher.jar jack-server-4.8.ALPHA.jar

     再做如下对jack-admin的处理:vim prebuilts/sdk/tools/jack-admin命令打开文件,

    ①.找到如下语句:
  JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR       $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"
   ②.将上述语句修改为:
JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx8192m -cp $LAUNCHER_JAR $LAUNCHER_NAME"

然后执行如下两条命令:

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

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

2.build/envsetup.sh脚本中最后添加:export LC_ALL=C

8.编译步骤

   8.1 内核编译:

    编译内核,进入到kernel目录下:

  $ cd kernel

  $ make rockchip_defconfig(不能执行该步骤,否则编译会不通过)

  $ make rk3288-box.img

 编译完成后查看kernel根目录下是否有kernel.img,resource.img两个镜像文件,若有则表示编译成功。

  8.2 编译源码:

   cd 到源码根目录下,初始化编译环境

  $ source build.sh

  编译源码,后面的数字根据CPU的核心数和线程数而定

  $ make –j4   

 生成用于升级的整包,target包

  $ make otapackage

  执行源码根目录下的mkimage.sh脚本生成镜像,位于/rockdev/Image-rk288目录。

  ./mkimage.sh ota

  此时整个编译过程完成

  一次编译完成后,请备份以下目录中的文件:

  /rockdev/Image-rk3288_box/目录下所有文件:

 

 /kernel/kernel.img

  /kernel/resource.img

 /out/target/product/rk3288_box/system/build.prop

  /out/target/product/rk3288_box/rk3288_box-ota-eng.root.zip  //用于整包升级的zip包,该包可以直接放在SD卡、U盘或 者/mnt/internal-sd根目录下进行升级。

  /out/target/product/rk3288_box/target_files-package.zip     //用于OTA升级生成差分包的target包

8.3升级ubootloader_VXXXXX.bin:

  将需要升级的loader文件拷贝到device/rockchip/common/loader下,make otapackage生成的完整包中会包含这个loader。Loader必须保证版本号比原固件中的loader版本号更高。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编译android7.1源码环境的配置以及中途可能出现问题的总结 的相关文章

  • Adaptive AUTOSAR——Cryptography (VRTE3.0 R21-11)

    Cryptography模块是用于自适应汽车软件架构的密码学模块 xff0c 主要用于实现各种安全功能 xff0c 包括加密 解密 签名和验证 等操作 它的主要作用包括 xff1a 安全通信 xff1a 使用各种算法对数据进行加密和解密 x
  • 一文读懂AUTOSAR SecOC通讯

    为什么用SecOC 在车载网络中 xff0c CAN总线作为常用的通讯总线之一 xff0c 其大部分数据是以明文方式广播发送且无认证接收 这种方案具有低成本 高性能的优势 xff0c 但是随着汽车网联化 xff0c 智能化的业务需要 xff
  • 汽车操作系统的趋势

    操作系统 OS 需要管理基于计算机的系统的所有硬件和软件 xff0c 并且是汽车行业的关键软件平台 本文侧重于提供教程信息和汽车操作系统策略的一些观点 每个操作系统在功能 程序大小 复杂性 开发工作和硬件要求以及生命周期维护 支持工作和成本
  • 4.5.2 DDS

    1 标准及发展简介 DDS 的全称为 Data Distribution Service xff08 数据分发服务 xff0c 是由 OMG 联盟在 2004 年发布的中间件协议和应用程序接口标准 采用发布 订阅模型 xff0c 提供丰富的
  • SOA协议DDS和Some/IP对比

    SOME IP 和 DDS 均已被纳入AUTOSAR AP的平台标准中 SOME IP 和 DDS是在不同的应用场景和不同的需求下诞生的技术 xff0c 所以它们之间注定有很大的区别 SOME IP SOME IP的全称为 xff1a Sc
  • linux内核提高系统实时性,Linux操作系统实时性分析及改进策略

    摘要 xff1a 实时操作系统要求具有速度快和可预测性的特点 xff0c 必须保证实时任务在要求的时间内完成 本文在分析Linux操作系统的中断方式和进程调度等影响实时性的因素后 xff0c 对Linux的实时性策略进行改进 xff0c 提
  • switch ... case语句的用法

    当情况大于或等于4种的时候就用switch case语句 switch xff08 表达式 xff09 case 常量1 xff1a 语句体1 xff1b case 常量2 xff1a 语句体2 xff1b case 常量3 xff1a 语
  • 什么是eNodeB?eNodeB有什么主要功能?eNodeB与2G、3G的基站有什么区别?

    答 xff1a eNodeB xff08 简称为eNB xff09 是LTE网络中的无线基站 xff0c 也是LTE无线接入网的唯一网元 xff0c 负责空中接口相关的所有功能 xff1a xff08 1 xff09 无线链路维护功能 xf

随机推荐