0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Android.mk判断语句简介

哆啦安全 来源:程序员Android 2023-04-15 09:29 次阅读

一 、Android.mk 简介

Android.mk 是Android 提供的一种makefile 文件,注意用来编译生成(exe,so,a,jar,apk)等文件。

d8b00726-db15-11ed-bfe3-dac502259ad0.jpg

Android.mk生成文件

二、Android.mk 的基本格式

Android.mk 基本格式如下

# 定义模块当前路径LOCAL_PATH := $(call my-dir) #清空当前环境变量include $(CLEAR_VARS) 
................ # 引入头文件等LOCAL_xxx    := xxx#编译生成的文件名 LOCAL_MODULE  := hello #编译该模块所需的源码LOCAL_SRC_FILES := hello.c #引入jar包等LOCAL_xxx    := xxx 
................ #编译生成文件的类型 #LOCAL_MODULE_CLASS 、JAVA_LIBRARIES#APPS 、 SHARED_LIBRARIES#EXECUTABLES 、 ETCinclude $(BUILD_EXECUTABLE) 

三、Android.mk 深入学习一

使用Android.mk 可以编译多个目标文件:

d8ba735a-db15-11ed-bfe3-dac502259ad0.jpg

Android.mk 编译多个目标文件

编译动态库

C/C++ 文件编译生成静态库.so文件参考如下

LOCAL_PATH := $(call my-dir)  include $(CLEAR_VARS)  # 生成libhell.soLOCAL_MODULE = libhello  

LOCAL_CFLAGS = $(L_CFLAGS)  
LOCAL_SRC_FILES = hello.c 
LOCAL_C_INCLUDES = $(INCLUDES) 
LOCAL_SHARED_LIBRARIES := libcutils  
LOCAL_COPY_HEADERS_TO := libhello  
LOCAL_COPY_HEADERS := hello.h  

#编译动态库 BUILD_SHARED_LIBRARYinclude $(BUILD_SHARED_LIBRARY) 

编译静态库

C/C++ 文件编译生成静态库.a文件参考如下

#编译静态库  LOCAL_PATH := $(call my-dir)  include $(CLEAR_VARS)  # 生成libhell.aLOCAL_MODULE = libhello

LOCAL_CFLAGS = $(L_CFLAGS)  
LOCAL_SRC_FILES = hello.c  
LOCAL_C_INCLUDES = $(INCLUDES)  
LOCAL_SHARED_LIBRARIES := libcutils  
LOCAL_COPY_HEADERS_TO := libhello  
LOCAL_COPY_HEADERS := hellos.h  

 # 编译 静态库  BUILD_STATIC_LIBRARYinclude $(BUILD_STATIC_LIBRARY)

四、 Android.mk 深入学习二

d8d7278e-db15-11ed-bfe3-dac502259ad0.jpg

Android.mk 引用资源

引用静态库
LOCAL_STATIC_LIBRARIES += libxxxxx

LOCAL_STATIC_LIBRARIES := 
  ...
  libxxx2 
  libxxx 

引用动态库
LOCAL_SHARED_LIBRARIES += libxxxxx

LOCAL_SHARED_LIBRARIES := liblog libnativehelper libGLESv2

引用第三方库文件
LOCAL_LDFLAGS:=-L/PATH -Lxxx

LOCAL_LDFLAGS := $(LOCAL_PATH)/lib/libtest.a

引用第三方头文件
LOCAL_C_INCLUDES :=path

eg:

LOCAL_C_INCLUDES = $(INCLUDES)

五、 Android.mk 深入学习三

d8e211a8-db15-11ed-bfe3-dac502259ad0.jpg

Android.mk 深入学习三

编译apk

 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS)
 LOCAL_SRC_FILES := $(call all-subdir-java-files) # 生成hello apk
 LOCAL_PACKAGE_NAME := hello include $(BUILD_PACKAGE)

编译jar包

 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS)
 LOCAL_SRC_FILES := $(call all-subdir-java-files) # 生成 hello
 LOCAL_MODULE := hello # 编译生成静态jar包
 include $(BUILD_STATIC_JAVA_LIBRARY) #编译生成共享jar
 include $(BUILD_JAVA_LIBRARY)

静态jar包:

include $(BUILD_STATIC_JAVA_LIBRARY)
使用.class文件打包而成的JAR文件,可以在任何java虚拟机运行

动态jar包:

include $(BUILD_JAVA_LIBRARY)
在静态jar包基础之上使用.dex打包而成的jar文件,.dex是android系统使用的文件格式。

APK 依赖jar

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)# 静态jar包LOCAL_STATIC_JAVA_LIBRARIES := static-library#动态jar包LOCAL_JAVA_LIBRARIES := share-library

LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := helloinclude $(BUILD_PACKAGE)

预编译jar包

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)#指定编译生成的文件类型LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE := hello
LOCAL_SRC_FILES := $(call all-subdir-java-files)# 预编译include $(BUILD_PREBUILT)

预编译文件类型如下:

1.LOCAL_MODULE_CLASS:
编译文件类型

2.JAVA_LIBRARIES:
dex归档文件

3.APPS:
APK文件

