Android.mk 详解
https://blog.csdn.net/dearsq/article/details/50585537

 Android.mk中的主要配置参数:

1.LOCAL_JACK_ENABLED

这个变量可以禁止使用Jack编译工具链编译该模块。在工作中,个人感觉目前jack工具链不是很稳定,经常会出现一些错误,比如:
ERROR: Security problem, see Jack server log (/tmp/jack-liujinwei/jack-8072.log)
这个时候,我就会在Android.mk中禁止该工具链。

禁止方法如下:

LOCAL_JACK_ENABLED := disabled

2.LOCAL_DEX_PREOPT
这个变量设置为false可以使整个系统使用提前优化的时候,某个app不使用提前优化。在Android.mk中给该变量赋值为false,则编译生成的文件没有oat文件,也就意味着没有被提前优化。

LOCAL_DEX_PREOPT := false

3.WITH_DEXPREOPT
这个变量的使能导致system image中的所有东西都被提前优化(pre-optimized)。这可能导致system image非常大。

WITH_DEXPREOPT := true

4.DONT_DEXPREOPT_PREBUILTS

WITH_DEXPREOPT := true
DONT_DEXPREOPT_PREBUILTS := true

这两个组合使用,可以使那些 prebuild的app不会被提前优化(pre-optimized),即就是那些在Android.mk中包含intclude $(BUILD_PREBUILT)的app都不会被提前优化
5.WITH_DEXPREOPT_BOOT_IMG_ONLY

WITH_DEXPREOPT := true
WITH_DEXPREOPT_BOOT_IMG_ONLY := true

这两个组合使用只会优化boot image。

6.LOCAL_MODULE_TAGS

LOCAL_MODULE_TAGS :=user eng tests optional

user: 指该模块只在user版本下才编译

eng: 指该模块只在eng版本下才编译

tests: 指该模块只在tests版本下才编译

optional:指该模块在所有版本下都编译

7.LOCAL_PATH

当前目录,使用LOCAL_PATH := $(call my-dir)获取当前目录,

LOCAL_PATH不会被include $(CLEAR_VARS) 清理。

8.LOCAL_MODULE

模块名,在模块编译的时候,LOCAL_MODULE的值会被赋予ALL_MODULE,ALL_MODULE包含了系统所有模块,这些模块会更具系统的其他配置进一步筛选,最终筛选出来的模块会被编译。

9.LOCAL_SHARED_LIBRARIES

要连接到本模块的共享库。

10.LOCAL_CERTIFICATE := platform

使用平台签名文件签名。

11.include $(BUILD_STATIC_JAVA_LIBRARY)

构建一个静态的jar包

12.include $(BUILD_PACKAGE)

编译生成apk

13.include $(BUILD_EXECUTABLE)

编译生成可执行文件

14.include $(BUILD_SHARED_LIBRARY)

编译生成动态共享库

15.include $(BUILD_STATIC_LIBRARY)

编译生成静态库

16.LOCAL_JAVA_LIBRARIES

例如:LOCAL_JAVA_LIBRARIES := hello.jar,用于指明依赖的共享Jar包

17.LOCAL_STATIC_JAVA_LIBRARIES

用于指明依赖的静态jar包

18.LOCAL_LDLIBS

链接选项,指明链接的参数,LOCAL_SHARED_LIBRARIES 会生成依赖关系,当库不存在时会去编译这个库,LOCAL_LDLIBS则不会,它只是指明链接需要的参数。

如:LOCAL_LDLIBS += -lm –lz –lc -lcutils –lutils –llog …
---------------------
作者:阳光玻璃杯
来源:CSDN
原文:https://blog.csdn.net/u011913612/article/details/51853502
版权声明:本文为博主原创文章,转载请附上博文链接!


Android 新一代编译 toolchain Jack & Jill 简介
https://www.jianshu.com/p/1d7775bed2e2

在依赖了 Sun/Oracle 的 Java 编译器十年之后,Android 终于有了自己的 Java 编译器。

Jack 是 Java Android Compiler Kit 的缩写,它可以将 Java 代码直接编译为 Dalvik 字节码,并负责 Minification, Obfuscation, Repackaging, Multidexing, Incremental compilation。它试图取代 javac/dx/proguard/jarjar/multidex 库等工具。

git 源代码地址是 https://android.googlesource.com/toolchain/jack。

Jill 是 Jack Intermediate Library Linker 的缩写,它负责 “Shielding JACK from Java byte code”;实际上辅助 Jack 对.class 做预处理,生成 .jack 文件

git 源代码地址是 https://android.googlesource.com/toolchain/jill。

自 Android build-tools 21.1 开始,里面已经内置 jack.jar 和 jill.jarAndroid Gradle plugin 自 0.14 开始支持 Jack & Jill initial commit自 Android 6.0 开始,Jack & Jill 成为 AOSP 的官方编译器, 也就是说所有的 Android 6.0 ROM 都是 Jack 编译出来的 link,也代表 Google 认为 Jack 达到了一定的成熟度预计等 Android 7.0 正式发布时,Jack 可能会成为官方推荐的编译器


