Android 编译

2025-09-12

Android.bp详解

一个Android.bp是一个json类型的文件,内容通常具有如下格式:

module_name{
    "name" : "XXXX",
    ...
}

Android.bp常见用法

声明一个C++默认配置

cc_defaults {
   name: "test_defaults", //模块名称
   shared_libs: ["XXX"], //设置使用共享库
   stl: "none", //设置stl library
}

创建一个C++ 动态/静态库

cc_library(_shared|_static){
    name : "test_lib",
    srcs: ["*/test.cpp"],

}

创建一个C++ 应用

cc_binary {
   name: "test",
   defaults: ["test_defaults"], //默认配置
   srcs: ["*/minigzip.cpp"], //文件路径
   static_libs: ["test_lib",]
   vendro: true //是否打包到vendor分区
}

声明一个java默认配置

java_defaults {
    ...
}

创建一个java .jar包

java_library{
    name: "XXX",
    srcs:["*/test.java"],
    static_libs:["xxx",],
}

创建一个apk

android_app{
    ...
}

Android.bp 常见字段总结

打包目标 java_library 打包成.jar包
cc_library(_static/_shared/_header) 打包成.lib/.so/头文件库
cc_binary 打包成native程序
java_binary 打包成java程序
android_app 打包成Android应用程序
aidl_interface hidl打包成.jar/.so
hidl_interface aidl打包成.jar/.so
文件路径 srcs 需要打包的文件path
excluded_srcs 在打包时不可包含的文件path
依赖的库 static_libs 依赖的静态库/.jar包
shared_libs 依赖的动态库
分区选项 vendor 是否打包到vendor分区
system_ext 是否打包到ext分区
语言选项 aidl back_end javaenabled是否开启
sdk_versionsdk版本,默认system_current
ndkenabled是否开启
sdk_versionsdk版本,默认current
hidl gen_java 是否生成.jar库

上表给出了一些bp文件中的常见字段,所有字段的示意可见soong docs