当前位置:   article > 正文

Android中如何不编译源生模块_android.bp 不编译

android.bp 不编译

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

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

 Android.mk

  1. LOCAL_PATH := $(call my-dir)
  2. include $(CLEAR_VARS)
  3. LOCAL_MODULE := Lightning
  4. LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
  5. LOCAL_MODULE_CLASS := APPS
  6. LOCAL_MODULE_TAGS := optional
  7. LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
  8. LOCAL_CERTIFICATE := platform
  9. LOCAL_PREBUILT_JNI_LIBS := \
  10. lib/libjbigi.so
  11. 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

  1. LOCAL_PATH := $(call my-dir)
  2. include $(CLEAR_VARS)
  3. LOCAL_MODULE := Lightning
  4. LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
  5. LOCAL_MODULE_CLASS := APPS
  6. LOCAL_MODULE_TAGS := optional
  7. LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
  8. LOCAL_OVERRIDES_PACKAGES := Browser
  9. LOCAL_CERTIFICATE := platform
  10. LOCAL_PREBUILT_JNI_LIBS := \
  11. lib/libjbigi.so
  12. 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中

  1. #
  2. # Copyright (C) 2007 The Android Open Source Project
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # http://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. #
  16. # Base configuration for communication-oriented android devices
  17. # (phones, tablets, etc.). If you want a change to apply to ALMOST ALL
  18. # devices (including non-phones and non-tablets), modify
  19. # core_minimal.mk instead. If you care about wearables, you need to modify
  20. # core_tiny.mk in addition to core_minimal.mk.
  21. PRODUCT_PACKAGES += \
  22. BasicDreams \
  23. BlockedNumberProvider \
  24. BookmarkProvider \
  25. Browser \
  26. CaptivePortalLogin \
  27. CertInstaller \
  28. DocumentsUI \
  29. DownloadProviderUi \
  30. ExternalStorageProvider \
  31. FusedLocation \
  32. InputDevices \
  33. KeyChain \
  34. Keyguard \
  35. LatinIME \
  36. Launcher2 \
  37. ManagedProvisioning \
  38. MtpDocumentsProvider \
  39. PicoTts \
  40. PacProcessor \
  41. libpac \
  42. PrintRecommendationService \
  43. ProxyHandler \
  44. SharedStorageBackup \
  45. StorageManager \
  46. TeleService \
  47. VpnDialogs \
  48. ifneq ($(strip $(TARGET_BOARD_PLATFORM_PRODUCT)), box)
  49. PRODUCT_PACKAGES += \
  50. CalendarProvider \
  51. PrintSpooler \
  52. Telecom \
  53. MmsService \
  54. Settings
  55. endif
  56. $(call inherit-product, $(SRC_TARGET_DIR)/product/core_base.mk)

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/255788
推荐阅读
相关标签
  

闽ICP备14008679号