Android.mk 使用说明的更多相关文章

  1. Android.mk文件官方使用说明

    本页介绍了 ndk-build 所使用的 Android.mk 编译文件的语法. 概览 Android.mk 文件位于项目 jni/ 目录的子目录中,用于向编译系统描述源文件和共享库.它实际上是编译系 ...

  2. Android编译系统(Android.mk文件详解)

    [Android-NDK(Native Development Kit)  docs文档] NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成a ...

  3. 关于jni编译32位、64位动态库(Android.mk和Application.mk文件)

    最近新项目需要编译64位的动态库,这里记录如何配置. 在jni目录下加入Android.mk和Application.mk文件. Application.mk APP_ABI := armeabi a ...

  4. Android.mk 文件语法详解

    0. Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build Syst ...

  5. Android.mk 基本应用

    如果是在android源码里面编译我们自己的应用,就需要这个android.mk文件,这个文件就告诉android系统应用如何来编译这个应用以及这个应用它所依赖哪些文件等等信息.我对android.m ...

  6. Android中NDK的搭建及简单使用 Android.mk相关介绍 JNI的使用

    Android中NDK的搭建及简单使用: 使用NDK,简述其重要步骤:.搭建NDK环境(作用:用于自动生成jni下的.c对应的so文件)---到Android NDK官网或Android官网下载ndk ...

  7. android编译系统的makefile文件Android.mk写法

    Android.mk文件首先需要指定LOCAL_PATH变量,用于查找源文件.由于一般情况下Android.mk和需要编译的源文件在同一目录下,宏函数“my-dir”右编译系统提供的,用于返回当前路径 ...

  8. Android.mk相关知识

    Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名.引用的头文件目录.需要编译的.c/.cpp文件和.a静态库文件等.要掌握jni,就必须熟练掌握Andr ...

  9. android mk odex问题 push apk 不生效

    Android编译是否生成odex的设置 默认编译odex版本,如果需要非odex版本,请将device/huawei/k3v2_s10/BoardConfig.mk如下两个变量的值修改为:DISAB ...

随机推荐

  1. day12_7.12递归函数与算法

    一.递归函数 递归函数是在函数的调用阶段直接或间接的调用自己. 于是下面就是一个简单的递归函数: def func(): print('我调我自己') func() func() 然而结果会报错,因为 ...

  2. python基础语法20 面向对象5 exec内置函数的补充,元类,属性查找顺序

    exec内置函数的补充 exec: 是一个python内置函数,可以将字符串的代码添加到名称空间中; - 全局名称空间 - 局部名称空间 exec(字符串形式的代码, 全局名称空间, 局部名称空间) ...

  3. 搭建稳固的MySQL运维体系

    MySQL 监控要点 MySQL 监控要点,主要涉及服务器和 MySQL 两个方向的监控告警. 在这两个监控告警方向需要重点关注监控策略.监控趋势图及报警方式. 监控策略指的是每个监控项的告警阈值,例 ...

  4. 浅谈SOA与RPC

    一.SOA 英文名称:Service Oriented Ambiguity 中文名称:面向服务架构 SOA是一种思想,目的是提供一种设计项目的思路,让开发时更有效率. 例如原来的分布式项目中,在每个项 ...

  5. z+f数据解析

    1.先打开cmd2.把D:\qcc\编译和解析\debug_jiexi\SampleZFS.exe 拉进来.3.SampleZFS.exe -i *.zfs -o D:\*.txt 注意:*号代表文件 ...

  6. nginx 403问题

    错误排查 https://blog.csdn.net/onlysunnyboy/article/details/75270533 关闭 SELinux https://blog.csdn.net/ed ...

  7. 跨交换机VLAN之间的通信(基于Cisco模拟器)

    实验要求: 拓扑结构如下 1.交换机2台:主机4台:网线若干. 2.把主机.交换机进行互联. 3.给2台交换机重命名为A.B. 4.设置2台交换机及主机的ip.注意IP要不冲突 5.在2台交换机上分别 ...

  8. for循环包含多个双引号怎么办?windows

    for循环包含多个双引号怎么办?windows@echo offsetlocal EnableDelayedExpansionset "sed=%~sdp0sed"echo %se ...

  9. Excel输入十六进制数,以及十六进制运算

    网上复制来复制去的连个靠谱答案都没有...f**k 所以无奈自己探索出来了 先放效果图 文本值 转 进制值 单元格: A1文本值 A2进制值 输入内容: 'fefe =OCT2HEX(HEX2OCT( ...

  10. 挂载ESP(EFI)分区到Windows,并让资源管理器有权限读写

    如果你的磁盘精灵经常原地自爆,但你又想读写ESP分区的文件,那么请看此贴 1 //例子如下 diskpart //运行Diskpart工具 list disk //列出所有磁盘 sel disk // ...