赞
踩
如果想让自己的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浏览器有以下处理方式
这是个暴力的解决办法,但是移植性、维护性差一些。如果有的板卡需要,有的不需要,这样就不能删除了。
或者将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 := Browser
-
- LOCAL_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)
可以在这里进行统一添加和去除
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。