Android MK和BP编译规则比较_android.mk和android.bp的区别_kisaragi_yu的博客-程序员宅基地

技术标签: android  Android杂记  

 Android.mk与Android.bp都是用于Android源码系统管理编译的文件,一些基本的声明差异如下:

MK

BP

模块名

LOCAL_PACKAGE_NAME := [PackageName] 编译出的模块名

name: [PackageName] 编译出的模块名

包含的Src文件范围

LOCAL_SRC_FILES := \

    $(call all-java-files-under, src) \

    $(call all-java-files-under, src_ui_overrides) \

    $(call all-java-files-under, go/src)

srcs: [

        "src/**/*.java",

        "src_shortcuts_overrides/**/*.java",

        "src_ui_overrides/**/*.java",

        "ext_tests/src/**/*.java",

    ],

包含的Res文件范围

LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/quickstep/res

 resource_dirs: [

        "ext_tests/res",

    ],

导入静态JAVA库依赖

LOCAL_STATIC_JAVA_LIBRARIES := \

    SystemUI-statsd \

    SystemUISharedLib

static_libs:[

"Launcher3ResLib",

"SystemUISharedLib",

"SystemUI-statsd",

],

决定编译后生成文件是否放到priv-app(默认app)

LOCAL_PRIVILEGED_MODULE := true

privileged: true,

决定编译后生成文件是否放到system-ext(默认system)

LOCAL_SYSTEM_EXT_MODULE := true

system_ext_specific: true,

指定覆盖编译(被指定的模块会在整编时被编进去,而是由当前模块代替)

LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3

overrides: [

        "Home",

        "Launcher2",

    ],

Manifest文件

LOCAL_MANIFEST_FILE := quickstep/AndroidManifest.xml

manifest: "quickstep/AndroidManifest.xml",

附加Manifest文件

LOCAL_FULL_LIBS_MANIFEST_FILES := \

    $(LOCAL_PATH)/quickstep/AndroidManifest-launcher.xml \

    $(LOCAL_PATH)/AndroidManifest-common.xml

additional_manifests: [

        "go/AndroidManifest.xml",

        "AndroidManifest-common.xml",

    ],

代码混淆控制

LOCAL_PROGUARD_ENABLED := disabled

 

LOCAL_PROGUARD_FLAG_FILES:=proguard.flags

LOCAL_PROGUARD_ENABLED:=full

optimize: {

        proguard_flags_files: ["proguard.flags"],

        // Proguard is disable for testing. Derivarive prjects to keep proguard enabled

        enabled: false,

    },

生成静态java库

include$(CLEAR_VARS)

include$(BUILD_STATIC_JAVA_LIBRARY)

java_library_static{

}

补充

  • 导入静态JAVA库依赖:如引用第三方库时,需要先prebuilt出一个静态库,库名跟之后导入的静态库名需保持一致

  • 代码混淆控制参数

    • full:使用编译系统默认的配置:压缩但不混淆和优化,默认的混淆配置文件是build/core/proguard.flags

    • custom:和full一样,但不包括aapt生成的resource相关的混淆配置。

    • nosystem:不使用系统的默认配置,但使用aapt生成的resource相关的混淆配置,其他混淆由模块自己负责。

    • disabled:关闭混淆

    • obfuscation:和full一样,并且开启混淆

    • optimization:和full一样,并且开启优化

    • 不设置时,如果是app,默认为full,如果是library,则默认为disabled

  • 编译模块

    MK以include结尾表示编译模块,BP则以类似json格式,在外部标明编译模块

  • MK常用的编译模块类型:
    • BUILD_PREBUILT:编译成一个预置程序。
    • BUILD_PACKAGE:编译成一个apk或者资源包文件。
    • BUILD_JAVA_LIARARY:编译成一个Java共享库。
    • BUILD_STATIC_JAVA_LIARARY:编译成一个Java静态库。
    • BUILD_EXECUTABLE:编译成一个可执行文件。
    •  BUILD_SHARED_LIARARY:编译成一个native共享库,前缀为lib,后缀为.so。
  • ​​​​​​BP也支持多种模块类型

        var moduleTypes = map[string]string{

            "BUILD_SHARED_LIBRARY":        "cc_library_shared",

            "BUILD_STATIC_LIBRARY":        "cc_library_static",

            "BUILD_HOST_SHARED_LIBRARY":   "cc_library_host_shared",

            "BUILD_HOST_STATIC_LIBRARY":   "cc_library_host_static",

            "BUILD_HEADER_LIBRARY":        "cc_library_headers",

            "BUILD_EXECUTABLE":            "cc_binary",

            "BUILD_HOST_EXECUTABLE":       "cc_binary_host",

            "BUILD_NATIVE_TEST":           "cc_test",

            "BUILD_HOST_NATIVE_TEST":      "cc_test_host",

            "BUILD_NATIVE_BENCHMARK":      "cc_benchmark",

            "BUILD_HOST_NATIVE_BENCHMARK": "cc_benchmark_host",

            "BUILD_JAVA_LIBRARY":             "java_library",

            "BUILD_STATIC_JAVA_LIBRARY":      "java_library_static",

            "BUILD_HOST_JAVA_LIBRARY":        "java_library_host",

            "BUILD_HOST_DALVIK_JAVA_LIBRARY": "java_library_host_dalvik",

            "BUILD_PACKAGE":                  "android_app"

        }

  •         

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/kisaragi_yu/article/details/125522183

