您好,登錄后才能下訂單哦!
本文是《Android內(nèi)核開發(fā)》系列的第十二篇文章,上一篇文章介紹了如何從源碼中刪除出廠的app應(yīng)用,本文則在此基礎(chǔ)上,詳細介紹一下如何在Android內(nèi)核源碼樹中添加一個新的app應(yīng)用。
網(wǎng)上也有介紹怎么在源碼中添加新的app應(yīng)用的博文,但大都數(shù)只介紹了不含有jni本地代碼的app的添加方法,本文會更加全面地介紹三種不同類型的app應(yīng)用如何添加到Android內(nèi)核源碼樹中編譯。
假設(shè)新的應(yīng)用名字叫:HelloWorld,并且已經(jīng)在Eclipse或者Android Studio中編譯和調(diào)試通過了,我們下面分三種情況來討論如何將它添加到Android內(nèi)核源碼樹中。
1. 不帶jni本地代碼
首先,在Android內(nèi)核源碼中選擇一個目錄來存放HelloWorld應(yīng)用的源碼,比如放到/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內(nèi)核開發(fā):從源碼樹中刪除出廠的app應(yīng)用》正好相反,選擇 /device/<company>/ <product>/xxxx.mk,或者從 build/target/product/ 目錄下選擇一個被“引用”的.mk,在其中的PRODUCT_PACKAGES參數(shù)列表中添加本工程:
PRODUCT_PACKAGES := \ DeskClock \ Calculator \ Calendar \ Camera2 \ Email \ HelloWorld
(3) 編譯模塊
在HelloWorld目錄下輸入mm命令,或者切換到Android源碼根目錄下執(zhí)行下面任意一條命令即可:
$ make HelloWorld $ mmm package/apps/HelloWorld
編譯生成的apk會放到在out/target/product/<product>/system/app/目錄下。
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如下(假設(shè)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)
假設(shè)本地代碼依賴的第三方庫為: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)
關(guān)于如何在源碼樹中添加新的app應(yīng)用就介紹到這里了,有任何疑問或者建議歡迎留言或者來信lujun.hust@gmail.com交流,或者關(guān)注我的新浪微博 @盧_俊 獲取最新的文章和資訊。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。