Android中如何不编译源生模块

如果想让自己的app 替换系统的app 比如使用闪电浏览器替换系统的Browser

首先把闪电浏览器放到 vendor/rockchip/common/apps

 Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)LOCAL_MODULE := Lightning
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := platform
LOCAL_PREBUILT_JNI_LIBS := \lib/libjbigi.so
include $(BUILD_PREBUILT)

关于系统默认的Browser浏览器有以下处理方式

1、直接删掉Browser这个目录方案

这是个暴力的解决办法,但是移植性、维护性差一些。如果有的板卡需要,有的不需要,这样就不能删除了。

或者将Browser下的Android.mk进行修改 使其不进行编译

这个方案改动较大

2、Android中源生给出的替换方案
这个方案Android源生是存在的,仔细看下build/core/*.mk 就会发现有个变量叫LOCAL_OVERRIDES_PACKAGES

这个变量跟LOCAL_PACKAGE_NAME一样,在app的Android.mk中添加需要替换掉什么app(让此app不参与编译)只需要设定这个变量即可。

例如,在闪电浏览器的Android.mk文件中添加LOCAL_OVERRIDES_PACKAGES := Browser

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)LOCAL_MODULE := Lightning
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)LOCAL_OVERRIDES_PACKAGES := BrowserLOCAL_CERTIFICATE := platform
LOCAL_PREBUILT_JNI_LIBS := \lib/libjbigi.so
include $(BUILD_PREBUILT)

这里设定好LOCAL_OVERRIDES_PACKAGES 就可以让Browser不参与编译。

注意,这个参数是起的一个替换的作用,比如有了launcher3后,不需要让系统编译launcher2了,就可以在launcher3下的Android.mk加上LOCAL_OVERRIDES_PACKAGES := Launcher2,这样launcher2就不会编译进系统了

但是,这样修改有个缺点。如果是单个的应用,这样修改没有问题,但是如果是很多应用,那就需要修改每个应用的mk 文件。这就产生了第 3 中修改方案。

3、统一管理方案
对于第2点的方案似乎已经达到目的了,但是如果不是替换,而是简单的控制不让其参与编译,这个变量是无法设定的。

来看下这里统一管理的方案,在Android中的makefile中有个变量PRODUCT_PACKAGES,这个变量是控制模块是否参与编译,我们在device目录下看到很多这样的设定,这时候如果为了项目或者板卡维护,直接修改device下的PRODUCT_PACKAGES变量就可以了。但是有时候会看到有些模块不是在device下面控制,而是放在了build下面,这个时候为了项目维护性,不能直接修改build下的变量。

有了这样的顾虑,为了以后项目维护性,想了一个办法,那就是用一个变量统一管理,以后不管是什么项目不需要源生的或者device下面已经设定好的PRODUCT_PACKAGES,只需要设定这个变量就可以了。

3、统一管理方案
对于第2点的方案似乎已经达到目的了,但是如果不是替换,而是简单的控制不让其参与编译,这个变量是无法设定的。

来看下这里统一管理的方案,在Android中的makefile中有个变量PRODUCT_PACKAGES,这个变量是控制模块是否参与编译,我们在device目录下看到很多这样的设定,这时候如果为了项目或者板卡维护,直接修改device下的PRODUCT_PACKAGES变量就可以了。但是有时候会看到有些模块不是在device下面控制,而是放在了build下面,这个时候为了项目维护性,不能直接修改build下的变量。

有了这样的顾虑,为了以后项目维护性,想了一个办法,那就是用一个变量统一管理,以后不管是什么项目不需要源生的或者device下面已经设定好的PRODUCT_PACKAGES,只需要设定这个变量就可以了。

在build/target/product/core.mk中

#
# Copyright (C) 2007 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
## Base configuration for communication-oriented android devices
# (phones, tablets, etc.).  If you want a change to apply to ALMOST ALL
# devices (including non-phones and non-tablets), modify
# core_minimal.mk instead. If you care about wearables, you need to modify
# core_tiny.mk in addition to core_minimal.mk.PRODUCT_PACKAGES += \BasicDreams \BlockedNumberProvider \BookmarkProvider \Browser \CaptivePortalLogin \CertInstaller \DocumentsUI \DownloadProviderUi \ExternalStorageProvider \FusedLocation \InputDevices \KeyChain \Keyguard \LatinIME \Launcher2 \ManagedProvisioning \MtpDocumentsProvider \PicoTts \PacProcessor \libpac \PrintRecommendationService \ProxyHandler \SharedStorageBackup \StorageManager \TeleService \VpnDialogs \ifneq ($(strip $(TARGET_BOARD_PLATFORM_PRODUCT)), box)
PRODUCT_PACKAGES += \CalendarProvider \PrintSpooler \Telecom \MmsService \Settings
endif$(call inherit-product, $(SRC_TARGET_DIR)/product/core_base.mk)

可以在这里进行统一添加和去除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/69108.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【TypeScript】this指向,this内置组件

this类型 TypeScript可推导的this类型函数中this默认类型对象中的函数中的this明确this指向 怎么指定this类型 this相关的内置工具类型转换ThisParameterType<>ThisParameterType<>ThisType TypeScript可推导的this类型 函数中this默认类型 对象中的函数中的this…

Win10基于 Anaconda 配置 Deeplabcut 环境

最近需要做动物行为学分析的相关研究&#xff0c;同时由于合作者只有 Windows 系统&#xff0c;于是只好在 Windows 中配置环境。说实话还真的是挺折磨的。。。 一、下载 Anaconda 可以通过清华源下载 Anaconda&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/ar…

stack+queue

适配器 介绍 在C的标准模板库&#xff08;STL&#xff09;中&#xff0c;有几种适配器&#xff0c;它们是一些容器或函数对象的包装&#xff0c;提供了不同的接口和功能&#xff0c;用于适应特定的需求 分类 STL中的适配器可以分为两类&#xff1a;容器适配器和迭代器适配器 容…

MySql011——检索数据:过滤数据(使用正则表达式)

前提&#xff1a;使用《MySql006——检索数据&#xff1a;基础select语句》中创建的products表 一、正则表达式介绍 关于正则表达式的介绍大家可以看我的这一篇博客《Java038——正则表达式》&#xff0c;这里就不再累赘。 二、使用MySQL正则表达式 2.1、基本字符匹配 检索…

K8S MetalLB LoadBalancer

1. 简介 kubernetes集群没有L4负载均衡&#xff0c;对外暴漏服务时&#xff0c;只能使用nodePort的方式&#xff0c;比较麻烦&#xff0c;必须要记住不同的端口号。 LoadBalancer&#xff1a;使用云提供商的负载均衡器向外部暴露服务&#xff0c;外部负载均衡器可以将流量路由…

记一次触发器拦截更新操作

1、背景 业务上有一张表记录仓库和经纬度的&#xff0c;正常情况不怎么做变更&#xff1b;业务反馈经常出现经纬度被更新的情况&#xff0c;操作人都是接口或者admin&#xff0c;人工运维后又会被接口/admin覆盖更新掉 2、过程 遇到这种情况&#xff0c;我的第一反应是定位代…

docker镜像管理

创建阿里云容器镜像仓库&#xff1a; 访问地址&#xff1a;https://www.aliyun.com/search?sceneall&kACR&#xff0c;点击立即开通 在实例列表选择个人实例&#xff0c;根据提示创建命名空间、镜像仓库名称等。&#xff08;创建时&#xff0c;代码源我选择的是本地&…

C++ 学习系列 二 -- RAII 机制

一 什么是 RAII &#xff1f; RAII &#xff08;Resource Acquisition Is Initialization&#xff09;是由c之父Bjarne Stroustrup提出的&#xff0c;中文翻译为资源获取即初始化&#xff0c; 其含义是&#xff1a;用局部对象来管理资源的技术&#xff0c;这里所说的资源指的是…

创意转写,文字催生:介绍有用的录音实时转写功能

我有一个朋友叫小敏&#xff0c;是一名记者。她在采访工作中常常遇到一个难题&#xff1a;采访过程中非常容易错过重要信息&#xff0c;到底要用哪款手机录音实时转写软件才能解决这个问题&#xff1f;于是有一天&#xff0c;她听说了一款神奇的录音转文字软件&#xff0c;决定…

七、Linux操作系统下,whichfind如何使用?

1、which命令 &#xff08;1&#xff09;语法&#xff1a;which 参数 &#xff08;2&#xff09;参数&#xff1a;要查找的命令 &#xff08;3&#xff09;示例&#xff1a; 2、find命令 &#xff08;1&#xff09;find 起始路径 -name “被查找的文件名” 注意&#xff1…

python进阶做题日记365-1,

第一天&#xff1a; 1&#xff1a;题目名称&#xff1a;代写匿名信时间限制&#xff1a;1000ms内存限制&#xff1a;256M 题目描述小Q想要匿名举报XX领导不务正业&#xff01; 小Q害怕别人认出他的字迹。 他选择从报纸上剪裁下来英文字母组成自己的举报信。 现在小Q找来了报纸…

re学习(32)【绿城杯2021】babyvxworks(浅谈花指令)

链接&#xff1a;https://pan.baidu.com/s/1msA5EY_7hoYGBEema7nWwA 提取码&#xff1a;b9xf wp:首先找不到main函数&#xff0c;然后寻找特殊字符串&#xff0c; 交叉引用 反汇编 主函数在sub_3D9当中&#xff0c;但是IDA分析错了 分析错误后&#xff0c;删除函数 创建函数 操…