android源码的编译问题总结

简介: 版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/47708233 由于目前的...
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/47708233

由于目前的项目需要修改android的内核源码,所以我需要从android源码的编译开始学习.

下面看一下我的编译环境.
我使用的Ubuntu系统的版本是14.04,64位.
gcc版本:4.8.8

编译过程我是看着google开发者官网,以及结合别人的博客进行编译的.编译的过程会遇到很多问题,在这里,我就把我遇到的问题总结一些,以便以后用到的时候容易查看,也方便别人编译android的时候遇到相同的问题,便于查看.

问题一:java版本问题
这里写图片描述

这个问题描述的是我当前使用的java版本是”1.7”,而正确的版本是java se 1.6,所以我们需要更换java.

解决办法:

1:使用命令(因为我使用的是openjdk)

sudo apt-get remove openjdk-7-jre openjdk-7-jdk openjdk-7-jre-headless

2:如果你使用的是JDK,为了以后还会使用,先讲全局变量中的export语句使用’#’注释掉即可.

3:安装Java SE 1.6
4:从官网下载并且解压之后,配置环境变量即可

问题二:编译问题

这里写图片描述

解决方法:

1:找到android源代码/frameworks/base/tools/aapt/Android.mk文件,编辑

找到第31行的LOCAL_CFLAGS,后面添加-fpermissive

这里写图片描述

2:找到android源代码frameworks/base/libs/utils/Android.mk文件,编辑
找到第64行的LOCAL_CFLAGS,后面添加-fpermissive

这里写图片描述

问题三:

这里写图片描述

解决办法:

cd external/srec

wget "https://github.com/CyanogenMod/android_external_srec/commit/4d7ae7b79eda47e489669fbbe1f91ec501d42fb2.diff"

patch -p1 < 4d7ae7b79eda47e489669fbbe1f91ec501d42fb2.diff

rm -f 4d7ae7b79eda47e489669fbbe1f91ec501d42fb2.diff

cd ../..

问题四:

这里写图片描述

这个问题仅仅需要将dalvik/vm/native/dalvik_system_Zygote.cpp中添加一句”#include

#include <getopt.h>

问题六:

这里写图片描述

解决办法:
在文件development/tools/emulator/opengl/Android.mk中的第25行后面添加 -fpermissive

这里写图片描述

错误七:

这里写图片描述

解决办法:

在文件/development/tools/emulator/opengl/host/renderer/Android.mk文件中的LOCAL_CFLAGS += -O0 -g的下一行添加"LOCAL_LDLIBS += -lX11"

LOCAL_PATH:=$(call my-dir)
# host renderer process ###########################
$(call emugl-begin-host-executable,emulator_renderer)
$(call emugl-import,libOpenglRender)
LOCAL_SRC_FILES := main.cpp
LOCAL_CFLAGS    += -O0 -g
LOCAL_LDLIBS += -lX11
#ifeq ($(HOST_OS),windows)
#LOCAL_LDLIBS += -lws2_32
#endif
$(call emugl-end-module)

错误八:

这里写图片描述

解决办法:

将文件build/core/combo/HOST_linux-x86.mk中的
HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0
替换为
HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0

错误八:
这里写图片描述

解决办法:

将文件中frameworks/compile/slang/Android.mk第22行中的-werror移除

这里写图片描述

错误九:
这里写图片描述

解决办法:
在文件external/llvm/lib/ExecutionEngine/JIT/Intercept.cpp中添加头文件

#define _LARGEFILE64_SOURCE
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>

错误十:

这里写图片描述

解决办法:

安装perl switch库

sudo apt-get install libswitch-perl

错误十一:

external/oprofile/libpp/format_output.h:94:22: 错误: reference ‘counts’ cannot be declared ‘muta
external/oprofile/libpp/format_output.h:94:22: 错误: reference ‘counts’ cannot be declared ‘muta…
针对这种情况,需要修改external/oprofile/libpp/format_output.h:94行
mutable counts_t & counts为
counts_t & counts

错误十二:

这里写图片描述

解决办法:

修改文件external/llvm/llvm-host-build.mk
中添加 LOCAL_LDLIBS := -lpthread -ldl

错误十三:

external/gtest/src/../include/gtest/gtest-param-test.h:1185:28: required from here
external/gtest/src/../include/gtest/internal/gtest-param-util-generated.h:77:26: error: ‘ValuesIn’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
return ValuesIn(array);

解决办法:

将文件/external/gtest/src/Android.mk中所有的”LOCAL_CFLAGS += -O0”修改为”LOCAL_CFLAGS += -O0 -fpermissive”

错误十四:
make: *
[out/host/linux-x86/obj/STATIC_LIBRARIES/libgtest_host_intermediates/gtest-all.o] Error 1

解决方法:

gedit external/gtest/include/gtest/internal/gtest-param-util.h 添加:

#include <cstddef>
目录
相关文章
|
3月前
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
223 1
|
3月前
|
Ubuntu 开发工具 Android开发
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
本文介绍了在基于Ubuntu 22.04的环境下配置Python 3.9、安装repo工具、下载和同步AOSP源码包以及处理repo同步错误的详细步骤。
209 0
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
|
22天前
|
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开发知识可参考相关书籍。
67 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
1月前
|
编译器 Android开发
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
|
1月前
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
|
3月前
|
开发工具 git 索引
repo sync 更新源码 android-12.0.0_r34, fatal: 不能重置索引文件至版本 ‘v2.27^0‘。
本文描述了在更新AOSP 12源码时遇到的repo同步错误,并提供了通过手动git pull更新repo工具来解决这一问题的方法。
119 1
|
3月前
|
Android开发 Docker 容器
docker中编译android aosp源码,出现Build sandboxing disabled due to nsjail error
在使用Docker编译Android AOSP源码时,如果遇到"Build sandboxing disabled due to nsjail error"的错误,可以通过在docker run命令中添加`--privileged`参数来解决权限不足的问题。
508 1
|
3月前
|
开发工具 uml git
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
本文分享了下载AOSP源码的方法,包括如何使用repo工具和处理常见的repo sync错误,以及配置Python环境以确保顺利同步特定版本的AOSP代码。
387 0
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
|
3月前
|
Java Android开发 芯片
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
本文介绍了如何将基于全志H713芯片的AOSP Android源码导入Android Studio以解决编译和编码问题,通过操作步骤的详细说明,展示了在Android Studio中利用代码提示和补全功能快速定位并修复编译错误的方法。
114 0
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
|
3月前
|
API 开发工具 Android开发
Android Studio:解决AOSP自编译framework.jar引用不到的问题
在Android Studio中解决AOSP自编译framework.jar引用问题的几种方法,包括使用相对路径、绝对路径和通过`${project.rootDir}`动态获取路径的方法,以避免硬编码路径带来的配置问题。
181 0
Android Studio:解决AOSP自编译framework.jar引用不到的问题