对于Android系统集成有源码的第三方库和程序,只需要提供Android.mk文件,把源码集成到 Android编译系统中就可以了,并且有很多例子可以参考。但是对于没有源码的pre-build第三方库和程序,网上介绍的比较少,可以参考的例子也不多。本文简单介绍一下集成pre-build库和程序时候,怎样编写Android.mk。

1、集成静态库

[xhtml:nogutter] view plain copy print ?
  1. 1:LOCAL_PATH:=$(callmy-dir)
  2. 2:include$(CLEAR_VARS)
  3. 3:
  4. 4:LOCAL_PREBUILT_LIBS:=libA.a/
  5. 5:libB.a
  6. 6:
  7. 7:LOCAL_STATIC_LIBRARIES:=libA/
  8. 8:libB
  9. 9:
  10. 0:include$(BUILD_MULTI_PREBUILT)

2、集成动态库

[c-sharp:nogutter] view plain copy print ?
  1. 1:LOCAL_PATH:=$(callmy-dir)
  2. 2:include$(CLEAR_VARS)
  3. 3:
  4. 4:LOCAL_PREBUILT_LIBS:=libA.so
  5. 5:libB.so
  6. 6:include$(BUILD_MULTI_PREBUILT)

3、集成可执行程序

[xhtml:nogutter]view plaincopyprint?
  1. 1:LOCAL_PATH:=$(callmy-dir)
  2. 2:include$(CLEAR_VARS)
  3. 3:
  4. 4:LOCAL_SRC_FILES:=hellovprc.elf
  5. 5:LOCAL_MODULE:=hellovprc.elf
  6. 6:LOCAL_MODULE_CLASS:=EXECUTABLES
  7. 7:LOCAL_MODULE_TAGS:=debug
  8. 8:include$(BUILD_PREBUILT)

4、集成pre-build Android应用程序(APK)

如何集成没有源码的apk文件,纯粹的apk呢?

方法一、目录结构vendor/BM/APPs/MobileQQ2011/MobileQQ2011.apk

vendor/BM/APPs/MobileQQ2011/Android.mk

以下是Android.mk:

[xhtml:nogutter]view plaincopyprint?
  1. LOCAL_PATH:=$(callmy-dir)
  2. include$(CLEAR_VARS)
  3. #Modulenameshouldmatchapknametobeinstalled.
  4. LOCAL_MODULE:=MobileQQ2011
  5. LOCAL_SRC_FILES:=$(LOCAL_MODULE).apk
  6. LOCAL_MODULE_CLASS:=APPS
  7. LOCAL_MODULE_SUFFIX:=$(COMMON_ANDROID_PACKAGE_SUFFIX)
  8. #LOCAL_MODULE_TAGS:=user
  9. #addbyyue@20110516
  10. #youcanchooseapk'sdifflocation
  11. #LOCAL_MODULE_PATH:=$(TARGET_OUT_APPS)
  12. LOCAL_MODULE_PATH:=$(TARGET_OUT_DATA_APPS)
  13. LOCAL_CERTIFICATE:=platform
  14. #end
  15. include$(BUILD_PREBUILT)

加进去后,在根目录下执行:make即可,

可以在installed-files.txt中查看是否加入到了对应的img文件中。

弊端是如果加入很多apk,要逐个建立这样的目录结构,也因为有android.mk,会产生相应的临时文件

方法二、纯粹拷贝apk文件

目录结构vendor/BM/APPs/MobileQQ2011.apk

vendor/BM/APPs/Renren_Android_3.0.2.apk

。。。。。

通过android提供的PRODUCT_COPY_FILES这个变量来自动拷贝,只需要给此变量赋值。在任何一个确定加入编译的mk文件

中加入(我的是加在msm7627_qrd.mk)

PRODUCT_COPY_FILES += /

vendor/bm/APPS/MobileQQ2011.apk:system/app/MobileQQ2011.apk/
vendor/bm/APPS/Renren_Android_3.0.2.apk:system/app/Renren_Android_3.0.2.apk

这种相对不会很繁琐,不需要一级级的建立目录,在内置很多apk是比较方便。

附加说明:

关于android.mk中的LOCAL_OVERRIDES_PACKAGES需要说明一下,

此变量可以使其他的模块不加入编译,如源码中DeskClock的android.mk有

LOCAL_OVERRIDES_PACKAGES := AlarmClock

使AlarmClock不会加入到编译系统中,不会生成AlarmClock.apk。

原先我是死活不明白会什么有两个闹钟AlarmClock和DeskClock,源码几乎相同,原先只在AlarmClock中的文件中修改,就是没有效果,测试说没有修改,原来发布的版本中只有DeckClock.apk,我却在本地make AlarmClock编译出了AlarmClock.apk,>_<!!

试了一下在DeskClock的android.mk中加入LOCAL_OVERRIDES_PACKAGES := Calendar,删掉Calendar.apk,然后全部make一下,在system/app下calendar.apk竟然没再生成了????!!!

p.s

# Some packages may override others using LOCAL_OVERRIDES_PACKAGES.
# Filter out (do not install) any overridden packages.
overridden_packages := $(call get-package-overrides,$(modules_to_install))
ifdef overridden_packages
# old_modules_to_install := $(modules_to_install)
modules_to_install := /
$(filter-out $(foreach p,$(overridden_packages),$(p) %/$(p).apk), /
$(modules_to_install))
endif

其他参考:

1.对Android.mk文件中变量做了详细说明

http://www.cnblogs.com/leaven/archive/2011/03/30/1999350.html

2. Android.mk文件语法规范

http://apps.hi.baidu.com/share/detail/15447104

本文转载自:http://blog.csdn.net/zhangchiytu/article/details/6424910

更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. 读取android手机流量信息
  4. android 使用html5作布局文件: webview跟javascript交互
  5. Android(安卓)多媒体扫描过程(Android(安卓)Media Scanner Proces
  6. android“设置”里的版本号
  7. Android开发环境搭建
  8. Android(安卓)Resource介绍和使用
  9. 2014.01.21 ——— android 关联android-support源码

随机推荐

  1. Android禁止横屏竖屏切换
  2. Android开发指南中文版(一)What is Android
  3. Android多媒体开发
  4. 自定义Android键盘
  5. Android新的menu实现——ActionMode
  6. 使用 Eclipse PhoneGap 构建 Android(安
  7. Android(安卓)任务、进程和线程
  8. Android(安卓)自定义camera压缩图片到指
  9. Android数据存取之Preferences
  10. Android(安卓)JNI开发入门之二