無碼APK和依賴庫預置進系統進行升級

#將 old.apk 進行升級爲 new.apk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := new.apk 
LOCAL_SRC_FILES := old.apk
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := APPS
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_MODULE_PATH := $(TARGET_OUT)/app
include $(BUILD_PREBUILT)

#方法一:預置so等資源文件

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := lib.so
LOCAL_SRC_FILES := lib.so
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_PATH := $(TARGET_OUT)/lib/
include $(BUILD_PREBUILT)

#方法二:預置so等資源文件

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_PREBUILT_LIBS := lib01.so lib02.so
include $(BUILD_MULTI_PREBUILT)

#方法三:
預置so等資源文件,在Android.mk裏 添加 這樣一句,注意:這樣的方式 如果路徑不存在,這條指令 執行 失敗,但 不會 報錯!

$(shell cp -rf $(LOCAL_PATH)/libs/*.so $(TARGET_OUT)/lib)

 

LOCAL_MODULE 指定 拷貝後的apk的名字(全名),這個變量裏可以有路徑,但路徑也會被拷貝,創建,如果 是在編譯整個android的源碼,這個apk必須已經添加到了PRODUCT_PACKAGES 變量裏,否則 不會拷貝到,相應的位置,

LOCAL_MODULE_PATH 指定拷貝的路徑,如果路徑不存在自己創建

LOCAL_SRC_FILES 指定 源apk

LOCAL_CERTIFICATE := PRESIGNED 表示 這個apk已經簽過名了,系統不需要再次 簽名;

LOCAL_MODULE_CLASS 指定文件類型,apk文件用APPS, 並且 會檢查 是否是apk文件,動態庫so文件用SHARED_LIBRARIES ,bin文件用EXECUTABLES,其他文件 用ETC

注意:若是被預置的apk裏有so庫,需要將從Test.apk的 so庫拷貝到 out/target/product/xxx/system/lib/目錄下,若無 so 庫,則去掉此步;

方法一 只能針對 一個文件,方法二 可以 針對多個文件,但 只能 把 文件 拷貝到 system/lib/ 下,
Android提供了Prebuilt編譯方法,兩個文件prebuilt.mk和multi_prebuilt.mk,對應的方法宏是BUILD_PREBUILT和 BUILD_MULTI_PREBUILT。
prebuilt.mk就是prebuilt的具體實現,它是針對獨立一個文件的操作,multi_prebuilt.mk 可以針對多個文件的,它對多個文件進行判斷,然後調用prebuilt對獨立一個文件進行處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章