android7.1编译第三方apk到系统中的android.mk学习
Posted King-Guo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 (BUILDxxxxxx)执行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的话,它的值就 是 (LOCALMODULESTEM) (LOCAL_MODULE_SUFFIX),如果没有指定了的话就是 (LOCALMODULE) (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
以上是关于android7.1编译第三方apk到系统中的android.mk学习的主要内容,如果未能解决你的问题,请参考以下文章
decompile APK + eclipse to debug