4.SHARED_LIBRARIES:
动态库文件

5.EXECUTABLES:
二进制文件

6.ETC:
其他文件格式

六、 Android.mk 判断语句

Android.mk 中的判断语句

ifeq($(VALUE), x)  #ifneq
 do_yeselse
 do_noendif

ifeq/ifneq:根据判断条件执行相关编译





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Android
    +关注

    关注

    12

    文章

    3935

    浏览量

    127339
  • JAVA语言
    +关注

    关注

    0

    文章

    138

    浏览量

    20090
  • C++语言
    +关注

    关注

    0

    文章

    147

    浏览量

    6987

原文标题:六、 Android.mk 判断语句

文章出处:【微信号:哆啦安全,微信公众号:哆啦安全】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    AM335X开发板Android 应用程序获得system权限的方法

    在app工程添加Android.mk文件,其中的LOCAL_CERTIFICATE要赋值为platform,即用系统的签名,通过这种方式只能使应用程序的权限升级到system级别。参考例程如下
    发表于 05-20 17:55

    芯灵思开发板安卓底层开发学习经验第四期

    MAKEFILE_LIST是在我们做编译的时候,当前目录下的Android.mk会被加载到这个里边,而lastWord是取最后一个makefile第二行,会首先判断这个环境变量中是否包含这个文件,如果有,我们会
    发表于 08-18 09:11

    芯灵思开发板安卓底层开发学习经验第七期

    这一期我们继续探索Android.mk ,主要讲的是如何编译jar包,如何编译APK,APK中如何导入jar包和库文件,如何在Android.mk中添加判断语句首先我们看一下如何编译生成APK,下面
    发表于 08-28 16:32

    芯灵思开发板安卓底层开发资料七

    www.sinlinx.com这一期我们继续探索Android.mk主要讲的是如何编译jar包,如何编译APK,APK中如何导入jar包和库文件,如何在Android.mk中添加判断语句首先我们
    发表于 10-12 10:22

    为什么执行不了if判断语句

    ; } else if(y2==0x06) {tmp=0x20; LCD_WrDat(0x20);P1=0x20; } else if(y2==0x07) {tmp=0x40; LCD_WrDat(0x40);P1=0x40; }为什么执行不了if判断语句??P1=y2是接小灯,亮的结果表明y2有赋值!!
    发表于 12-10 09:30

    if(DlyCrcEn & (|DlyCrcCnt[3:0])) 请问这个判断语句是不是合法的 ?

    if(DlyCrcEn & (|DlyCrcCnt[3:0]))这个判断语句是不是合法的
    发表于 03-29 20:29

    请问一下怎么去解决编译错误_config.mk的问题

    ;frameworks/av/media/libcedarc/library/Android.mk:28: "lib_32 is: "notdef"_32"frameworks
    发表于 01-04 07:55

    编译错误_config.mk: No such file or directory怎么解决?

    ;frameworks/av/media/libcedarc/library/Android.mk:28: "lib_32 is: "notdef"_32"
    发表于 01-13 07:14

    python判断语句

    python判断语句:if1. 简单小例子如果满足条件 A,则执行代码块 a,否则执行代码块 b。类似这样的控制流程语句,称之为条件语句。它的基本形式是if 判断条件: 执行
    发表于 02-25 16:22

    如何去解决RK3568 Android系统二次编译失败的问题

    BUILD_BROKEN_DUP_RULES := true,但又会出其他问题。  [ 46% 128/277] including hardware/rockchip/libhwjpeg/Android.mk 。..  [ 48
    发表于 09-08 16:20

    C++语言基础讲解视频Switch分支条件判断语句

    C++语言基础讲解视频Switch分支条件判断语句
    发表于 01-14 08:00 7次下载

    python判断语句的详细说明

    python判断语句:if 1. 简单小例子 如果满足条件 A,则执行代码块 a,否则执行代码块 b。类似这样的控制流程语句,称之为条件语句。 它的基本形式是 if 判断条件: 执行
    的头像 发表于 02-25 16:22 2361次阅读

    Android.mk语法简介

    Android.mk文件用来告知NDK Build系统关于Source的信息。Android.mk将是GNU Makefile的一部分,且将被Build System解析一次或多次。
    的头像 发表于 09-13 15:33 1150次阅读

    条件判断语句(if语句

    条件判断语句,作为任何编程语言都不可缺少的内容,在C语言中也不例外。条件判断语句可以让程序的功能更加复杂,从而实现各种各样的功能。
    的头像 发表于 02-21 15:24 3492次阅读
    条件<b class='flag-5'>判断语句</b>(if<b class='flag-5'>语句</b>)

    技术干货驿站 ▏深入理解C语言:掌握C语言条件判断,从if到switch的应用

    在编程中,条件判断语句是控制程序流程的核心元素之一。它们使得程序能够根据不同的输入和状态,做出相应的决策。特别是在C语言中,条件判断语句的使用极为广泛,涵盖了从简单的if语句到更复杂的switch
    的头像 发表于 11-09 01:10 295次阅读
    技术干货驿站 ▏深入理解C语言:掌握C语言条件<b class='flag-5'>判断</b>,从if到switch的应用