Android内核开发:在源码树中添加新的app应用-创新互联
本文是《Android内核开发》系列的第十二篇文章,上一篇文章介绍了如何从源码中删除出厂的app应用,本文则在此基础上,详细介绍一下如何在Android内核源码树中添加一个新的app应用。
“只有客户发展了,才有我们的生存与发展!”这是创新互联的服务宗旨!把网站当作互联网产品,产品思维更注重全局思维、需求分析和迭代思维,在网站建设中就是为了建设一个不仅审美在线,而且实用性极高的网站。创新互联对成都做网站、成都网站设计、网站制作、网站开发、网页设计、网站优化、网络推广、探索永无止境。网上也有介绍怎么在源码中添加新的app应用的博文,但大都数只介绍了不含有jni本地代码的app的添加方法,本文会更加全面地介绍三种不同类型的app应用如何添加到Android内核源码树中编译。
假设新的应用名字叫:HelloWorld,并且已经在Eclipse或者Android Studio中编译和调试通过了,我们下面分三种情况来讨论如何将它添加到Android内核源码树中。
1. 不带jni本地代码
首先,在Android内核源码中选择一个目录来存放HelloWorld应用的源码,比如放到/packages/apps目录下。
(1) 在HelloWorld目录下新建Android.mk文件,示例如下:
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := eng LOCAL_SRC_FILES := $(call all-subdir-java-files) LOCAL_PACKAGE_NAME := HelloWorld include $(BUILD_PACKAGE)
注:LOCAL_MODULE_TAGS的备选值有user,eng,tests,optional,本示例中使用的TAGS值为eng,因此,仅当用户指定的编译选项为eng时才会编译该工程。
(2) 配置makefile,添加新的项目
这一步与《Android内核开发:从源码树中删除出厂的app应用》正好相反,选择 /device/
PRODUCT_PACKAGES := \ DeskClock \ Calculator \ Calendar \ Camera2 \ Email \ HelloWorld
(3) 编译模块
在HelloWorld目录下输入mm命令,或者切换到Android源码根目录下执行下面任意一条命令即可:
$ make HelloWorld $ mmm package/apps/HelloWorld
编译生成的apk会放到在out/target/product/
2. 含有jni本地代码
对于含有jni的项目,则需要修改上述新建的Android.mk,如下:
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := eng LOCAL_SRC_FILES := $(call all-subdir-java-files) LOCAL_PACKAGE_NAME := HelloWorld LOCAL_JNI_SHARED_LIBRARIES := libmynative include $(BUILD_PACKAGE) include $(call all-makefiles-under,$(LOCAL_PATH))
jni目录下的Android.mk如下(假设jni目录下有inc和src目录):
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libmynative LOCAL_SRC_FILES := src/mynative.c LOCAL_C_INCLUDES += $(JNI_H_INCLUDE) LOCAL_C_INCLUDES += $(LOCAL_PATH)/inc include $(BUILD_SHARED_LIBRARY)
3. 含有jni本地代码,并且本地代码依赖第三方库(.a或者so)
假设本地代码依赖的第三方库为:encoder.a 和 decoder.so
(1) 修改上述jni目录下的Android,mk,添加如下两项:
LOCAL_STATIC_LIBRARIES := libencoder LOCAL_SHARED_LIBRARIES := libdecoder
(2) 修改HelloWorld目录下的Android.mk文件
首先把 encoder.a 和 decoder.so 都拷贝到工程根目录下,然后修改Android.mk文件,添加如下两项即可:
include $(CLEAR_VARS) LOCAL_MODULE := libencoder LOCAL_SRC_FILES := encoder.a LOCAL_MODULE_TAGS := eng LOCAL_MODULE_CLASS := STATIC_LIBRARIES LOCAL_MODULE_SUFFIX := .a include $(BUILD_PREBUILT) include $(CLEAR_VARS) LOCAL_MODULE := libdecoder LOCAL_SRC_FILES := decoder.so LOCAL_MODULE_TAGS := eng LOCAL_MODULE_CLASS := SHARED_LIBRARIES LOCAL_MODULE_SUFFIX := .so include $(BUILD_PREBUILT)
关于如何在源码树中添加新的app应用就介绍到这里了,有任何疑问或者建议欢迎留言或者来信lujun.hust@gmail.com交流,或者关注我的新浪微博 @卢_俊 获取最新的文章和资讯。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
当前题目:Android内核开发:在源码树中添加新的app应用-创新互联
标题来源:http://scyanting.com/article/iepsi.html