导航:首页 > 源码编译 > 编译aosp需要什么条件

编译aosp需要什么条件

发布时间:2023-07-10 23:52:36

编译aosp为什么要安装gcc

如果你的源程序是 C 语言的话,而你又是在 linux 系统下开发程序,那你就必须使用 gcc 编译器;如果你是在 UNIX 系统下开发 C 语言源程序,那么就要使用 cc 编译器。所以说,最关键的还是要看你的软件开发平台。

㈡ 自己可以编译安卓源码

用最新的Ubuntu 16.04,请首先确保自己已经安装了Git.没安装的同学可以通过以下命令进行安装:

sudo apt-get install git git config –global user.email “[email protected]” git config –global user.name “test”

其中[email protected]为你自己的邮箱.

简要说明

android源码编译的四个流程:1.源码下载;2.构建编译环境;3.编译源码;4运行.下文也将按照该流程讲述.

源码下载

由于某墙的原因,这里我们采用国内的镜像源进行下载.
目前,可用的镜像源一般是科大和清华的,具体使用差不多,这里我选择清华大学镜像进行说明.(参考:科大源,清华源)

repo工具下载及安装

通过执行以下命令实现repo工具的下载和安装

mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo

补充说明
这里,我来简单的介绍下repo工具,我们知道AOSP项目由不同的子项目组成,为了方便进行管理,Google采用Git对AOSP项目进行多仓库管理.在聊repo工具之前,我先带你来聊聊多仓库项目:

我们有个非常庞大的项目Pre,该项目由很多个子项目R1,R2,...Rn等组成,为了方便管理和协同开发,我们为每个子项目创立自己的仓库,整个项目的结构如下:


这里写图片描述

执行完该命令后,再使用make命令继续编译.某些情况下,当你执行jack-admin kill-server时可能提示你命令不存在,此时去你去out/host/linux-x86/bin/目录下会发现不存在jack-admin文件.如果我是你,我就会重新repo sync下,然后从头来过.

