皮皮网

【旅游司南APP源码】【flink内存管理源码】【autojs8.0源码】aosp源码下编译ndk

2024-12-27 16:40:11 来源:梦幻源码模块

1.阿里平头哥宣布,源码译自研处理器已成功落地,下编它的源码译性能如何?
2.安卓和iOS的区别
3.Android学习之Build环境介绍

aosp源码下编译ndk

阿里平头哥宣布,自研处理器已成功落地,下编它的源码译性能如何?

            阿里巴巴宣布旗下的平头哥半导体完成了安卓对RISC-V的移植并开源了全部相关代码。从平头哥社区发布的下编旅游司南APP源码信息来看,安卓系统已经可以在玄铁芯片上流畅运行。源码译

        作为一种开源的下编处理器指令,RISC-V近年来备受热捧,源码译但是下编目前主要还是用于AI、嵌入式、源码译IoT等领域,下编移动终端领域至一直仍未有相关RISC-V芯片厂商涉足,源码译flink内存管理源码主要还是下编安卓系统对RISC-V支持不够。今天阿里巴巴方面宣布了一个重要进展,源码译旗下的平头哥半导体完成了安卓对RISC-V的移植并开源了全部相关代码。从平头哥社区发布的信息来看,安卓系统已经可以在玄铁芯片上流畅运行。

     据了解,autojs8.0源码平头哥基于安卓开源项目(AOSP)实现了对RISC-V架构的支持。安卓软件栈主要包括系统内核、硬件抽象、运行时、框架层、应用五个层次的jvm源码怎么读近千个软件包,其中涉及到处理器架构相关移植工作主要包含:本地库与ART支持、Linux内核支持、build系统支持三大部分:  

 本地库与ART支持:

       完成bionic、ART、Clang/LLVM、V8、aisde锁机源码NDK、VNDK、OpenGL等软件包的RISC-V架构支持:为bionic添加动态链接、系统调用、浮点数学库的支持;基于ART实现了RISC-V架构的DEX实时解释执行、dex2oat、JNI调用以及JIT编译优化,极大地提高了JAVA程序在RISC-V平台上执行的效率。 

Linux内核支持:

       完善了Clang/LLVM对Linux内核的编译支持,修复了大量Clang/LLVM的问题,首次将RISC-V架构的Linux内核与安卓系统进行了适配。 

Build系统支持:

       安卓的编译框架主要由blueprint和soong构成,平头哥整合编译框架、预编译的工具链、本地方法库、模拟器,应用和服务等模块,首次实现了RISC-V架构对安卓build系统的支持。 

              至于玄铁,则是前年阿里巴巴旗下的平头哥半导体发布的一款号称是业界最强的RISC-V处理器内核IP。资料显示,玄铁单核性能达到7.1 Coremark/MHz,主频达到2.5GHz,比当时业界最好的RISC-V处理器性能高%以上。据介绍,玄铁可以用于设计制造高性能端上芯片,应用于5G、人工智能以及自动驾驶等领域。

安卓和iOS的区别

       ã€€1. 应用的设备不同:

       ã€€ã€€IOS和安卓最大的区别在于本身所应用的设备不同。IOS系统主要是应用在iPhone、IPad、itouch设备上的操作系统,安卓系统主要是应用在安卓智能手机上的操作系统。

       ã€€ã€€2. 面向人群不同:

       ã€€ã€€IOS系统面向的是中高层收入的人群,有人称它为“高富帅”系统,而安卓系统则是面试中低层的大众人群,有人称它为“屌丝系统”。

       ã€€ã€€3.系统的开放性区别:

       ã€€ã€€å®‰å“拥有自己的开源计划AOSP(Android Open Source Project),只要遵循GPL和Apache Licence 2.0开源协议,那么你就可以使用安卓源代码进行二次开发。而安卓由于源代码开放,自然可玩性也比iOS高。此外,安卓比iOS开放了更多的应用接口API,可以很自然地利用安卓实现很多在iOS上不折腾就没法做的功能。在安卓,可以随心随意地更换输入法,随意用任何浏览器打开链接,随意从任何途经安装程序,随意调用第三方程序分享文件——这些在iOS上不越狱都做不到,即使越狱也未必比安卓做得更好。

       ã€€ã€€4. 系统的安全性区别:

       ã€€ã€€IOS系统是一款比较强大的操作系统,在IOS系统运行的程序不管程序多大都不会造成死机,玩起来非常的流程,而且系统的安全性比较高。

       ã€€ã€€å®‰å“系统是属于代码系统,如果所有的应用程序需要下载下来之后才能玩,系统用久之后会经常出现卡机或者是死机的现象,而且安卓系统还存在恶意的插件在系统上自动运行,系统漏洞多,导致个人资料被盗、系统耗电大,流量消耗大等,系统安全性相对来说比较低。

       ã€€ã€€5. 开发难度不同:

       ã€€ã€€è‹¹æžœæä¾›å®Œæ•´é«˜æ•ˆxcode,sdk等开发环境,ios系统一脉相承,ios版本之间的软件通用,即开发一款产品苹果所有设备都能运行。其硬件的强大也让开发变的更加容易。

Android学习之Build环境介绍

       è¿™é‡Œç•¥è¿‡å¯¹android在手机上的文件系统框架的阐述(google或者baidu都能帮助你找到对应的信息),主要看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的一些移植

       |-- dump-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_module_licenses.sh

       æ˜¾ç¤ºå½“前目录下所有module信息

       |-- releasetools

       -- check_target_files_signatures

       |-- common.py

       |-- edify_generator.py

       |-- img_from_target_files

       |-- ota_from_target_files

       `-- sign_target_files_apks

       |-- rgb

       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

       |-- copy_headers.mk

       |-- definitions.mk

       |-- device.mk

       |-- dex_preopt.mk

       |-- distdir.mk

       |-- droiddoc.mk

       |-- dumpvar.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

       |-- product_config.mk

       |-- product.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-x/bin/下,执行cts命令

       |-- ide.mk IDE开发环境

       |-- product-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 plaincopy $(foreach subdir_makefile, $(subdir_makefiles),

       $(info Including $(subdir_makefile))

       $(eval include $(subdir_makefile)))

       subdir_makefile :=

       å¦‚果遇见API相关的PACKAGING/checkapi-current-timestamp] Error

       éœ€è¦æ‰§è¡Œï¼šmake update-api

       å¦‚何在AOSP代码目录之外编译

       [plain] view plaincopy # 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/product/$(TARGET_PRODUCT)

       CROSS_COMPILE =

       $(ANDROID_ROOT)/prebuilt/linux-x/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)objcopy

       OBJDUMP = $(CROSS_COMPILE)objdump

       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 $(INSTALL_DIR)

       $(INSTALL) -m $(EXEC_NAME) $(INSTALL_DIR)

       clean:

       rm -f *.o $(EXEC_NAME) core

       distclean:

       rm -f *~

       rm -f *.o $(EXEC_NAME) core

       å¦‚何增加一个新的设备

       [plain] view plaincopy $ cd ~/android/aosp-2.3.x

       $ . build/envsetup.sh

       $ mkdir -p device/acme/coyotepad

       $ cd device/acme/coyotepad

       è¿›å…¥AndroidProducts.mk

       PRODUCT_MAKEFILES :=

       $(LOCAL_DIR)/full_coyotepad.mk

       å¯¹äºŽfull_coyotepad.mk

       $(call inherit-product, $(SRC_TARGET_DIR)/product/languages_full.mk)

       $(call inherit-product, $(SRC_TARGET_DIR)/product/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#