I.はじめに
置く最近のタスクバーの機能はランチャーアプリケーションはAndroid Qの最大の移行タスクまたは最近のタスクバーの機能にアップグレードするので、ランチャーアプリケーションモジュールにはGoogle、最近タスクバーやシステムのアプリケーションシステムを開始UIのようなイベントの相互作用を、持っているアンドロイドPから移植されたため、ナビゲーションバーに関連したスライド関連する問題は、最近のタスクバーをトリガイベントとして最も近いタスクバーに配信されます。この移行は、Android PからアンドロイドQバージョンへの移行である場合、ネイティブ・ランチャーは別のディレクトリを有するクイックステップ、これはシステムのUI関連するコードアンドロイドPのグーグルに依存しandrod Pのバージョンは、にパッケージ関連するコードを有している場合、最も近いタスクバーモジュールコードでありますsysui-shared.jarパッケージと内蔵の次のクイックステップ/ libsディレクトリに、ので、このコードは、我々はアンドロイドのpをやっているときに依存して考えていません。それは通常の状況下で独立した関連性なしにシステムに依存するのが最善であるように、このコードのコンパイルされたバージョンは、スクリプトを記述することにより、コンパイル時にコンパイラのデバッグを容易にするためにR&Dは、コードもアンドロイドのp sysui-shared.jarを利用して、もちろん、プロジェクト全体をコンパイルするには、Android Studioを使用しますパッケージ。しかし、全体的に依存しないデバッグを容易にするために、アンドロイドスタジオ独立したコンパイラによる後者を確保するために、AndroidのQランチャー最近のタスクバーコード依存のシステムUIコードは、ジャーパッケージにパッケージ化され、関連するコードなどのp好きではないし、コードのロジックの変更がたくさんありますプロジェクトコード、我々は再び別のJARパッケージと同じ構造のPにパッケージ化関連のコードに依存する必要があります。また、唯一のjarパッケージを使用することはできません交換する場合は、関連するコードは、多くのことを発見したクイックステップは、変更されている比較。
第二に、選択したプログラム
2つの移植プログラムがあります。
まず、Androidのqは最近、タスクバーランチャーに移植し、既存のコードに以前の機能に移植します
第二には、適応を行うにはAndroidのP最近、タスクバーのコードにコードを変更します
統合された2つのオプションは、私はいくつかの理由で最初に選びました:
最も移植することにより全体のタスクバーのため1.android Qネイティブコードは不可解な問題の多くを回避することができます
2.私たちは、移行がより便利なインタフェースである上、タスクバー最近の進歩は、全体の枠組みを変更しない変更を行っている行います
3.google枠調整用のネイティブは確かに最適化をたくさん持っているが、我々はそれを見ることができません
4.これは全体の移植後のアップデートのバージョンとのギャップを維持することがより困難に成長していることのコードをGoogleがない場合には
第三に、移行手順
1.打包sysui-shared.jar
2.移植クイックステップ・カタログ・コードはすべてやり直すランチャーに移植します
様々なコンパイラの問題3.移植治療
makeはアンドロイドスタジオを実現し、二つの方法を作る書い4.コンパイルスクリプトがでコンパイルすることができます
最近、タスクバーのAndroid qの円滑な運営を確保するために、そのネイティブ関数の通常の使用
6.最新の移植に元の関数は、最近、タスクバー
ネイティブランチャーを置き換える7.
1.替换sysui-shared.jar
移行プロセスはsysui-shared.jarを見つけるためにいくつかの時間がかかった開始
ネイティブ・ランチャーはsysui共有を導入しました。スクリプト
ifneq (,$(wildcard frameworks/base))
LOCAL_STATIC_JAVA_LIBRARIES := SystemUISharedLib launcherprotosnano
LOCAL_PRIVATE_PLATFORM_APIS := true
else
LOCAL_STATIC_JAVA_LIBRARIES := libSharedSystemUI libLauncherProtos
LOCAL_SDK_VERSION := system_current
上記のスクリプトによると、\ JAVA_LIBRARIES \ SystemUISharedLib_intermediatesディレクトリの下のターゲット\共通\ OBJ \関連のjarパッケージを見つけるために
最近、タスクバーやシステムのUI関連のコード\ \パッケージ\ SystemUIを共有し、前のコードに直接考えた\ベース\ plugin_coreディレクトリ\フレームワークベースの下の枠組み\パッケージ\ SystemUIを使用するクイックステップのディレクトリにコピーされますが、その後、後半を考えますそれは悪いかもしれメンテナンス
Sysui-shared.jarは、後に取られたjarファイルパッケージの上部に元のパッケージを置き換えます
アンドロイドQ sysui-shared.jarダウンロード:https://download.csdn.net/download/zhuxingchong/12060385
2.カタログコード移植クイックステップ
もう一度ランチャーこのプロセスに移植移植クイックステップカタログコードは非常に痛いですが、署名の問題アンドロイドスタジオはAPKをコンパイルすることはできませんので、移行が完了し、コンパイルエラーになった後、後者私は、当然のことながら、我慢するよりよく保護するためには、Androidのスタジオのコンパイルを確保するために、問題を解決することです直接インストールがのみ(進めることができ、既存の署名アンドロイドスタジオを交換する署名ウェイシステム)APKをインストールするには、システムを介してメイクの方法を使用してコンパイルコンパイルすることができます。
ディスカバリーメイクスクリプトアンドロイドPのこの処理の後、バック追加いくつかの違いが検証で見つかったネイティブランチャー通知コントラスト与え$(CLEAR_VARS)が含まれている
= trueに:LOCAL_USE_AAPT2を
LOCAL_AAPT2_ONLY:= trueに
3.ファイル名を指定して実行可能なネイティブ最近タスクバーの機能を確保APK
我々は、問い合わせ機能を排除することは困難で奇妙な問題は、次の手順を確認するために注意を払うする必要の多くにつながることができますので、最近利用されているタスクバーネイティブの確保を前提を持っていない場合ため、この手順は、重要です。
1.最近デスクトップのタスクバーに引き上げ、キルプロセス、およびその他の機能
2.サードパーティのアプリケーションインタフェースは、最近、タスクバーを引っ張っ
3.サードパーティのlaucnherは最近、タスクバーを引っ張っ
4.異なるナビゲーションの間のスイッチは、上記事情を検証します
注;種々の水平および垂直スクリーン、タスク切り替えアニメーション及びコンテンツ表示の他の詳細
4.移植最近タスクバー自身の変化
上記の機能がより痛みを伴うプロセスであり、移植当社独自の機能、後に何の問題が、我々は、このAndroidのp個の移植片機能を比較することはできません移植は、いくつかの例では、除外する一つのバージョンが表示されますためのコードの比較を容易にするための質問を提出した後、それが特定の機能を実行するために最善であることを確認私たちは多くのコードを変更した場合ときのコードが原因を排除することは困難な問題を特定するの下に。
5.make書かれたスクリプトコンパイラ
私は誰もが学ぶようにしても便利な、最近のタスクバーランチャーので、合理化文書を使用してコンパイルする必要があるため、
LOCAL_PATH := $(call my-dir)
#
# Build rule for Launcher3 Go app with quickstep and Go-specific
# version of recents for Android Go devices.
#
include $(CLEAR_VARS)
LOCAL_USE_AAPT2 := true
LOCAL_MODULE_TAGS := optional
#
# Build rule for Quickstep library.
#
include $(CLEAR_VARS)
LOCAL_USE_AAPT2 := true
LOCAL_AAPT2_ONLY := true
LOCAL_MODULE_TAGS := optional
#这里是对一些jar和so等库文件引入
include $(CLEAR_VARS)
LOCAL_MODULE := gson3
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_SRC_FILES := libs/gson-2.8.0.jar
LOCAL_UNINSTALLABLE_MODULE := true
#LOCAL_SDK_VERSION := current
LOCAL_PRIVATE_PLATFORM_APIS:=true
include $(BUILD_PREBUILT)
include $(CLEAR_VARS)
LOCAL_MODULE := libxypatch3
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES_32 := libs/armeabi/libxypatch.so
LOCAL_SRC_FILES_64 := libs/arm64-v8a/libxypatch.so
LOCAL_MULTILIB := both
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_SUFFIX := .so
include $(BUILD_PREBUILT)
#
# Build rule for plugin lib (needed to write a plugin).
#
include $(CLEAR_VARS)
LOCAL_USE_AAPT2 := true
LOCAL_AAPT2_ONLY := true
LOCAL_MODULE_TAGS := optional
ifneq (,$(wildcard frameworks/base))
LOCAL_STATIC_JAVA_LIBRARIES:= PluginCoreLib
else
LOCAL_STATIC_JAVA_LIBRARIES:= libPluginCore
endif
LOCAL_SRC_FILES := \
$(call all-java-files-under, src_plugins)
LOCAL_SDK_VERSION := current
LOCAL_MIN_SDK_VERSION := 28
LOCAL_MODULE := LauncherPluginLib
include $(BUILD_STATIC_JAVA_LIBRARY)
#
# Build rule for Launcher3 dependencies lib.
#
include $(CLEAR_VARS)
LOCAL_USE_AAPT2 := true
LOCAL_AAPT2_ONLY := true
LOCAL_MODULE_TAGS := optional
LOCAL_STATIC_ANDROID_LIBRARIES := \
android-support-compat \
android-support-media-compat \
android-support-core-utils \
android-support-core-ui \
android-support-fragment \
android-support-v7-recyclerview \
android-support-dynamic-animation \
android-support-design \
#iconloader_base
LOCAL_STATIC_JAVA_LIBRARIES := LauncherPluginLib
LOCAL_SRC_FILES := \
$(call all-proto-files-under, protos) \
$(call all-proto-files-under, proto_overrides) \
$(call all-java-files-under, src_build_config) \
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_PROGUARD_ENABLED := disabled
LOCAL_PROTOC_OPTIMIZE_TYPE := nano
LOCAL_PROTOC_FLAGS := --proto_path=$(LOCAL_PATH)/protos/ --proto_path=$(LOCAL_PATH)/proto_overrides/
LOCAL_PROTO_JAVA_OUTPUT_PARAMS := enum_style=java
LOCAL_SDK_VERSION := current
LOCAL_MIN_SDK_VERSION := 21
LOCAL_MODULE := Launcher3CommonDepsLib
LOCAL_PRIVILEGED_MODULE := true
LOCAL_MANIFEST_FILE := AndroidManifest-common.xml
include $(BUILD_STATIC_JAVA_LIBRARY)
#
# Build rule for Quickstep library.
#
include $(CLEAR_VARS)
LOCAL_USE_AAPT2 := true
LOCAL_AAPT2_ONLY := true
LOCAL_MODULE_TAGS := optional
#最近任务栏sysui_shared相关代码引用
ifneq (,$(wildcard frameworks/base))
LOCAL_STATIC_JAVA_LIBRARIES := SystemUISharedLib launcherprotosnano
LOCAL_PRIVATE_PLATFORM_APIS := true
else
LOCAL_STATIC_JAVA_LIBRARIES := libSharedSystemUI libLauncherProtos
LOCAL_SDK_VERSION := system_current
LOCAL_MIN_SDK_VERSION := 26
endif
#静态库引入有些重复地方省略
LOCAL_STATIC_JAVA_LIBRARIES += mplus ... objenesis2.13 gson3
LOCAL_JNI_SHARED_LIBRARIES += libxypatch3
#模块名
LOCAL_MODULE := Launcher3QuickStepLib
LOCAL_PRIVILEGED_MODULE := true
LOCAL_STATIC_ANDROID_LIBRARIES := \
Launcher3CommonDepsLib
#编译代码路径
LOCAL_SRC_FILES := \
$(call all-java-files-under, src) \
$(call all-java-files-under, quickstep/src) \
$(call all-java-files-under, quickstep/recents_ui_overrides/src) \
$(call all-java-files-under, iconloaderlib/src) \
$(call all-java-files-under, iconloaderlib/src_full_lib) \
$(call all-java-files-under, src_flags) \
$(call all-java-files-under, src_ui_overrides)
#编译资源路径
LOCAL_RESOURCE_DIR := \
$(LOCAL_PATH)/quickstep/res \
$(LOCAL_PATH)/iconloaderlib/res \
$(LOCAL_PATH)/quickstep/recents_ui_overrides/res
LOCAL_PROGUARD_ENABLED := disabled
#编译AndroidManifest.xml路径
LOCAL_MANIFEST_FILE := quickstep/AndroidManifest.xml
include $(BUILD_STATIC_JAVA_LIBRARY)
#
# Build rule for Quickstep app.
#
include $(CLEAR_VARS)
LOCAL_USE_AAPT2 := true
LOCAL_MODULE_TAGS := optional
LOCAL_STATIC_ANDROID_LIBRARIES := Launcher3QuickStepLib
LOCAL_PROGUARD_ENABLED := disabled
ifneq (,$(wildcard frameworks/base))
LOCAL_PRIVATE_PLATFORM_APIS := true
else
LOCAL_SDK_VERSION := system_current
LOCAL_MIN_SDK_VERSION := 26
endif
#最终Launcher编译名
LOCAL_PACKAGE_NAME := Launcher3QuickStep
LOCAL_PRIVILEGED_MODULE := true
LOCAL_PRODUCT_MODULE := true
LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3
LOCAL_REQUIRED_MODULES := privapp_whitelist_com.android.launcher3
#签名方式
LOCAL_CERTIFICATE := platform
LOCAL_RESOURCE_DIR := \
$(LOCAL_PATH)/quickstep/res \
$(LOCAL_PATH)/quickstep/recents_ui_overrides/res
LOCAL_FULL_LIBS_MANIFEST_FILES := \
$(LOCAL_PATH)/AndroidManifest.xml \
$(LOCAL_PATH)/AndroidManifest-common.xml
LOCAL_MANIFEST_FILE := quickstep/AndroidManifest.xml
LOCAL_JACK_COVERAGE_INCLUDE_FILTER := com.android.launcher3.*
include $(BUILD_PACKAGE)
include $(CLEAR_VARS)
LOCAL_USE_AAPT2 := true
# ==================================================
include $(call all-makefiles-under,$(LOCAL_PATH))
6.Androidスタジオスクリプトコンパイラbuild.gradle
いくつかの新しいディレクトリを導入するには、この基本的に変更なし、主に移植最近タスクバーの必要性
要約:
アンドロイドのp androd Qランチャー移植者には、問題に対処を含め、約10営業日の合計を過ごしたし、元の関数の移植を見つけます。すべての移植は、プロジェクトのより深い理解に私たちを助けることができる全体的な構造の一種です。方法及び方法のステップに注意を払うにプロセス全体のニーズ手立て東1西が存在しない場合は、失う忍耐に人々の原因の問題を間違えることは非常に簡単である上にまとめたが、他の人が時間を節約、手掛かりを持ってどのように多く見ることができるようにします。