您的位置:首页 > 移动开发

Android内核开发:在源码树中添加新的app应用

2017-04-27 16:53 429 查看
上一篇文章介绍了如何从源码中删除出厂的app应用,本文则在此基础上,详细介绍一下如何在Android内核源码树中添加一个新的app应用。

 

网上也有介绍怎么在源码中添加新的app应用的博文,但大都数只介绍了不含有jni本地代码的app的添加方法,本文会更加全面地介绍三种不同类型的app应用如何添加到Android内核源码树中编译。

 

假设新的应用名字叫:HelloWorld,并且已经在Eclipse或者Android Studio中编译和调试通过了,我们下面分三种情况来讨论如何将它添加到Android内核源码树中。

 

1.  不带jni本地代码

 

首先,在Android内核源码中选择一个目录来存放HelloWorld应用的源码,比如放到/packages/apps目录下。

 

(1) 在HelloWorld目录下新建Android.mk文件,示例如下:

 

1

2

3

4

5

6

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/<company>/ <product>/xxxx.mk,或者从 build/target/product/ 目录下选择一个被“引用”的.mk,在其中的PRODUCT_PACKAGES参数列表中添加本工程:

 

1

2

3

4

5

6

7

PRODUCT_PACKAGES := \


    
DeskClock \


    
Calculator \


    
Calendar \


    
Camera2 \


    
Email \


    
HelloWorld


 

(3) 编译模块

 

在HelloWorld目录下输入mm命令,或者切换到Android源码根目录下执行下面任意一条命令即可:

 

1

2

$ make HelloWorld 


$ mmm 
package
/apps/HelloWorld


 

编译生成的apk会放到在out/target/product/<product>/system/app/目录下。

 

2.  含有jni本地代码

 

对于含有jni的项目,则需要修改上述新建的Android.mk,如下:

 

1

2

3

4

5

6

7

8

9

10

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目录):

 

1

2

3

4

5

6

7

8

9

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,添加如下两项:

 

1

2

LOCAL_STATIC_LIBRARIES := libencoder


LOCAL_SHARED_LIBRARIES := libdecoder


 

(2) 修改HelloWorld目录下的Android.mk文件

 

首先把 encoder.a 和 decoder.so 都拷贝到工程根目录下,然后修改Android.mk文件,添加如下两项即可:

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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应用就介绍到这里了

原文转自:乐搏学院http://www.learnbo.com/front/article/cmsIndex
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: