Android Framework之BP文件理解

677 阅读2分钟

car下android.bp解析

package {
    default_applicable_licenses: ["Android-Apache-2.0"],
}
​
//android lib 库 名字叫 CarLauncher-core
android_library {
  name: "CarLauncher-core", 
  platform_apis: true,//可以使用系统的hideapi
​
  srcs: ["src/**/*.java"],//源码的位置 *通配符
​
  resource_dirs: ["res"], //资源的位置
​
    //引入的静态库 android下的
  static_libs: [
      "androidx-constraintlayout_constraintlayout-solver",
      "androidx-constraintlayout_constraintlayout",
      "androidx.lifecycle_lifecycle-extensions",
      "car-media-common",
      "car-telephony-common",
      "car-ui-lib",
      "WindowManager-Shell",
      ],
​
    libs: ["android.car"],
​
    manifest: "AndroidManifest.xml",
}
​
//外界成果 也就是会打出来一个叫CarLauncher 的apk
android_app {
    name: "CarLauncher",
    resource_dirs: [],
    platform_apis: true,
      //设置依赖模块,比如我还得依赖其他模块就这么写
    required: ["allowed_privapp_com.android.car.carlauncher"],
      //签名类型
    certificate: "platform",
// 设定apk安装路径为priv-app
    privileged: true,
    //覆盖下面的launcher
    overrides: [
        "Launcher2",
        "Launcher3",
        "Launcher3QuickStep",
    ],
​
      //引入静态库
    static_libs: ["CarLauncher-core"],
​
      //
    libs: ["android.car"],
​
    optimize: {
        enabled: false,
    },
​
    dex_preopt: {
        enabled: false,
    },
​
    product_variables: {
        pdk: {
            enabled: false,
        },
    },
}

常用解析

模块

[module type] { 
​
name: "[name value]", 
​
[property1 name]:"[property1 value]", 
​
[property2 name]:"[property2 value]", 
​
}

模块案例

cc_binary { name: "gzip", srcs: ["src/test/minigzip.c"], shared_libs: ["libz"], stl: "none", }

常见的模块类型有

 cc_library,
​
 cc_library_headers, //头文件 (接口)如 jni.h
​
 cc_library_shared, //动态库 so
​
 cc_library_static,//静态库 .a
​
 android_app,
​
 android_app_certificate,
​
 java_library,
​
 java_library_static,
​
 java_sdk_library等等。
​

案例学习

// 构建可执行程序
android_app {
    // 设定可执行的程序的名称,编译后会生成一个 CarNotification.apk
    name: "CarNotification",
    // 指定java源码的位置
    srcs: ["src/**/*.java"],
    // 指定资源文件的位置
    resource_dirs: ["res"],
    // 允许使用系统hide api
    platform_apis: true,
    // 设定apk签名为 platform
    certificate: "platform",
    // 设定apk安装路径为priv-app
    privileged: true,
    // 是否启用代码优化,android_app中默认为true,java_library中默认为false
    optimize: {
        enabled: false,
    },
    // 是否预先生成dex文件,默认为true。该属性会影响应用的首次启动速度以及Android系统的启动速度
    dex_preopt: {
        enabled: false,
    },
    // 引入java静态库
    static_libs: [
        "androidx.cardview_cardview",
        "androidx.recyclerview_recyclerview",
        "androidx.palette_palette",
        "car-assist-client-lib",
        "android.car.userlib",
        "androidx-constraintlayout_constraintlayout"
    ],
    // 引入java库
    libs: ["android.car"],
    product_variables: {
        pdk: {
            enabled: false,
        },
    },
    // 设定依赖模块。如果安装了此模块,则要还需要安装的其他模块的名称
    required: ["privapp_whitelist_com.android.car.notification"]
}
// As Lib
android_library {
    name: "CarNotificationLib",
    srcs: ["src/**/*.java"],
    resource_dirs: ["res"],
    manifest: "AndroidManifest-withoutActivity.xml",
    platform_apis: true,
    optimize: {
        enabled: false,
    },
    dex_preopt: {
        enabled: false,
    },
    static_libs: [
        "androidx.cardview_cardview",
        "androidx.recyclerview_recyclerview",
        "androidx.palette_palette",
        "car-assist-client-lib",
        "android.car.userlib",
        "androidx-constraintlayout_constraintlayout"
    ],
    libs: ["android.car"],
    product_variables: {
        pdk: {
            enabled: false,
        },
    },
}

资料

www.jianshu.com/p/f23e18933…