设为首页 加入收藏

TOP

2.4.1 Android.mk(2)
2014-07-23 20:30:24 来源: 作者: 【 】 浏览:110
Tags:2.4.1 Android.mk

2.4.1  Android.mk(2)

2. 构建多个共享库

基于不同的应用程序的体系结构,一个单独的Android.mk文档可能产生多个共享库模块。为了达到这个目的,需要如程序清单2-2所示在Android.mk文档中定义多个模块。

程序清单2-2  带有多个共享库模块的Android.mk构建文件
 

  1. LOCAL_PATH := $(call my-dir)  
  2.  
  3. #  
  4. #模块 1  
  5. #  
  6. include $(CLEAR_VARS)  
  7.  
  8. LOCAL_MODULE :module1 
  9. LOCAL_SRC_FILES :module1.c  
  10. include $(BUILD_SHARED_LIBRARY)  
  11.  
  12. #  
  13. #模块 2  
  14. #  
  15. include $(CLEAR_VARS)  
  16.  
  17. LOCAL_MODULE :module2 
  18. LOCAL_SRC_FILES :module2.c  
  19.  
  20. include $(BUILD_SHARED_LIBRARY) 

在处理完这个Android.mk构建文档之后,Android NDK构建系统会产生libmodule1.so和libmodule2.so两个共享库。

3. 构建静态库

Android NDK构建系统也支持静态库。实际的Android应用程序并不直接使用静态库,并且应用程序包中也不包含静态库。静态库可以用来构建共享库。例如,在将第三方代码添加到现有原生项目中时,不用直接将第三方源代码包括在原生项目中,而是将第三方代码编译成静态库然后并入共享库,如程序清单2-3所示。

程序清单2-3  在Android.mk 文件中使用静态库
 

  1. LOCAL_PATH := $(call my-dir)  
  2.  
  3. #  
  4. # 第三方AVI库  
  5. #  
  6. include $(CLEAR_VARS)  
  7.  
  8. LOCAL_MODULE :avilib 
  9. LOCAL_SRC_FILES :avilib.c platform_posix.c  
  10.  
  11. include $(BUILD_STATIC_LIBRARY)  
  12.  
  13. #  
  14. # 原生模块  
  15. #  
  16. include $(CLEAR_VARS)  
  17.  
  18. LOCAL_MODULE :module 
  19. LOCAL_SRC_FILES :module.c  
  20.  
  21. LOCAL_STATIC_LIBRARIES :avilib 
  22.  
  23. include $(BUILD_SHARED_LIBRARY) 

在将第三方代码模块生成静态库之后,共享库就可以通过将它的模块名添加到LOCAL_STATIC_LIBRARIES变量中来使用该模块。

4. 用共享库共享通用模块

静态库可以保证源代码模块化;但是,当静态库与共享库相连时,它就变成了共享库的一部分。在多个共享库的情况下,多个共享库与同一个静态库连接时,需要将通用模块的多个副本与不同共享库重复相连,这样就增加了应用程序的大小。在这种情况下,不用构建静态库,而是将通用模块作为共享库建立起来,而动态连接依赖模块以便消除重复的副本(见程序清单2-4)。

程序清单2-4  Android.mk 文件中共享库之间的代码共享
 

  1. LOCAL_PATH := $(call my-dir)  
  2.  
  3. #  
  4. # 第三方AVI库  
  5. #  
  6. include $(CLEAR_VARS)  
  7.  
  8. LOCAL_MODULE :avilib 
  9. LOCAL_SRC_FILES :avilib.c platform_posix.c  
  10.  
  11. include $(BUILD_SHARED_LIBRARY)  
  12.  
  13. #  
  14. # 原生模块 1  
  15. #  
  16. include $(CLEAR_VARS)  
  17.  
  18. LOCAL_MODULE :module1 
  19. LOCAL_SRC_FILES :module1.c  
  20.  
  21. LOCAL_SHARED_LIBRARIES :avilib 
  22.  
  23. include $(BUILD_SHARED_LIBRARY)  
  24.  
  25. #  
  26. # 原生模块2  
  27. #  
  28. include $(CLEAR_VARS)  
  29.  
  30. LOCAL_MODULE :module2 
  31. LOCAL_SRC_FILES :module2.c  
  32.  
  33. LOCAL_SHARED_LIBRARIES :avilib 
  34.  
  35. include $(BUILD_SHARED_LIBRARY) 

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:342347198

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.4.1 Android.mk(1) 下一篇2.4.1 Android.mk(3)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·About - Redis (2025-12-26 08:20:56)
·Redis: A Comprehens (2025-12-26 08:20:53)
·Redis - The Real-ti (2025-12-26 08:20:50)
·Bash 脚本教程——Li (2025-12-26 07:53:35)
·实战篇!Linux shell (2025-12-26 07:53:32)