Android內核開發:在源碼樹中添加新的app應用

上一篇文章介紹瞭如何從源碼中刪除出廠的app應用,本文則在此基礎上,詳細介紹一下如何在Android內核源碼樹中添加一個新的app應用。java

 

網上也有介紹怎麼在源碼中添加新的app應用的博文,但大都數只介紹了不含有jni本地代碼的app的添加方法,本文會更加全面地介紹三種不一樣類型的app應用如何添加到Android內核源碼樹中編譯。android

 

假設新的應用名字叫:HelloWorld,而且已經在Eclipse或者Android Studio中編譯和調試經過了,咱們下面分三種狀況來討論如何將它添加到Android內核源碼樹中。微信

 

1.  不帶jni本地代碼app

 

首先,在Android內核源碼中選擇一個目錄來存放HelloWorld應用的源碼,好比放到/packages/apps目錄下。學習

 

(1) 在HelloWorld目錄下新建Android.mk文件,示例以下:ui

 

1spa

2.net

3調試

4code

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應用就介紹到這裏了,有任何疑問或者建議歡迎留言或者來信lujun.hust@gmail.com交流

 

結束語

 

免費學習更多精品課程,登陸樂搏學院官網http://h.learnbo.cn/

或關注咱們的官方微博微信,還有更多驚喜哦~

 

本文出自 「Jhuster的專欄」 博客,請務必保留此出

相關文章
相關標籤/搜索