Android源码编译

article/2025/10/11 15:17:20

简要说明

现在的Android应用开发开源项目感觉就像春秋战国时期,各种思想雨后春笋,百花齐放,如算法,如图形,如数据库,如网络协议,林林总总、煞是好看,Github也成为了开源者及受益者的乐园,现在我们就跟随开源的脚步,追随耀眼的明星,站在巨人的肩膀上,开启我们的成长之路吧。

Android源码的开源,也是最大的开源了,当然有人会说是开放不是开源, 这个我们就不要计较了,能下载到我们需要的系统代码,已经很不错了。Android的源码下载编译对于初学者还是很头疼的, 我们就从这里开始吧。

下载安装VM虚拟机和ubuntu ios文件

我这里选的版本是7.1.5 build-491717 、ubuntu-11.04-desktop-i386

预备环境

本来呢, 选择的是4.4.1版本的源码,但是源码实在太大,都超过了我设定的虚拟机硬盘50G,果断放弃了,估计编译也得花很长时间。后来就选择了2.3.1版本的源码,下载源码之前首先要做一些准备工作

 买一个稳定的VPN,这是下载源码和所需软件

 安装Git工具

sudo apt-get install git-core gnupg

 安装Jdk

下面的增加、更新软件源的命令经常用到

sudo add-apt-repository ppa:ferramroberto/java

sudo apt-get update

安装

sudo apt-get install sun-java6-jre sun-java6-plugin

sudo apt-get install sun-java6-jdk

  

 下载repo,并设置权限

wget https://dl-ssl.google.com/dl/googlesource/git-repo/repo

chmod 777 repo

cp repo /bin/

创建一个Android的文件夹,并切换到它目录下

mkdir Android

cd Android

下载android源码

默认是下载最新版

repo init -u https://android.googlesource.com/platform/manifest

我是指定了2.3.1的版本分支

repo init -u https://android.googlesource.com/platform/manifest -b android-2.3.1_r1

接着就是下载了

repo sync

下载是个很漫长的过程,得网速稳定,能翻墙,大致需要2~3天吧,总大小有4~5G吧,速度快的话,可能还不要那么长时间

好了, 下载完的样子就如下图

 

Make编译

Make

当下载完,不要以为就结束了, 问题才刚刚开始, 呵呵。 为什么这样说呢, 因为编译的时候会遇到各式各样的问题, 主要是2方面:

 提示错误信息  You are attempting to build on a 32-bit system.

这里把检查是不是64位的脚本注释掉就行了

修改build/core目录下的main.mk文件:

     ifeq ($(BUILD_OS),linux)

     build_arch := $(shell uname -m)

     #Change the following line for building on a 32-bit system.

     #ifneq (64,$(findstring 64,$(build_arch)))

     #$(warning************************************************)

     #$(warning You are attempting to build on a 32-bit system.)

找到下列文件,也同时注释掉:

     /external/clearsilver/cgi/Android.mk

     /external/clearsilver/cs/Android.mk

     /external/clearsilver/java-jni/Android.mk

     /external/clearsilver/util/Android.mk

     修改LOCAL_CFLAGSLOCAL_LDFLAGS变量:

     # This forces a 64-bit build for Java6

   # Change the following two lines for building on a 32-bit system.

   # LOCAL_CFLAGS += -m64

   # LOCAL_LDFLAGS += -m64

 

 第二个出现的问题就是各种软件没有安装的问题

所以最好编译前安装好这些软件, 否则编译大半天出了问题还得,重头再来,那叫一个桑心啊。

sudo apt-get install bison

sudo apt-get install bison flex

sudo apt-get install zlib-devel

sudo apt-get install libncurses5-dev

sudo apt-get install libx11-dev

sudo apt-get install gperf

对于其他相似问题, 就百度一下看看缺少哪个,然后执行一下就好了,假如找不到这个,就的找找他在哪个源里面了, 把他添加到我们的软件源文件里面,然后再次初始化。

好了,下面就是Make成功后输出的消息,看着是不是很激动,呵呵

 

 

Emulator启动模拟器

这一步就简单多了,把我们编译后的输出bin添加到环境变量

export PATH=$PATH:~/Android/out/host/linux-x86/bin

export ANDROID_PRODUCT_OUT=~/Android/out/target/product/generic

运行emulator

emulator

下面就是我们期待已久的界面了,看到这个,前面的付出也算得到回报了

 


PS:编辑文字真麻烦, world过来各种样式都没了,也不支持离线编辑,哎。


联系作者

QQ 928320442

QQ群 323876830


http://chatgpt.dhexx.cn/article/CJNYUYuM.shtml

相关文章

Android编译系统介绍

1. 编译系统变化 Android 最初是用 Android.mk 来定义模块的, Android.mk 本质上就是 Makefile。随着 Android 工程越来越大,包含的模块越来越多,以 Makefile 组织的项目编译花费的时间越来越多。google 在 Android 7.0 开始引入了 ninja 编…

Android 编译系统

主要是没有一个完整的Android Build System 中文版,所以写了一个也可以以后作为参考。 1.Makefile & Android build system 在进行讲述Android编译系统之前,应该先了解一下编译时所使用的Makefile,或者说复习下这方面的知识,这…

自己编译安卓系统实践

一、需要的环境和信息来源 版本号与驱动匹配表:https://developers.google.com/android/drivers#hammerheadmra58k android细分版本号:https://source.android.com/setup/start/build-numbers?hlzh_cn 编译环境需求:https://source.androi…

Android 源码编译详解【合集篇】

