android7.1编译第三方apk到系统中的android.mk学习 基于packages/apps/Browser/Android.mk文件内容,如下: LOCAL_PATH := $(my-d

android7.1编译第三方apk到系统中的android.mk学习

 

基于packages/apps/Browser/Android.mk文件内容,如下:

LOCAL_PATH := $(my-dir)

 

include $(CLEAR_VARS)

 

LOCAL_MODULE := SWEBrowser

LOCAL_MODULE_TAGS := optional

LOCAL_MODULE_CLASS := APPS

LOCAL_MODULE_SUFFIX :=$(COMMON_ANDROID_PACKAGE_SUFFIX)

 

LOCAL_SRC_FILES := Browser.apk

 

LOCAL_BUILT_MODULE_STEM := package.apk

LOCAL_CERTIFICATE := PRESIGNED

LOCAL_OVERRIDES_PACKAGES := BrowserBrowser2

LOCAL_MULTILIB := 32

 

LOCAL_PREBUILT_JNI_LIBS:= \

lib/libc++_shared.so \

lib/libicui18n.cr.so \

lib/libicuuc.cr.so \

lib/libswe.so \

lib/libswecore.so \

lib/libswev8.so \

lib/libswewebrefiner.so

 

include $(BUILD_PREBUILT)

 

(1)  LOCAL_PATH := $(my-dir)

变量制定了该.mk的路径,$(callmy-dir)调用NDK内部的函数获得当前.mk文件的路径。

 

(2)  include $(CLEAR_VARS)

include $(CLEAR_VARS)清空了除了LOCAL_PATH之外的所有LOCAL_xxx变量的值省略号中间就是对于模块参数的设置,主要包括:模块名字、模块源文件、模块类型、编译好的模块存放位置、以及编译的平台等。

include $(BUILD_xxx_xxx)执行NDK的默认脚本,它会收集include $(CLEAR_VARS)脚本后所有定义的LOCAL_xxx变量,然后根据它们来生成模块。

 

(3)  LOCAL_MODULE

LOCAL_MODULE := SWEBrowser,必须定义,模块名称,用来描述每一个模块而且名称必须是唯一的。

 

(4)  LOCAL_MODULE_TAGS

LOCAL_MODULE_TAGS := optional,当前模块所包含的标签,一个模块可包含多个标签,可以是debug、eng、tests或optional

 

(5)  LOCAL_MODULE_CLASS

LOCAL_MODULE_CLASS := APPS,标识所编译模块最后放置的位置,ETC表示放置在/system/etc.目录下,APPS表示放置在/system/app目录下,SHARED_LIBRARIES表示放置在/system/lib目录下。

 

(6)  LOCAL_MODULE_SUFFIX

LOCAL_MODULE_SUFFIX :=$(COMMON_ANDROID_PACKAGE_SUFFIX),模块前缀,在\build\core\config.mk定义COMMON_ANDROID_PACKAGE_SUFFIX :=.apk

 

(7)  LOCAL_SRC_FILES

LOCAL_SRC_FILES := Browser.apk,当前模块包含的所有源代码文件。

 

(8)  LOCAL_BUILT_MODULE_STEM

LOCAL_BUILT_MODULE_STEM := package.apk,表示编译链接后的目标文件的文件名,带后缀,如果本地模块指定了LOCAL_MODULE_STEM的话,它的值就 是$(LOCAL_MODULE_STEM)$(LOCAL_MODULE_SUFFIX),如果没有指定了的话就是$(LOCAL_MODULE)$(LOCAL_MODULE_SUFFIX),这里没有指定,所以是SWEBrowser.apk。

 

(9)  LOCAL_CERTIFICATE := PRESIGNED

表示APK签名使用原来签名,即第三方签名,若要使用系统签名,则可以改为LOCAL_CERTIFICATE := platform系统前面,可以使apk获得系统权限。

(10) LOCAL_OVERRIDES_PACKAGES

LOCAL_OVERRIDES_PACKAGES := BrowserBrowser2,覆盖其他所有同名的应用,被替换的APK是不应该被打包到系统镜像中去的。

 

(11) LOCAL_MULTILIB

LOCAL_MULTILIB := 32,指定编译目标为 32位 或 64位。

 

“both”:同时构建 32 位和 64 位

“32”:只构建 32 位

“64”:只构建 64 位

“first”:只给第一个架构构建( 在 32 位中优先 32 位,在 64 位中优先 64 位)

“”:默认参数;构建系统构建哪个架构取决于模块类以及其他LOCAL_ 参数,比如 LOCAL_MODULE_TARGET_ARCH,LOCAL_32_BIT_ONLY 等等。

在多库构建中,像 ifeq $(TARGET_ARCH) 这种附件条件将不再起作用

 

 

(12) LOCAL_PREBUILT_JNI_LIBS

LOCAL_PREBUILT_JNI_LIBS:= \

lib/libc++_shared.so \

lib/libicui18n.cr.so \

lib/libicuuc.cr.so \

lib/libswe.so \

lib/libswecore.so \

lib/libswev8.so \

lib/libswewebrefiner.so

提取第三方应用的lib方法,先解压当前apk内的lib文件夹到当前apk编译目录

 

(13) include $(BUILD_PREBUILT)

该模块已经预先编译。

 

 

此应用用userdebug版本整体编译可以包含到系统中,但是用user版本就没有,没有生成out\target\product\msm8937_64\system\app\SWEBrowser,后来在device\qcom\msm8937_64\msm8937_64.mk增加PRODUCT_PACKAGES+= SWEBrowser就有了,这个表示强制性加的。

 

 

参考链接:

Android——编译安装Module的控制因素

http://blog.csdn.net/jscese/article/details/39209341

 

预置第三方apk到MTK项目相关问题总结

http://blog.csdn.net/a462533587/article/details/46380795

你可能感兴趣的:(makefile,Android及linux编译)