Android源码编译问题

编译环境

  1. 操作系统信息
Linux username-OptiPlex-7060 4.15.0-45-generic #48~16.04.1-Ubuntu SMP Tue Jan 29 18:03:48 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
  1. jdk版本信息
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-8u292-b10-0ubuntu1~16.04.1-b10)
OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)
  1. 编译环境搭建
    参考官网文档:Android编译环境搭建
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

如果出现:
    E:无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系依赖错误

解决方法为:

  1. 安装aptitude
sudo apt-get install aptitude
  1. 使用aptitude安装依赖
sudo aptitude 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

      对于ubantu16.04.1来说,仅仅安装官网指定的依赖是不够的,还需要安装依赖:libssl-dev

sudo apt-get install libssl-dev

      同样,如果出现依赖问题,仍采用aptitude安装解决依赖问题.

编译过程中出现的问题

1. ninja: build stopped: subcommand failed Android
ninja报错
       出现这个问题,一般是jack或者内存分配的问题,可以参考文档: ninja解决参考文档.
       当然,也有可能并不是jack-server和内存分配的问题,也有可能是下载的源码不完整,未配置所需的依赖等问题.如果出现这个问题,不要在jack-server和内存上死磕,可以看看自己的环境配置问题.

2. fatal error: openssl/bio.h: No such file or directory
       这个问题是在我安装完Android官网依赖之后编译出现的,由于ubantu版本不同,官网指定的依赖环境没有这个依赖,因此需要单独安装.
      安装依赖,详见本文编译环境

编译完成

  经历了两天的挣扎,最终编译成功,想顺便了解一下编译过程中出现错误的原因.

1. jack
  开发者文档
     官方文档中对于jack的描述如下:

>*For devices running Android version 5.0 (API level 21) or higher, each app runs in its own process and with its own instance of the Android Runtime (ART). ART is written to run multiple virtual machines on low-memory devices by executing DEX files, a bytecode format designed specially for Android that's optimized for minimal memory footprint. Build tools, such as jack, compile Java sources into DEX bytecode, which can run on the Android platform.*

根据官方文档的描述,jack是一种编译工具链,在编译的过程中,jack将java源代码编译成DEX字节码,使其可以再Android平台上运行.而DEX字节码,是一种专门为Android设计的字节码格式,经过优化,使得字节码占用的你内存很小.
在编译源码的时候,jack还有一种错误可能会导致编译失败:多个用户同时编译.
原因在于,在Android5.0 或者更高的版本,每个应用都在自己的进程中运行,并且有自己的Android Runtime(ART)实例.

2. ART
       ART的主要功能包括:
        - 预编译(AOT)和及时编译(JIT)
        - 垃圾回收(GC)
        - Android 9之后,支持将DEX文件转换为更加紧凑的机器代码
        - 支持调试,包括专用采样分析,详细的诊断异常和奔溃报告,并且能够设置观察点来监控特定字段.
3. libssl-dev
     libssl-dev是OpenSSL通用库
     SSL(Secure Socket Layer),是一种加密协议,采用秘钥进行数据传输,https就是http和ssl的结合.
    OpenSSL是广泛使用的商业级SSL工具.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值