Android でソースモジュールをコンパイルしない方法

たとえば、独自のアプリをシステムアプリと置き換える場合は、Lightning ブラウザを使用してシステムブラウザを置き換えます。

まずLightningブラウザを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)

システムのデフォルトブラウザに関しては、以下の処理方法が利用可能です。

1. ブラウザのディレクトリ プランを直接削除します。

これは暴力的な解決策ですが、移植性と保守性が低くなります。必要なボードとそうでないボードがある場合、それらは削除できません。

または、ブラウザの下の Android.mk を変更して、コンパイルされないようにします。

この計画には大きな変更があります

2. Android の Yuansheng が提供する代替案。
このソリューションは Android Yuansheng に存在します。build/core/*.mk を注意深く見ると、LOCAL_OVERRIDES_PACKAGES という変数があることがわかります。

この変数は LOCAL_PACKAGE_NAME と同じです。置き換える必要があるアプリをアプリの Android.mk に追加するには (このアプリがコンパイルに参加しないように)、この変数を設定するだけで済みます。

たとえば、Lightning ブラウザの 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 を設定すると、ブラウザはコンパイルに参加できなくなります。

このパラメータは代替として機能することに注意してください。たとえば、launcher3 を作成した後は、システムに launcher2 をコンパイルさせる必要はありません。launcher3 の下の Android.mk に LOCAL_OVERRIDES_PACKAGES := Launcher2 を追加すると、launcher2 がコンパイルされなくなります。システムです。分かりました

ただし、この変更には欠点があります。単一のアプリケーションであればこのように修正しても問題ありませんが、アプリケーションが多数ある場合はアプリケーションごとにmkファイルを修正する必要があります。これにより、第 3 回目の改造計画が生まれました。

3. 一元管理ソリューション
ポイント 2 のソリューションは目的を達成しているように見えますが、置き換えではなく、コンパイルに参加しないようにする単純な制御である場合、この変数は設定できません。

ここで統合管理ソリューションを見てみましょう。Android の makefile には変数 PRODUCT_PACKAGES があります。この変数は、モジュールがコンパイルに参加するかどうかを制御します。デバイス ディレクトリにはそのような設定がたくさんあります。現時点では、プロジェクトまたはボード メンテナンスの場合は、デバイスの下の PRODUCT_PACKAGES 変数を直接変更するだけです。ただし、一部のモジュールが device の下で制御されず、build の下に配置される場合がありますが、現時点では、プロジェクトの保守性を考慮して、build の下の変数を直接変更することはできません。

このような懸念から、将来的にプロジェクトの保守性を考慮し、変数を利用して一元管理する方法を考えました。デバイスの下に設定されているので、これを設定するだけで十分です。

3. 一元管理ソリューション
ポイント 2 のソリューションは目的を達成しているように見えますが、置き換えではなく、コンパイルに参加しないようにする単純な制御である場合、この変数は設定できません。

ここで統合管理ソリューションを見てみましょう。Android の makefile には変数 PRODUCT_PACKAGES があります。この変数は、モジュールがコンパイルに参加するかどうかを制御します。デバイス ディレクトリにはそのような設定がたくさんあります。現時点では、プロジェクトまたはボード メンテナンスの場合は、デバイスの下の PRODUCT_PACKAGES 変数を直接変更するだけです。ただし、一部のモジュールが device の下で制御されず、build の下に配置される場合がありますが、現時点では、プロジェクトの保守性を考慮して、build の下の変数を直接変更することはできません。

このような懸念から、将来的にプロジェクトの保守性を考慮し、変数を利用して一元管理する方法を考えました。デバイスの下に設定されているので、これを設定するだけで十分です。

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)

ここで均一に追加および削除できます

Supongo que te gusta

Origin blog.csdn.net/u010823818/article/details/132292356
Recomendado
Clasificación