Android 源码编译详解【一】:服务器硬件配置及机型推荐 做 Android系统开发多年,开发环境都是入职就搭建好了,入职时拿个账号密码就直接开始搞开发了,年初换了新公司,所有的项目都是刚起步,一切环境都要重新…

java枚举类型字段与mysql中数据类型映射关系

java枚举类型字段与mysql中数据类型映射关系 domain对象数据库字段swagger测试 domain对象 public class Business {/*** 商家类型*/private Integer type;/*** 状态*/private Integer status;}数据库字段 枚举值设置 swagger测试 type值设置为1,status值也设置…

java枚举类型的构造和get\set方法

可以看出枚举时和类平级的,是定义类级别的关键字 因为枚举都是直接用.xxx的形式,所以里面的值等都是静态的!!! 但是其也有get和set方法,构造方法等 常量 枚举(enum)类型是Java 5新…

Java枚举类型与泛型

一、枚举类型 1、使用枚举类型设置常量 以往设置常量,通常将常量放置在接口中,这样在程序中就可以直接使用,并且该常量不能被修改,因为在接口中定义常量时,该常量的修饰符为final与static。常规定义常量的代码如下所示…

【Java系列】深入解析枚举类型

序言 即便平凡的日子仿佛毫无波澜,但在某个特定的时刻,执着的努力便会显现出它的价值和意义。 希望这篇文章能让你不仅有一定的收获,而且可以愉快的学习,如果有什么建议,都可以留言和我交流 问题 思考一下这寄个问题&a…

Java枚举类型(enum)详解

文章目录 理解枚举类型枚举的定义枚举实现原理枚举的常见方法Enum抽象类常见方法编译器生成的Values方法与ValueOf方法 枚举与Class对象枚举的进阶用法向enum类添加方法与自定义构造函数关于覆盖enum类方法enum类中定义抽象方法enum类与接口 枚举与switch枚举与单例模式EnumMap…

java枚举数字_Java枚举类型的使用,数值的二进制表示

一.Java枚举类型的使用 首先请看这段代码: packagejava上课;public classEnumTest {public static voidmain(String[] args) {Size s=Size.SMALL; Size t=Size.LARGE;//s和t引用同一个对象? System.out.println(s==t);//是原始数据类型吗? System.out.println(s.getClass().…

java枚举类型赋值_java枚举类型(转载)

public class TestEnum { /*最普通的枚举*/ public enum ColorSelect { red, green, yellow, blue; } /* 枚举也可以象一般的类一样添加方法和属性,你可以为它添加静态和非静态的属性或方法,这一切都象你在一般的类中做的那样. */ public enum Season { // 枚举列表必须写在最前…

java 枚举类 int_【转】掌握java枚举类型(enum type)

原文网址:http://iaiai.iteye.com/blog/1843553 1 背景 在java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量。之前我们通常利用public final static 方法定义的代码如下,分别用1 表示春天,2表示夏天,3表示秋天,4表示冬天。 Java代码 p…

java枚举类型转换_java枚举类型enum值与整数的转换

java编程中偶尔会用到枚举,为了直观,我们通常将枚举值设置为形象的单词,方便理解和使用。枚举类型相当于数据库 中字典表,但是枚举只有字典表的值,缺少其他用来表示和值一一对应的字段,当我们在数据库中保存…

Java中的枚举类型

文章目录 前言一、枚举类简介二、枚举底层原理总结 前言 这里复习一下Java中的枚举类型。实际上,枚举类型是特殊的类,和C语言C中的枚举不太一样,下面我们做详细说明。关于枚举类型有一个单独的设计模式:即单例设计模式。单例类是…

Java枚举类型

目录 一、前言: 二、枚举类型: 三、底层原理 四、应用 应用一:定义常量 底层原理详解 应用二:添加新方法 应用三:与switch结合使用 应用四:实现接口 应用五:使用接口组织枚举 一、前言…

深入理解Java枚举类型(enum)

【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/71333103 出自【zejian的博客】 关联文章: 深入理解Java类型信息(Class对象)与反射…

Python中对基本文件操作

Python中对基本文件操作 一、前言二、创建和打开文件1.打开一个不存在的文件时先创建该文件2.以二进制形式打开文件3.打开文件时指定编码方式 三、关闭文件四、打开文件时使用with语句五、写入文件内容六、读取文件1.读取指定字符2.读取一行3.读取全部行 一、前言 在Python中&a…

C语言——文件操作

文章目录 1. 为什么使用文件2. 什么是文件2.1 程序文件2.2 数据文件2.3 文件名 3. 文件的打开和关闭3.1 文件指针3.2 文件的打开和关闭 4. 文件的顺序读写4.1 fgetc与fputc4.2 fgets与fputs4.3 fscant与fprintf4.3.1 fprintf4.3.2 fscanf 4.4 fread与fwrite4.4.1 fwrite4.4.2 f…

C语言之文件操作

目录 为什么使用文件 文件名 文件指针 流 文件的打开和关闭 前言 文件的打开方式 文件打开关闭函数 fopen函数 fclose函数 文件的顺序读写 fputc函数 fgetc函数 fputs函数 fgets函数 fprintf函数 fscanf函数 fwrite函数 fread函数 文件的随机读写 fseek函…

文件操作(图解)

文件操作 1、文件是什么?1.1 程序文件1.2 数据文件1.3 文件名 2、文件的打开和关闭2.1 文件指针2.2 文件的打开和关闭 3、文件的顺序读写4、文件的随机读写4.1 fseek4.2 ftell4.3 rewind 5、文本文件和二进制文件6、文件读取结束的判定6.1 被错误使用的feof 7、文件…