Android开发Android开发经验谈Android技术知识

Android.mk 语法浅析

2020-04-15  本文已影响0人  CokeNello

概述

Android 底层代码中,使用 Android.mk 文件来进行编译代码,类似于我们平常接触的 gradle。底层的编译,由一套 NDK Build 系统构成,而 mk 文件用来告知 NDK 关于 Source 的信息。

本质上,Android.mk只是GNU MakeFile的一个片段,编译系统在编译的时候有可能会多次解释Android.mk文件,所以要尽量少在脚本里面申明变量,也不要假设任何没有在脚本中定义的条件。

GNU 是什么?
Unix 系统被发明之后,大家用的很爽。但是后来开始收费和商业闭源了。一个叫 RMS 的大叔觉得很不爽,于是发起 GNU 计划,模仿 Unix 的界面和使用方式,从头做一个开源的版本。经过一些列的演变,其就是后来的Linux。

1. 模块

mk 语法允许将 Source 打包成一个模块,模块又分为:

一个 mk 中能定义一个或者多个模块,也可以将同一份 Source 加入到多个模块中。

2. 示例解析

看一个简单的例子:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)

3. mk 其他变量

LOCAL_STATIC_JAVA_LIBRARIES := \
        com.android.vcard \
        bluetooth.cc\
        services.net \
        libprotobuf-java-lite \

指定依赖的静态java类库,最终会打包到apk里面。引用多个的时候,可以像上面那样写。

LOCAL_STATIC_ANDROID_LIBRARIES := \
    $(ANDROID_SUPPORT_DESIGN_TARGETS) \
    android-support-transition \
    android-support-v13 \
    android-support-v7-appcompat \
    android-support-v7-cardview \
    android-support-v7-recyclerview \
    android-support-v7-palette \
    android-support-v4 \

声明要调用 android 的包,像 v7,v13 包

LOCAL_ANNOTATION_PROCESSORS := \
        bt-androidx-annotation-nodeps \
        bt-androidx-room-common-nodeps \
        bt-androidx-room-compiler-nodeps \
        bt-androidx-room-migration-nodeps \
        bt-antlr4-nodeps \
        bt-apache-commons-codec-nodeps \
        bt-auto-common-nodeps \
        bt-javapoet-nodeps \
        bt-kotlin-metadata-nodeps \
        bt-sqlite-jdbc-nodeps \
        bt-jetbrain-nodeps \
        guava-21.0 \

声明用到的注解

LOCAL_ANNOTATION_PROCESSOR_CLASSES := \
        androidx.room.RoomProcessor

声明用到的注解器

LOCAL_PROGUARD_ENABLED := disabled
LOCAL_PROGUARD_ENABLED := full obfuscation

混淆配置,默认为full obfuscation,全代码混淆,disabled不开启。


技术酱专注 Android 技术,工作日不定时推送新鲜文章,如果你有好的文章想和大家分享(有稿费哦),欢迎关注投稿!

技术酱
上一篇 下一篇

猜你喜欢

热点阅读