android 預置apk so庫 jar包等

分類:編程 時間:2017-02-15

android 預置apk so庫 jar包等

LOCAL_PATH := $(call my-dir) 這一行每個Android.mk 都是要添加的

1.預置aliuyi.apk

預制一個普通的apk

include $(CLEAR_VARS) LOCAL_MODULE := wwwa.apk  LOCAL_SRC_FILES := aliuyi.apk LOCAL_MODULE_CLASS := APPS LOCAL_CERTIFICATE := PRESIGNED LOCAL_MODULE_PATH := $(TARGET_OUT)/app include $(BUILD_PREBUILT)

編譯一個需要特殊vendor key簽名的APK

LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) # Build all Java files in the java subdirectory LOCAL_SRC_FILES := $(call all-subdir-java-files) # Name of the APK to build LOCAL_package_NAME := LocalPackage LOCAL_CERTIFICATE := vendor/example/certs/app # Tell it to build an APK include $(BUILD_PACKAGE)

預制一個帶jar 包的有源碼的apk

(這裏以系統的計算器apk 為例) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_STATIC_JAVA_LIBRARIES := libarity android-support-v4 guava LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_SDK_version := current LOCAL_PACKAGE_NAME := Calculator include $(BUILD_PACKAGE) ################################################## include $(CLEAR_VARS) LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libarity:arity-2.1.2.jar include $(BUILD_MULTI_PREBUILT) # Use the following include to make our test apk. include $(call all-makefiles-under,$(LOCAL_PATH))
上面的libarity 指的就是在Calculator 目錄下面的一個jar 包.

2.預置so等資源文件

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

include $(CLEAR_VARS) LOCAL_MODULE := wanghai.so LOCAL_SRC_FILES := wanghai.so LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := SHARED_LIBRARIES LOCAL_MODULE_PATH := $(TARGET_OUT)/lib/ include $(BUILD_PREBUILT)

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

include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_PREBUILT_LIBS := sdfapk.so sdffff.so include $(BUILD_MULTI_PREBUILT) 備註:上面的方法是把文件預制到system/lib/裏面如果要預制到system/lib/hw/下面可以參考下面 LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw語句改成了 LOCAL_MODULE_RELATIVE_PATH := hw,然後再重新編譯。 網上說第一個實驗path會報錯,但是沒有驗證,實驗第2中驗證是正常的.

方法三:預置so等資源文件

預置so等資源文件,在Android.mk裏 添加 這樣一句,註意:這樣的方式 如果路徑不存在,這條指令 執行 失敗,但 不會 報錯! $(shell cp -rf $(LOCAL_PATH)/libs/*.so $(TARGET_OUT)/lib)

3.預制jar包到系統

方法1:

LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := birdframework_classes:birdframework_classes.jar include $(BUILD_MULTI_PREBUILT)
include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_MODULE := birdframework LOCAL_MODULE_CLASS := JAVA_LIBRARIES LOCAL_NO_EMMA_INSTRUMENT := true LOCAL_NO_EMMA_COMPILE := true LOCAL_DX_FLAGS := --core-library LOCAL_STATIC_JAVA_LIBRARIES := birdframework_classes include $(BUILD_JAVA_LIBRARY) #這裏的birdframework_classes 只是一個別名,可以隨便取.

方法2:

LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := xcap LOCAL_SRC_FILES := javalib.jar LOCAL_MODULE_CLASS := JAVA_LIBRARIES LOCAL_MODULE_SUFFIX := .jar include $(BUILD_PREBUILT)

4.編譯一個靜態JAVA庫(把java代碼打包為jar)

LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) # Build all java files in the java subdirectory LOCAL_SRC_FILES := $(call all-subdir-java-files) # Any libraries that this library depends on LOCAL_JAVA_LIBRARIES := android.test.runner # The name of the jar file to create LOCAL_MODULE := sample # Build a static jar file. include $(BUILD_STATIC_JAVA_LIBRARY)

---------- cut here ------------------

解釋:

1.LOCAL_PATH := $(call my-dir)  一個Android.mk file首先必須定義好LOCAL_PATH變量。它用於在開發樹中查找源文件。在這個例子中,宏函數‘my-dir’, 由編譯系統提供,用於返回當前路徑(即包含Android.mk file文件的目錄)。 (菜鳥級別解釋::=是賦值的意思,+=是追加的意思,$是引用某變量的值) 2.include $( CLEAR_VARS) CLEAR_VARS由編譯系統提供((可以在 android 安裝目錄下的/build/core/config.mk 文件看到其定義,為 CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk)) 指定讓GNU MAKEFILE為你清除許多LOCAL_XXX變量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...),除LOCAL_PATH 。這是必要的,因為所有的編譯控制文件都在同一個GNU MAKE執行環境中,所有的變量都是全局的。 3.LOCAL_MODULE_TAGS :=user eng tests optional user: 指該模塊只在user版本下才編譯 eng: 指該模塊只在eng版本下才編譯 tests: 指該模塊只在tests版本下才編譯 optional:指該模塊在所有版本下都編譯 4.LOCAL_STATIC_JAVA_LIBRARIES 和LOCAL_JAVA_LIBRARIES 的區別 LOCAL_JAVA_LIBRARIES 是添加的動態庫,
LOCAL_STATIC_JAVA_LIBRARIES是添加的靜態庫(編譯會以拷貝的方式加到需要他的應用中)


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

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

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對獨立一個文件進行處理




參考: http://www.th7.cn/Program/Android/201406/212727.shtml
Android Makefile 文件講解: http://blog.csdn.net/yangzhiloveyou/article/details/8627969




Tags: 計算器 android example include files

文章來源:


ads
ads

相關文章
ads

相關文章

ad