たとえば、独自のアプリをシステムアプリと置き換える場合は、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)
ここで均一に追加および削除できます