Android make file语法

  • cc_defaults 是当前模块的父模块

  • cc_binary 代表可以生成二进制库文件,生成的文件在/system/bin

  • cc_library cc_library_shared 代表一个c++可编译库,生成的so库在/system/framework/lib

  • java_library 是一个java库,编译出jar包

  • shared_libs 依赖库

  • subdirs 子模块,包含Android.bp文件的模块

  • srcs 包含的源文件

  • static代表静态的一些jar和so库,具体还不清楚问题

  • 未知的 static_libs include_dirs cc_library_static libs

Android 系统 Make file 语法

  • 应该意识到make file中只有模块概念,引用三方的jar和so文件必须先编译成为makefile中的模块,而不能直接使用文件进行编译。

android make file 规则参考链接

对于java的jar文件

  • LOCAL_JAVA_LIBRARIES 仅仅在编译时使用的java库
  • LOCAL_STATIC_JAVA_LIBRARIES 引用三方jar包,会编译打包到apk中
  • LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES 用于预编译一个现有的jar包文件,三方jar包在使用前必须预编译,原因如下:

    编译是以模块(而不是文件)作为单位的,每个模块都有一个唯一的名称,一个模块的依赖对象只能是另外一个模块,而不能是其他类型的对象。对于已经编译好的二进制库,如果要用来被当作是依赖对象,那么应当将这些已经编译好的库作为单独的模块。对于这些已经编译好的库使用 BUILD_PREBUILT 或 BUILD_MULTI_PREBUILT。例如:当编译某个 Java 库需要依赖一些 Jar 包时,并不能直接指定 Jar 包的路径作为依赖,而必须首先将这些 Jar 包定义为一个模块,然后在编译 Java 库的时候通过模块的名称来依赖这些 Jar 包。
    LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES使用的格式如下:

    LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := 模块名字:jar路径
# 首先预编译要使用的jar包,目的是将三方jar转变为一个模块可以用于其他模块依赖
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := androidxJar:libs/androidx.jar
include $(BUILD_MULTI_PREBUILT) # 预编译三方jar包,因为三方jar无法直接引用到路径中
# 使用预编译的三方Jar包模块
include $(CLEAR_VARS)
LOCAL_JAVA_LIBRARIES  := androidxJar # 只编译,不打包进apk
# 这一行用于编译apk
include $(BUILD_PACKAGE)
  • BUILD_STATIC_JAVA_LIBRARY 编译静态jar包

对于c++ 的native文件

  • LOCAL_SHARED_LIBRARIES 指定编译需要的共享库.so文件,会打包到软件包中
  • LOCAL_STATIC_LIBRARIES 指定编译需要的静态库.a文件,不会打包到软件中
  • BUILD_SHARED_LIBRARY 编译共享的.so文件,会打包到最终的软件包中
  • BUILD_STATIC_LIBRARY 编译静态的.a文件,不会打包的最终的软件包中。可以用.a文件来编译生成.so文件
  • PREBUILT_SHARED_LIBRARY 预编译一个共享库,这里他的源文件LOCAL_SRC_FILES的值指向一个三方.so文件
  • PREBUILT_STATIC_LIBRARY 与 PREBUILT_SHARED_LIBRARY 相同,但用于预编译静态库
  • LOCAL_C_INCLUDES 编译库是引用的头文件。编译一个so库时,必须要用这个关键字指明它用到的所有头文件库。
  • LOCAL_EXPORT_C_INCLUDES。LOCAL_EXPORT_C_INCLUDES这个变量指明需要导出的头文件。在module(命名A)中指明这个关键字后,可以让别的module(命名B)引用module A的时候,自动的包含A的头文件,使得B正常编译。
  • 使用预编译库
# PREBUILT_SHARED_LIBRARY 构建的模块都是使用预编译库,
# 请参考https://developer.android.com/ndk/guides/prebuilts.html。需要搞清楚Android.mk中模块的概念。
# LOCAL_SHARED_LIBRARIES 这个变量后面只能跟随模块名字,而不是so文件的名字
# LOCAL_EXPORT_C_INCLUDES 导出其他module编译需要的头文件
include $(CLEAR_VARS)
LOCAL_MODULE := libdemo
LOCAL_SRC_FILES := $(LOCAL_PATH)/libs/demo.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/libs/include/
include $(PREBUILT_SHARED_LIBRARY)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值