如何在2个不同的应用程序中包含一个通用模块(Android)

时间:2014-07-02 13:00:04

标签: android makefile multiple-makefiles

我需要一些Android makefile的帮助。

我的两个应用程序有一个通用模块。我计划为公共模块common.mk提供一个makefile,并将其包含在我的两个应用程序中。

像这样:

app1:
=====
main.c
Android.mk
  ...
  ...
  include ../common/common.mk
  LOCAL_MODULE := app1
  ...
  ...

app2:
=====
main.c
Android.mk
  ...
  ...
  include ../common/common.mk
  LOCAL_MODULE := app2
  ...
  ...

common:
=======
common.mk
common.c

当我使用make app2从根目录构建时,我收到的是除了常见模块之外的所有函数的多个定义错误。

我得出结论,当Android构建系统正在搜索正确的目标(在我的情况下是app2)时,common.mk会被包含两次。这就是问题发生的原因。

现在我该怎么控制呢? Android中的标准方式是什么?

2 个答案:

答案 0 :(得分:1)

正确的方法应该是使用BUILD_SHARED_LIBRARYBUILD_STATIC_LIBRARY目标来构建通用库(共享或静态)。

然后将其添加到app1app2中,只需使用LOCAL_STATIC_LIBRARIESLOCAL_SHARED_LIBRARIESapp1app2之间创建依赖关系和common

检查Android.mk file syntax specification以获取更多信息:

  

<强> BUILD_SHARED_LIBRARY

     

指向构建脚本,该脚本收集有关您在LOCAL_XXX变量中提供的模块的所有信息,并确定如何从列出的源构建目标共享库。请注意,在包含此文件之前,必须至少定义LOCAL_MODULE和LOCAL_SRC_FILES。

     

使用示例:

  include $(BUILD_SHARED_LIBRARY)
     

请注意,这将生成名为lib $(LOCAL_MODULE).so

的文件      

<强> BUILD_STATIC_LIBRARY

     

BUILD_SHARED_LIBRARY的一种变体,用于构建目标静态库。静态库不会复制到项目/包中,但可用于构建共享库(请参阅下面描述的LOCAL_STATIC_LIBRARIES和LOCAL_WHOLE_STATIC_LIBRARIES)。

     

使用示例:

  include $(BUILD_STATIC_LIBRARY)
     

请注意,这将生成一个名为lib $(LOCAL_MODULE).a

的文件      

<强> LOCAL_STATIC_LIBRARIES

     

应链接到此模块的静态库模块列表(使用BUILD_STATIC_LIBRARY构建)。这只适用于共享库模块。

     

<强> LOCAL_SHARED_LIBRARIES

     

此模块在运行时依赖的共享库模块列表。这在链接时是必要的,并在生成的文件中嵌入相应的信息。

答案 1 :(得分:1)

在common.mk中,用于分配C文件的变量使用:=而不是+ =。

每当调用common.mk时,它将为每个模块分配独立的值