智能推荐

SQLite数据库简介-程序员宅基地

大家好,今天来介绍一下SQLite的相关知识,并结合Java实现对SQLite数据库的操作。SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎。它支持大多数的SQL92标准,并且可以在所有主要的操作系统上运行。SQLite由以下几个部分组成:SQL编译器、内核、后端以及附件。SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),是调试、修改和扩展SQLite的内..._sqlite数据库介绍

js之JSON.parse_js json.parse-程序员宅基地

JSON.parse一般用于将JSON字符串转化为JSON对象语法JSON.parse(text[, reviver])text 要被解析成 JavaScript 值的字符串reviver 转换器, 如果传入该参数(函数),可以用来修改解析生成的原始值,调用时机在 parse 函数返回之前一般第二个参数为回调函数,用于在返回结果之前,操作一些东西实例注意当传入reviver参数的时候,遍历到顶层的时候的key是一个空字符串,所以一般会遍历到空字符串的时候将返回原值const res_js json.parse

最常用的CSS技巧-程序员宅基地

Earlier before I have written an article about current best CSS hacks which you can see here And now here’s the list of today’s most used CSS tricks – tips. I have added image examples for most of the...

POJ-3621-01分数规划,spfa判负环-程序员宅基地

题目大意:一张有向图,求一个环的点权和除以边权和,使得那个环在所有环中点权和除以边权和最大。题目解析:最优比例环,令sigma(vi)/sigma(ei)=0,换句话说如果途中有负环,就不成立,上式成立需要所有换都不是负环,我们只需要二分ans即可;AC代码:#include#include#include#include#include#includeusing name

用Windows 的远程桌面连接 CentOS 6_远程连接centos6-程序员宅基地

用Windows 的远程桌面连接 CentOS 6 我们购买远程的Linux CentosVPS主机如何远程登录操作? 如果手头的是windows电脑,远程的是centos系统,一般可以这么操作: 一般远程主机是最低安装,先用Putty工具使用SSH模式用命令行远程操作: 先为centos安装图形界面:#yum groupinstall "Desktop"#yum groupinstall "X ..._远程连接centos6

【数据结构】哈夫曼编译码器(C语言)_选题二:哈夫曼(huffman)编/译码器 //【问题描述】 //利用哈夫曼编码进行通信可以-程序员宅基地

问题描述利用哈弗曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼码的编/译码系统。基本要求(1)I:初始化(Initialization)。从终端读入字符集大小n,以及n个..._选题二:哈夫曼(huffman)编/译码器 //【问题描述】 //利用哈夫曼编码进行通信可以

随便推点

Ame房价回归-top10%方案_amepyplot-程序员宅基地

数据介绍数据来源于kaggle House Prices数据有以下几个维度,其中36个为特征,价格为标签特征定义SalePrice物业的销售价格以美元计算。这是您尝试预测的目标变量。MSSubClass建筑类MSZoning一般分区分类LotFrontage街道的线性脚连接到财产LotArea地块尺寸,平方英尺Street道路通道..._amepyplot

几种倒计时的实现_el-statistic-程序员宅基地

1. 短信验证码---60s倒计时// html<h2>短信验证码</h2><el-button :disabled="totalTime < 60" @click="getCountdown">{{content}}</el-button>// 定义常量totalTime: 60,content: '发送验证码', getCountdown() { const clock = window.setI_el-statistic

ojdbc14.jar 和mysql_Oracle数据库的驱动包ojdbc*.jar之间的差别_引长弓的博客-程序员宅基地

classes12.jar,ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别,之间的差异在使用Oracle JDBC驱动时,有些问题你是不是通过替换不同版本的Oracle JDBC驱动来解决的?最常使用的ojdbc14.jar有多个版本,classes12.jar有多个版本你了解吗?连接类型:1、JDBC OCI: oci是oracle call interface的缩写..._ojdbc14jar是支持oracle的,mysql是哪个jar

Vue.created异步加载如何获取数据_怎么得到createapp 生成的组件的data-程序员宅基地

问题现象使用Vue时需要加载初始化数据如果在created异步加载初始化数据,然后把请求到的数据赋值为this.data.此时,如果在mounted函数里获取this.data,是获取不到的,因为异步加载需要时间,如果延迟时间是可以获取到的,但是问题是不知道延迟时间,而且这个方法也不是太好那么如何获取到这个异步加载的数据呢,使用watch方法的数据监听1. wacth:..._怎么得到createapp 生成的组件的data

oracle表字段比较如何优化,对于数据量大而列值少的字段如何建索引优化查询_李特儿的博客-程序员宅基地

create index IX_TABLE1_C1 on table1(column1),create index IX_TABLE1_C2 on table1(column2)索引的三個問題索引( Index )是常见的数据库对象,它的设置好坏、使用是否得当,极大地影响数据库应用程序和Database 的性能。虽然有许多资料讲索引的用法, DBA 和 Develo per 们也经常与它打交道,但..._oracle 索引量过大怎么办

第十二周 【项目 - (5)拓扑排序算法验证】-程序员宅基地

/** Copyright(c) 2017,烟台大学计算机学院* All rights reserved.* 作 者:李琳汐* 完成日期:2017 年 11 月 25日* 版 本 号:v1.0** 问题描述:拓扑排序*/#include #include #include "graph.h"void TopSort(ALGraph *G){ int i,j