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)NDKinclude (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

Android apk如何加固防止被破解(防止逆向编译)

Android apk如何加固防止被破解(防止逆向编译)

使用Android Studio调试系统应用之TvSettings:再次编译,生成APK文件

app加固&apk文件防止反编译&apk打包流程

app加固&apk文件防止反编译&apk打包流程