Android.mk的参数解释

Android.mk的参数解释

版权声明

本文来自博客园,作者:观心静 ,转载请注明原文链接:https://www.cnblogs.com/guanxinjing/p/17855805.html

本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。

前言

此博客以Android10为准,请注意在预装应用根据不同平台(MTK、展讯、瑞芯微),也是有所区别的,所以实际导入细节请你的平台文档为准。此篇博客只讲解原生AOSP的预装应用。

将应用添加到系统中,编译前只有2个目录可以存放应用vendor/apps与packages/apps

这两个目录其实没啥区别,甚至存放应用就没有目录的限制,理论你随意创建一个文件夹都可以,因为识别路径的关键是PRODUCT_PACKAGES配置(这个后面会讲到)。但是这不符合规则默契,所以我们还是得老老实实的放到上面2个目录中。

vendor/apps目录是厂商的客制化目录,存放一些第三方厂商的配置文件、firmware以及动态库等等,其中也包括了应用。vendor这个目录在原生aosp里是不存在的,它需要你自己创建。但是如果你是用MTK或者展讯、瑞芯微的这些厂商的aosp,那么 vendor目录他们早就创建好了。

packages/apps目录,完全是Android原生的应用目录,里面包含了Email、Music、Gallery、Launcher3 等等系统应用,你也可以在这个目录下添加自己的应用。

所以这边推荐是将自己的应用放到vendor客制化目录下,方便与原生的应用隔开管理。至于有些人担心应用的是否可卸载、是否是系统级应用,这与在不在vendor或者packages等等无关。 有关系的是Android.mk文件的配置,所以这点无需苦恼。

所以下面的博客中将讲解如何将应用添加到vendor/apps。不讲解如何将应用添加到packages/apps目录,因为操作上与添加到vendor/apps没区别,只是路径不同。

上面是编译前的目录,这里是编译后的目录,在配置Android.mk文件,可以将应用编译到如下目标文件:

/system/framework 用于存放资源型应用(系统框架)

/system/app 用于存放系统应用,不能卸载

/systme/priv-app Android4.4+ 新增,系统 [ 核心 ] 应用存放路径(最高权限)

/vendor/app 用于存放厂商应用,可以卸载,恢复出厂时恢复

/data/app 用于存放用户应用,可以卸载,恢复出厂时不能恢复

/data/app-private Android4.4+ 新增,受 DRM 保护的应用存放路径

注意事项

应用架构

因为Android模拟器为了在电脑上流畅运行所以大部分人会选择x86_64架构,而实体机大部分是ARM架构, 所以在添加预装应用前,请先判断自己的app选择了什么架构,因为架构不支持会导致应用无法安装。而现在的大部分主流的应用都只支持ARM架构,如果你是用模拟器正在学习framework开发,这里建议自己用Android studio编译一个支持x86_64的应用。

将应用添加到data_无源码_无法卸载

创建目录

这里的vendor目录其实是需要你自己在aosp根目录下创建的(原生的aosp不自带这个目录),你可以通过下面这个命令一次性创建好全部目录。

mkdir -p vendor/apps

接下来进入这个目录,创建一个你需要导入的应用目录,用来存放.apk与.mk文件,如下我创建了一个叫Calligraphy的应用目录

~/aosp/vendor/apps$ mkdir Calligraphy

配置apk与android.mk文件

将apk文件cp到你创建目录下,并且创建Android.mk文件

$ touch Android.mk

在Android.mk 填入如下内容

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := Calligraphy

LOCAL_MODULE_TAGS := optional

LOCAL_MODULE_CLASS := APPS

LOCAL_CERTIFICATE := PRESIGNED

LOCAL_SRC_FILES := Calligraphy.apk

LOCAL_PROPRIETARY_MODULE := true

include $(BUILD_PREBUILT)

最后目录下的2个文件

Android.mk的参数解释

LOCAL_MODULE

用来指定模块的名称,该模块名称需要加入到PRODUCT_PACKAGES(加入这参数下面会说)

LOCAL_MODULE_TAGS

用来指定该app在编译什么样子的版本的时候会被安装到机器上;

user: 指该模块只在user版本下才编译

eng: 指该模块只在eng版本下才编译

tests: 指该模块只在tests版本下才编译

optional:指该模块在所有版本下都编译

LOCAL_MODULE_CLASS

在采用预装这种形式的时候,该变量来指定预装的模块的类型,此处为APPS;

LOCAL_CERTIFICATE

用于设置APK的签名模式,一共有如下四种:

media 使用media签名文件签名

platform 使用平台签名文件签名,也就是系统签名

shared使用shared签名文件签名

PRESIGNED 如果文件已经签过名,不需要重新签名,则使用PRESIGNED

LOCAL_SRC_FILES

要预装的APK源文件;

LOCAL_PROPRIETARY_MODULE

LOCAL_PRIVILEGED_MODULE 决定了其编译后的在ROM中的安装位置: 如果不设置或者设为false,安装位置为system/app; 如果设置为true,安装位置为system/priv-app。

配置device.mk文件

这里可以搜索下device.mk,会发现device.mk会有很多同名文件,如下图:

首先,我们需要修改目标在build/make目录下,所以把目标缩小到这些目录下,其次你会发现这些目录下也有很多device.mk,这是是与你需要编译的cpu架构有关,与你的在编译时选择lunch有关。 我自己这边是选择编译的是lunch 24 所对应的就是x86_64.

所以,我这边是打开generice_x86_64目录下的device.mk进行修改。增加需要编译的apk目录,如果是第一次配置,没有PRODUCT_PACKAGES配置项,你需要自己添加上去,并且增加上面的应用目录名称,如下图片:

执行编译后,查看结果

在编译后的out文件查看结果

刷机查看结果

在设置中查看

用adb查看结果

$ adb shell

my_device_01:/ # cd vendor/app/

my_device_01:/vendor/app # ls

BiliBili Bing Calligraphy

将应用添加到vendor_无源码_无法卸载

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := Calligraphy

LOCAL_MODULE_CLASS := APPS

LOCAL_MODULE_TAGS := optional

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/app

LOCAL_CERTIFICATE := PRESIGNED

LOCAL_SRC_FILES := $(LOCAL_MODULE).apk

include $(BUILD_PREBUILT)

end

相关推荐

gb和mb哪个大
皇冠365体育下载

gb和mb哪个大

⏱️ 09-05 ⭐ 1626
汽车之家
国际体育365

汽车之家

⏱️ 10-22 ⭐ 5665
[交流]大改外测放出后大唐和狮驼对比。
365教育平台官网

[交流]大改外测放出后大唐和狮驼对比。

⏱️ 07-11 ⭐ 6026