错误三:使用emulator时,虚拟机停在黑屏界面,点击无任何响应.此时,可能是kerner内核问题,解决方法如下:
执行如下命令:

  • ./out/host/linux-x86/bin/emulator -partition-size 1024 -kernel ./prebuilts/qemu-kernel/arm/kernel-qemu-armv7

  • 通过使用kernel-qemu-armv7内核 解决模拟器等待黑屏问题.而-partition-size 1024 则是解决警告: system partion siez adjusted to match image file (163 MB >66 MB)

    如果你一开始编译的版本是aosp_arm-eng,使用上述命令仍然不能解决等待黑屏问题时,不妨编译aosp_arm64-eng试试.

    结束吧

    到现在为止,你已经了解了整个android编译的流程.除此之外,我也简单的说明android源码的多仓库管理机制.下面,不妨自己动手尝试一下.

    ㈢ 手机支持pt是什么意思

    手机支持“PT”中的“PT”指的是谷歌的“project treble”。

    1、Google引入了一个名为 vendor interface1的理念,并用它将 Vender Implementation——由芯片制造商编写的设备专属的底层部分,从 Android 系统框架中剥离出来。

    2、以往Android智能手机升级的步骤非常繁杂。首先,Android开发团队以最快速的将最新版本开放源代码。然后,芯片制造商(高通、MTK)进行修改以满足特定的硬件,尤其是适配驱动和电源管理机制,再发布给设备制造商。

    3、谷歌表示,Android智能手机更新到最新版本的过程非常耗时,而且对大量智能手机厂商来说成本不低,这就是为什么如今Android操作系统市场份额如此零散的最大原因。

    (3)编译aosp需要什么条件扩展阅读:

    手机支持project treble的意义

    手机如果想要预装或升级 Android 8.0,都必须先经过 Project Treble 的认证。这个认证过程意味着,在 OEM 厂商对 AOSP 源码进行定制前,这部手机就已经能够运行 AOSP 系统并通过 CDD、VTS 等一系列测试了。

    Project Treble除了能缓解系统碎片化之外,还能使自定义 Rom 更简单。曾经便有一位开发者仅在一天内就开发出了华为 Mate 9的 Android Oreo Rom。


    ㈣ Android学习之Build环境介绍


    这里略过对android在手机上的文件系统框架的阐述(google或者都能帮助你找到对应的信息),主要看google是如何把生成合适的rootfs的工作整合到它的build体系当中,同时,会顺带看一下CyanogenMod中对应各种机型的build机制。
    首先,来看一下Android的build系统中,使用到的编译选项和相关工具
    具体的目录在:mydroid/build/tools/下
    |-- acp
    这是一个稍微改良的cp命令,用来应付在windows/MAC/Linux下的cp命令的缺陷,其中的README很值得一看!
    |-- adbs
    这是一个用来查看crash问题的工具,详细请看《Android调试工具之adbs》
    |-- Android.mk
    |-- apicheck
    用来进行发布前的API检查(参见mydroid/build/core/tasks/apicheck.mk),是否新编译的系统中有破坏API兼容性或是非法的API
    这里的代码是用java写的用来检查编译时生成的API相关信息的xml文件(mydroid/framework/base/api/中),可以参考里面对于xml文件解析的代码
    |-- apriori
    实现prelink的工具,简单介绍参见(mydroid/bionic/linker/README.TXT)
    |-- atree
    为android SDK服务的一个工具,用来按照指定xxx.atree文件中的内容进行一些文件操作
    |-- bin2asm
    不太明白具体的用处,应该是用来应付mac上编译android一些与gcc相关的问题
    |-- buildinfo.sh
    生成target中的各种xxx.prop文件,如system.prop, build.prop等
    |-- check_builds.sh
    包装了diff,用来看2个发布版本之间变化
    |-- check_prereq
    device上进行ota升级时的工具之一
    |-- compare_fileslist.py
    与check_builds.sh配合完成版本比较的脚本
    |-- droiddoc
    Android更具javadoc的一些移植
    |-- mp-package-stats
    简单的查看一个jar/apk文件内的dex和其它文件的大小信息
    |-- event_log_tags.py
    处理event-log-tags的内容,关于event-log-tags文件的意义参见《Android学习之event-log-tags是神马》
    |-- fileslist.py
    简化的列出指定目录下所有文件及大小的脚本 -- 可以放入自己的工具库了使用:)
    |-- findleaves.py
    在指定目录中(可多个)找指定文件的脚本 -- 可以放入自己的工具库了使用:)
    |-- fixlinebreaks.sh
    把windows中的换行改为linux下的 -- 可以放入自己的工具库了使用:大散芦)
    |-- fs_config
    列出指定文件夹滚带及文件的权限
    |-- fs_get_stats
    得到指定文件夹下文件的简单stats信息
    |-- iself
    判断文件是否是ELF格式
    |-- isprelinked
    判断文件是否是prelink过的
    |-- java-event-log-tags.py
    处理event-log-tags的内容,关于event-log-tags文件的意义参见《Android学习之event-log-tags是神马》
    |-- kcm
    key character map的工具, 相关资料参照:
    |-- lsd
    !!!!!! ???
    |-- merge-event-log-tags.py
    处理event-log-tags的内容,关于event-log-tags文件的意掘野义参见《Android学习之event-log-tags是神马》
    |-- mktarball.sh
    与fs_get_stats配合而执行的打包工具
    |-- print_mole_licenses.sh
    显示当前目录下所有mole信息
    |-- releasetools
    -- check_target_files_signatures
    |-- common.py
    |-- edify_generator.py
    |-- img_from_target_files
    |-- ota_from_target_files
    `-- sign_target_files_apks
    |-- rgb2565
    rgb转换工具
    |-- signapk
    命令行下对jar包签名的工具
    |-- soslim
    Android定制的编译工具之一,简单介绍参见(mydroid/bionic/linker/README.TXT)
    |-- warn.py
    解析Android系统编译log的工具
    `-- zipalign
    zipfile的对齐工具,参见该文件夹下的README.TXT
    #p#副标题#e#
    在来看看Android编译系统中定义的一些通用XXX.mk文件
    mydroid/build/core/
    |-- armelflib.x
    |-- armelf.x
    |-- armelf.xsc
    |-- base_rules.mk
    |-- binary.mk
    |-- build_id.mk
    |-- build-system.html
    |-- checktree
    |-- cleanbuild.mk
    |-- cleanspec.mk
    |-- clear_vars.mk
    |-- combo
    |-- config.mk
    |-- _headers.mk
    |-- definitions.mk
    |-- device.mk
    |-- dex_preopt.mk
    |-- distdir.mk
    |-- droiddoc.mk
    |-- mpvar.mk
    |-- dynamic_binary.mk
    |-- envsetup.mk
    |-- executable.mk
    |-- filter_symbols.sh
    |-- find-jdk-tools-jar.sh
    |-- help.mk
    |-- host_executable.mk
    |-- host_java_library.mk
    |-- host_native_test.mk
    |-- host_prebuilt.mk
    |-- host_shared_library.mk
    |-- host_static_library.mk
    |-- java_library.mk
    |-- java.mk
    |-- legacy_prebuilts.mk
    |-- main.mk
    |-- Makefile
    |-- multi_prebuilt.mk
    |-- native_test.mk
    |-- node_fns.mk
    |-- notice_files.mk
    |-- package.mk
    |-- pathmap.mk |-- phony_package.mk
    |-- prebuilt.mk
    |-- process_wrapper_gdb.cmds
    |-- process_wrapper_gdb.sh
    |-- process_wrapper.sh
    |-- proct_config.mk
    |-- proct.mk
    |-- proguard.flags
    |-- proguard_tests.flags
    |-- raw_executable.mk
    |-- raw_static_library.mk
    |-- root.mk
    |-- shared_library.mk
    |-- static_java_library.mk
    |-- static_library.mk
    |-- tasks
    |-- user_tags.mk
    `-- version_defaults.mk
    #p#副标题#e#
    这里,目录在mydroid/build/core/tasks/有一些特别的task
    |-- apicheck.mk, 判断api是否符合AOSP的规范
    |-- cts.mk cts测试, 可以在代码根目录, make cts, 编译结束之后,进入out/host/linux-x86/bin/下,执行cts命令
    |-- ide.mk IDE开发环境
    |-- proct-graph.mk
    `-- sdk-addon.mk
    NDK的build环境没有包含在标注难得AOSP的/build/目录下
    而是在mydroid/ndk/build下
    $ cd ndk/build/tools
    $ export ANDROID_NDK_ROOT=aosp-root/ndk
    $ ./make-release --help
    一些小技巧
    如何显示每次编译所包含的所有xxx.mk文件
    找到build/core/main.mk
    把include $(subdir_makefiles)替换为
    [plain] view plain $(foreach subdir_makefile, $(subdir_makefiles),
    $(info Including $(subdir_makefile))
    $(eval include $(subdir_makefile)))
    subdir_makefile :=
    如果遇见API相关的PACKAGING/checkapi-current-timestamp] Error 38
    需要执行:make update-api
    如何在AOSP代码目录之外编译
    [plain] view plain # Paths and settings
    TARGET_PRODUCT = generic
    ANDROID_ROOT = /home/karim/android/aosp-2.3.x
    BIONIC_LIBC = $(ANDROID_ROOT)/bionic/libc
    PRODUCT_OUT = $(ANDROID_ROOT)/out/target/proct/$(TARGET_PRODUCT)
    CROSS_COMPILE =
    $(ANDROID_ROOT)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
    # Tool names
    AS = $(CROSS_COMPILE)as
    AR = $(CROSS_COMPILE)ar
    CC = $(CROSS_COMPILE)gcc
    CPP = $(CC) -E
    LD = $(CROSS_COMPILE)ld
    NM = $(CROSS_COMPILE)nm
    OBJCOPY = $(CROSS_COMPILE)obj
    OBJDUMP = $(CROSS_COMPILE)objmp
    RANLIB = $(CROSS_COMPILE)ranlib
    READELF = $(CROSS_COMPILE)readelf
    SIZE = $(CROSS_COMPILE)size
    STRINGS = $(CROSS_COMPILE)strings
    STRIP = $(CROSS_COMPILE)strip
    export AS AR CC CPP LD NM OBJCOPY OBJDUMP RANLIB READELF
    SIZE STRINGS STRIP
    # Build settings
    CFLAGS = -O2 -Wall -fno-short-enums
    HEADER_OPS = -I$(BIONIC_LIBC)/arch-arm/include
    -I$(BIONIC_LIBC)/kernel/common
    -I$(BIONIC_LIBC)/kernel/arch-arm
    LDFLAGS = -nostdlib -Wl,-dynamic-linker,/system/bin/linker
    $(PRODUCT_OUT)/obj/lib/crtbegin_dynamic.o
    $(PRODUCT_OUT)/obj/lib/crtend_android.o
    -L$(PRODUCT_OUT)/obj/lib -lc -ldl
    # Installation variables
    EXEC_NAME = example-app
    INSTALL = install
    INSTALL_DIR = $(PRODUCT_OUT)/system/bin
    # Files needed for the build
    OBJS = example-app.o
    # Make rules
    all: example-app
    .c.o:
    $(CC) $(CFLAGS) $(HEADER_OPS) -c {1}lt;
    example-app: ${OBJS}
    $(CC) -o $(EXEC_NAME) ${OBJS} $(LDFLAGS)
    install: example-app
    test -d $(INSTALL_DIR) || $(INSTALL) -d -m 755 $(INSTALL_DIR)
    $(INSTALL) -m 755 $(EXEC_NAME) $(INSTALL_DIR)
    clean:
    rm -f *.o $(EXEC_NAME) core
    distclean:
    rm -f *~
    rm -f *.o $(EXEC_NAME) core
    如何增加一个新的设备
    [plain] view plain $ cd ~/android/aosp-2.3.x
    $ . build/envsetup.sh
    $ mkdir -p device/acme/coyotepad
    $ cd device/acme/coyotepad
    进入AndroidProcts.mk
    PRODUCT_MAKEFILES :=
    $(LOCAL_DIR)/full_coyotepad.mk
    对于full_coyotepad.mk
    $(call inherit-proct, $(SRC_TARGET_DIR)/proct/languages_full.mk)
    $(call inherit-proct, $(SRC_TARGET_DIR)/proct/full.mk)
    DEVICE_PACKAGE_OVERLAYS :=
    PRODUCT_PACKAGES +=
    PRODUCT_COPY_FILES +=
    PRODUCT_NAME := full_coyotepad
    PRODUCT_DEVICE := coyotepad
    PRODUCT_MODEL := Full Android on CoyotePad, meep-meep
    在BoardConfig.mk中
    TARGET_NO_KERNEL := true
    TARGET_NO_BOOTLOADER := true
    TARGET_CPU_ABI := armeabi
    BOARD_USES_GENERIC_AUDIO := true
    USE_CAMERA_STUB := true
    打开vendorsetup.sh
    add_lunch_combo full_coyotepad-eng
    #p#副标题#e#

    ㈤ Android在Ubuntu下编译完整aosp需要多少硬盘空间

    6.0以后的AOSP我没编译过,不太了解需要多大空间。
    不过5.1.1我倒是编过,你可以参考一下:mac编译aosp的配置需求? - 知乎用户的回答
    编译完了,大概占用了60G,6.0可能会更大一些。
    像你列举的250G等容量的硬盘,用来编AOSP,容量上是绰绰有余的。其实如果经济上允许,推荐你选择一个SSD,对于编译速度的提升,效果显着。

    ㈥ 大牛们是怎么阅读 Android 系统源码的

    由于工作需要大量修改framework代码, 在AOSP(Android Open Source Project)源码上花费了不少功夫, Application端和Services端都看和改了不少.
    如果只是想看看一些常用类的实现, 在Android包管理器里把源码下载下来, 随便一个IDE配好Source Code的path看就行.
    但如果想深入的了解Android系统, 那么可以看下我的一些简单的总结.

    知识
    Java
    Java是AOSP的主要语言之一. 没得说, 必需熟练掌握.
    熟练的Android App开发
    Linux
    Android基于Linux的, 并且AOSP的推荐编译环境是Ubuntu 12.04. 所以熟练的使用并了解Linux这个系统是必不可少的. 如果你想了解偏底层的代码, 那么必需了解基本的Linux环境下的程序开发. 如果再深入到驱动层, 那么Kernel相关的知识也要具备.
    Make
    AOSP使用Make系统进行编译. 了解基本的Makefile编写会让你更清晰了解AOSP这个庞大的项目是如何构建起来的.
    Git
    AOSP使用git+repo进行源码管理. 这应该是程序员必备技能吧.
    C++
    Android系统的一些性能敏感模块及第三方库是用C++实现的, 比如: Input系统, Chromium项目(WebView的底层实现).

    硬件
    流畅的国际网络
    AOSP代码下载需要你拥有一个流畅的国际网络. 如果在下载代码这一步就失去耐心的话, 那你肯定没有耐心去看那乱糟糟的AOSP代码. 另外, 好程序员应该都会需要一个流畅的Google.
    一台运行Ubuntu 12.04的PC.
    如果只是阅读源码而不做太多修改的话, 其实不需要太高的配置.
    一台Nexus设备
    AOSP项目默认只支持Nexus系列设备. 没有也没关系, 你依然可以读代码. 但如果你想在大牛之路走的更远, 还是改改代码, 然后刷机调试看看吧.
    高品质USB线
    要刷机时线坏了, 没有更窝心的事儿了.
    软件
    Ubuntu 12.04
    官方推荐, 没得选.
    Oracle Java 1.6
    注意不要用OpenJDK. 这是个坑, 官方文档虽然有写, 但还是单独提一下.
    安装:
    sudo apt-get install python-software-properties
    sudo add-apt-repository ppa:webupd8team/java
    sudo apt-get update
    sudo apt-get install oracle-java6-installer
    sudo apt-get install oracle-java6-set-default

    Eclipse
    估计会有不少人吐槽, 为什么要用这个老古董. 其实原因很简单, 合适. 刚开始搞AOSP时, 为了找到效率最优的工具, 我尝试过Eclipse, IntelliJ IDEA, Vim+Ctags, Sublime Text+Ctags. 最终结果还是Eclipse. 主要优点有:
    有语法分析 (快速准确的类, 方法跳转).
    支持C++ (IntelliJ的C++支持做的太慢了).
    嵌入了DDMS, View Hierarchy等调试工具.
    为了提高效率, 花5分钟背下常用快捷键非常非常值得.
    调整好你的classpath, 不要导入无用的代码. 因为AOSP项目代码实在是太多了. 当你还不需要看C++代码时, 不要为项目添加C++支持, 建索引过程会让你崩溃.
    Intellij IDEA
    开发App必备. 当你要调试系统的某个功能是, 常常需要迅速写出一个调试用App, 这个时候老旧的Eclipse就不好用了. Itellij IDEA的xml自动补全非常给力.
    巨人的肩膀

    这个一定要先读. 项目介绍, 代码下载, 环境搭建, 刷机方法, Eclipse配置都在这里. 这是一切的基础.

    这个其实是给App开发者看的. 但是里面也有不少关于系统机制的介绍, 值得细读.

    此老罗非彼老罗. 罗升阳老师的博客非常有营养, 基本可以作为指引你开始阅读AOSP源码的教程. 你可以按照博客的时间顺序一篇篇挑需要的看.但这个系列的博客有些问题:
    早期的博客是基于旧版本的Android;
    大量的代码流程追踪. 读文章时你一定要清楚你在看的东西在整个系统处于什么样的位置.

    邓凡平老师也是为Android大牛, 博客同样很有营养. 但是不像罗升阳老师的那么系统. 更多的是一些技术点的深入探讨.

    Android官方Issue列表. 我在开发过程中发现过一些奇怪的bug, 最后发现这里基本都有记录. 当然你可以提一些新的, 有没有人改就是另外一回事了.

    一定要能流畅的使用这个工具. 大量的相关知识是没有人系统的总结的, 你需要自己搞定.
    其它
    代码组织
    AOSP的编译单元不是和git项目一一对应的, 而是和Android.mk文件一一对应的. 善用mmm命令进行模块编译将节省你大量的时间.
    Binder
    这是Android最基础的进程间通讯. 在Application和System services之间大量使用. 你不仅要知道AIDL如何使用, 也要知道如何手写Binder接口. 这对你理解Android的Application和System services如何交互有非常重要的作用. Binder如何实现的倒不必着急看.
    HAL
    除非你对硬件特别感兴趣或者想去方案公司上班, 否则别花太多时间在这一层.
    CyanogenMod
    这是一个基于AOSP的第三方Rom. 从这个项目的wiki里你能学到很多AOSP官方没有告诉你的东西. 比如如何支持Nexus以外的设备.
    DIA
    这是一个Linux下画UML的工具, 能够帮你梳理看过的代码.
    XDA

    这里有最新资讯和最有趣的论坛.
    想到了再补充.

    ㈦ 如何编译一个可以烧写进手机中的ROM,Android安卓开发者

    首先.还是跟其它文章讲的一样.先下载ANDORID的源码.在下源码之前.请看下面第一步
    ----------
    增加代码,下真机配置

    1
    vim .repo/local_manifest.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <manifest>
    <project path="kernel" name="kernel/msm" revision="refs/heads/android-msm-2.6.29"/>
    <project path="hardware/htc/dream" name="platform/hardware/htc/dream" revision="master"/>

    </manifest>

    增加上面这段代码,为一个配置.告诉服务器.我们下的代码.是要装进真机的.
    (就为了多下载一个KERNEL下来。。还有下载DREAM的真机配置参数..)

    小哈在这里折腾了很久.很久..非常久..回忆起来内牛满面

    -----
    下相关的代码

    2.

    repo sync

    -----
    3.
    vim env_rc
    加入:
    export EMU=/home/coconut/cupcake/out/host/linux-x86/bin
    export ARCH=arm
    export CROSS_COMPILE=arm-eabi-
    export PATH=$PATH:/home/coconut/cupcake/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin:${EMU}

    source env_rc

    4.

    编译内核及无线网络驱动

    $ cd $ANDROID/kernel
    $ make ARCH=arm CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- msm_defconfig # 设定默认的msm配置

    #编译内核
    make ARCH=arm CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-

    #编译无线网络驱动
    cd $ANDROID/system/wlan/ti/sta_dk_4_0_4_32
    make ARCH=arm CROSS_COMPILE=$ANDROID/prebuilt/linux-86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- KERNEL_DIR=$ANDROID/kernel

    //内核拷到目录下
    $ cp $ANDROID/kernel/arch/arm/boot/zImage $ANDROID/vendor/htc/dream-open/kernel
    $ cp $ANDROID/system/wlan/ti/sta_dk_4_0_4_32/wlan.ko $ANDROID/vendor/htc/dream-open/wlan.ko

    5.
    在HTC网站(developer.htc.com/adp.html)
    下载名为signed-dream_devphone_userdebug-ota-14721.zip的包,并把它放在$ANDROID目录下
    $ cd $ANDROID
    $ source build/envsetup.sh

    $ lunch aosp_dream_us-eng # 指明机型
    这样编译出来.就会在OUT下出来一个DREAM_OPEN的目录.里面就有相关的镜像文件了.

    $ cd vendor/htc/dream-open
    $ ./unzip-files.sh # 解压htc相关驱动
    $ cd $ANDROID
    $ vi buildspec.mk # 新建配置文件

    ----
    Vim htc_dream.mk

    vim /oracle/android/src/vendor/htc/dream-open/htc_dream.mk

    在头部增加
    PRODUCT_PACKAGES := \
    Calculator \
    Email \
    ImProvider \
    SdkSetup \
    VoiceDialer

    完成。
    回到根目录

    cd /oracle/android/src
    vim buildspec.mk
    加入( 2010.7.7 不需要加入):
    #TARGET_PRODUCT:=htc_dream
    #TARGET_PREBUILT_KERNEL:=kernel/arch/arm/boot/zImage

    增加:
    CUSTOM_LOCALES:=zh_CN

    然后:

    其中增加环境:
    ubuntu 8.10 , sudo apt-get libelf-dev

    make clean

    // 保证PC有 1280 内存, 加上 1000 SWAP空间..虚拟机也是如此.
    然后开始编译 BOOT.IMG SYSTEM.IMG USERDATA.IMG:
    make -j2

    接下来
    mmm -B $ANDROID/packages/apps/Luancher/ snod

    cd out/target/proct/dream-open/

    //先测试:
    emulator -system . -kernel ~/cupcake/prebuilt/android-arm/kernel/kernel-qemu -data userdata.img
    因为出来了BOOT.IMG.这个是真机的..所以不能用BOOT做为内核.要用模拟器来做内核.

    //然后开始烧机
    fastboot flash boot boot.img
    fastboot flash system system.img
    fastboot flash userdata userdata.img

    fastboot reboot

    ㈧ 鸿蒙抄袭安卓看这一篇就够了



    01


    什么是 AOSP ?


    很多人都说鸿蒙是 AOSP 套壳,那么我们首先得明白什么是 AOSP?

    AOSP 是"Android Open Source Project"的缩写,中文意为"安卓开放源代码项目", AOSP 是基于 Linux 开的。

    AOSP 是由谷歌主导的一个开源项目,通过 AOSP 可以编译出一个比较纯净的,可以用于智能设备的操作系统。

    而 Android,尤其是首字母 A 大写的时候,是属于谷歌的一个商标,不属于 AOSP 所有,未经允许不能随意在商业产品中使用。

    Android 系统是开源的 AOSP 和额外的闭源部分(其中包括 GMS )的组合而成,所以可以认为 Android=AOSP+GMS 。

    网友有一个通俗的比喻: AOSP 是个毛坯房,Android 是个精装房

    由于 AOSP 是开源的,一些第三方机构就可以以 AOSP 为基础,做出自己的改进,并对不同机型适配,然后自己取一个名字。

    比如小米的 MIUI、华为的 EMUI、或者魅族的 Flyme。

    02

    什么是鸿蒙?

    鸿蒙是一个面向全场景的分布式操作系统,蒙是基于微内核的全场景分布式操作系统,目前华为已经将鸿蒙捐献给了 开放原子开源基金会

    有人说鸿蒙是基于 2012 年华为的 LiteOS 开发而来,LiteOS 是轻量级物联网操作系统,目前也以及完全开源。

    从客观上来讲,鸿蒙肯定借鉴了 LiteOS 开发中所积累的经验,所以 华为鸿蒙OS 算是 LiteOS 的一个发展产物 ,但它们是两款完全不同的操作系统。

    这里还需要和大家明确,区分一个概念,说实话如果不是为了给大家写这篇文章,查了很多资料,不然我也混淆的。

    Openharmony 和 HarmonyOS(鸿蒙操作系统) 是两个完全不同的概念!

    HarmonyOS 是华为研发的面向万物互联时代的全新的、独立的智能终端操作系统,为不同设备的智能化、互联与协同提供统一的语言。

    华为把 HarmonyOS 中基础功能提取出来,打包成功一个项目叫做:Openharmony ,把 Openharmony 捐献给原子开源基金会。

    华为这次发布的 HarmonyOS 2 是华为基于开源项目 OpenHarmony 2.0 开发的面向多种全场景智能设备的商用版本。

    OpenHarmony 是华为主要贡献的,不属于华为,属于开源组织;而 HarmonyOS 是华为的商业系统,属于华为拥有。

    03

    国产厂商为什么不跟进?

    大家如果明白上面这两个概念的区别之后,就应该很容易明白,为什么国内厂商没有跟进鸿蒙?

    上面说的有点绕,做一个简单的比喻大家应该就明白了:

    HarmonyOS 2 = Openharmony 2 + 华为的 EMUI + 兼容安卓部分

    根据这个公式,我们可以回答好几个问题:

    1、Openharmony 是不兼容安卓的,也没有什么 AOSP 的事情,是一个纯正、独立的开源操作系统。

    2、 HarmonyOS 2 是不开源的,是华为基于 Openharmony 2 开发的一个商业版本。

    为了兼容安卓应用,必定使用了一些 AOSP 的内容,同时华为是不可能将 EMUI 开放给同行的,所以同行厂商没办法直接使用 HarmonyOS 2

    3、如果让国内同行都兼容鸿蒙的话,他们需要做的工作是:基于 Openharmony 2 开发自己的 UI。

    比如 MIUI + 兼容以前应用,工作量巨大,可能不是一时半会就可以搞定,同时他们还需要考虑谷歌在国外对他们制裁的风险。

    可以套用上面的比如: Openharmony 2 是个毛坯房,而 HarmonyOS 2 是个精装房。

    而小米OV等厂商要使用鸿蒙,至少需要他们自己来装修吧,全部用 HarmonyOS 2 ,大家体验完全一致没有差异化,也没有什么意思。

    并且,小米OV他们肯定也不会放弃自己的 MUUI、Flyme,因为这是他们的核心竞争力和收入来源呀。

    说实话,现在硬要小米、VIVO、OPPO等支持鸿蒙,也有一点强人所难,可能需要有一个过程慢慢来准备吧。



    阅读全文

    与编译aosp需要什么条件相关的资料

    热点内容
    卡尔曼滤波算法书籍 浏览:769
    安卓手机怎么用爱思助手传文件进苹果手机上 浏览:844
    安卓怎么下载60秒生存 浏览:803
    外向式文件夹 浏览:240
    dospdf 浏览:431
    怎么修改腾讯云服务器ip 浏览:392
    pdftoeps 浏览:496
    为什么鸿蒙那么像安卓 浏览:736
    安卓手机怎么拍自媒体视频 浏览:186
    单片机各个中断的初始化 浏览:724
    python怎么集合元素 浏览:481
    python逐条解读 浏览:833
    基于单片机的湿度控制 浏览:499
    ios如何使用安卓的帐号 浏览:883
    程序员公园采访 浏览:812
    程序员实战教程要多长时间 浏览:979
    企业数据加密技巧 浏览:135
    租云服务器开发 浏览:814
    程序员告白妈妈不同意 浏览:337
    攻城掠地怎么查看服务器 浏览:601