Ⅰ android make 基础
Android编译演进过程:
build/ 目录下
source build/envsetup.sh
输入指令hmm 就可以查看信息
lunch 2
通过soong执行编译构建,这里执行make命令时,main.mk文件把一些环境变量和目标都配置好后,会执行envsetup.sh中的make()进行编译。
build/soong/soong_ui.bash --make-mode
------->
soong的编译过程:
soong_ui.bash 调用流程:
可以看到include 了main.mk文件,从main.mk开始,将通过include命令将其所有需要的.mk文件包含进来,最终在内存中形成一个包括所有编译脚本的集合,这个相当于一个巨大Makefile文件。Makefile文件看上去很庞大,其实主要由三种内容构成: 变量定义、函数定义和目标依赖规则,此外mk文件之间的包含也很重要。
5.工具链的关系
REF
https://blog.csdn.net/yiranfeng/article/details/109082489
Ⅱ 第二章:Android.bp语法
注意 :关于Android.bp的权威解释可以参见 android.bp权威文档
Google官方语法文档 https://android.googlesource.com/platform/build/soong
从前面的列子可以看出定义一个模块从模块的类型开始,模块有不同的类型,如前面例子中的cc_library_shared,当然类型还有很多种,譬如 cc_binary、android_app 、cc_library_static 等等。模块包含一些属性格式为“property-name:property-value”,其中name属性必须指定,其属性值必须是全局唯一的。
其中默认模块可用于在多个模块中重复相同的属性
srcs 属性以字符串行表的形式指定用于编译模块的源文件。您可以使用模块引用语法 “:” 来引用生成源文件的其他模块的输出,如 genrule 或 filegroup。
实例说明:
我们知道Android.mk中可以定义变量,当然作为新编译系统中替代Android.mk的Android.bp也是一定存在,更加何况Android.mk还可以一定条件的转换成Android.bp。
变量范围限定为声明它们的文件的其余部分,可以使用 “=” 号赋值, 但是不能使用 “:=” 赋值。变量是不可变的,但有一个例外它们可以附上+= 赋值,但仅在变量被引用之前。
下面我们看一下正确使用变量的列子:
我们知道Android.mk中可以进行注释,当然Android.bp里面也可以,Android.mk中使用 # 然后添加注释,Android.bp使用单行注释 // 和多行注释 /* */ 两种方式。
具体支持以下几种类型:
String类型、字符串行表类型和Map类型支持操作符 + 。
Android.bp可以支持android_app、cc_binary、cc_binary_host等多种类型,具体定义在Android源码的 build/soong/androidmk/cmd/androidmk/android.go 可以查看,具体如下:
Android.bp可以支持多种预编译类型,具体定义在Android源码的 build/soong/androidmk/cmd/androidmk/android.go 可以查看,如下图所示:
例如: system/core/libusbhost/Android.bp aosp9.0开始
Android.bp是一门实战性的东西,光说不练没有啥用,说再多不如直接开练来得舒服。那就直接开始手撕实例了,让我们开战吗!
下面几种库编译类型:
2.1 动态库类型
最终编译为so包
**2.2 java库类型: **
最终编译为jar包
2.3 Andorid应用类型
最终编译为apk包
转自: https://blog.csdn.net/tkwxty/article/details/104395820
Ⅲ 阿里平头哥宣布,自研处理器已成功落地,它的性能如何
阿里巴巴宣布旗下的平头哥半导体完成了安卓10对RISC-V的移植并开源了全部相关代码。从平头哥社区发布的信息来看,安卓10系统已经可以在玄铁910芯片上流畅运行。至于玄铁910,则是前年阿里巴巴旗下的平头哥半导体发布的一款号称是业界最强的RISC-V处理器内核IP。资料显示,玄铁910单核性能达到7.1 Coremark/MHz,主频达到2.5GHz,比当时业界最好的RISC-V处理器性能高40%以上。据介绍,玄铁910可以用于设计制造高性能端上芯片,应用于5G、人工智能以及自动驾驶等领域。