溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Android內(nèi)核開發(fā):在源碼樹中添加新的app應(yīng)用

發(fā)布時間:2020-07-07 06:03:05 來源:網(wǎng)絡(luò) 閱讀:6115 作者:Jhuster 欄目:移動開發(fā)

本文是《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)注我的新浪微博 @盧_俊 獲取最新的文章和資訊。


向AI問一下細節(jié)

免責(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)容。

AI