これ以上面倒なことはせずに、始めましょう。..!
ステップ— 1:AndroidStudioを開きます
Ifお持ちでない場合は、こちらからダウンロードできます:リンク。
ステップ— 2:アクティビティの選択
新しいAndroidStudioプロジェクトを作成します。 (下の画像を参照)
このチュートリアルはシンプルにしています。ステータスバーの時計の色を変更するだけなので、アクティビティを作成する必要はありません。
[アクティビティなし]を選択して、[次へ]に進みます。
ステップ— 3:プロジェクト構成
アプリケーションの名前とパッケージ名を指定します。言語をJavaのままにします。Kotlinに精通している場合は、それを使用します。これは一種の「hello-world」アプリ/モジュール開発であるため、ハードコーディングはそれほど多くありません。
最小限のAPIを維持していますレベルを15にします。
次に[完了]ボタンを押します。
ステップ— 4:build.gradle(アプリ)を変更します&以下の依存関係を追加します。
次に、プロジェクトを同期します。
ステップ— 5:manifest.xmlファイルを変更します。
アプリケーションタグ内に以下のメタデータタグを追加します:
名前はxposedmodule
で、値はtrue
である必要があります。リソースは空のままにします。次に、xposedminversion
(前の手順のAPIバージョン)とxposeddescription
(モジュールの非常に短い説明)について同じことを繰り返します。
ステップ— 6:クラスを作成します:
package com.myfirstxposedmodule;
public class MyModule {
}
これは、将来変更するクラスです。
ステップ— 7:xposed_initファイルを作成および変更します:
ディレクトリビューをプロジェクトビューに変更します。アプリ> src > mainに移動します。メインを右クリックして、新しい>ディレクトリを選択します。
名前を付けます:assets
右クリック最近作成したassets
ディレクトリで、新しい>ファイルを選択します。
名前を付けます:xposed_init
(ファイルタイプを要求された場合はtext
を選択します。)
xposed_init
ファイル内に、フルネームを追加します私たちのjavaクラスの。つまり、この場合、次のようになります。
com.myfirstxposedmodule.MyModule
これは、Xposedフレームワークがモジュールを識別し、ブート時にロードする方法です。このファイルは、ロードするクラスをフレームワークに通知します。これはログにも表示されます。
ステップ— 8:MyModuleクラスを変更します:
package com.myfirstxposedmodule;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
import de.robv.android.xposed.XposedBridge;
public class MyModule implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
}
}
IXposedHookLoadPackage
を実装し、上記のようにメソッドhandleLoadPackage
を実装します。
それでは、試してみましょう。そのhandleLoadPackage
メソッド内にログ関数を配置することにより:
XposedBridge.log("Loaded app: " + lpparam.packageName);
これにより、ロードされたモジュールが出力されます。通常、これらのログは次のファイルに記録されます:/data/data/de.robv.android.exposed.installer/log/debug.log
(Xposedインストーラーから簡単にアクセスできます)。
ステップ— 9:コードを実行します:
直接実行しようとした場合これをAndroidStudioから実行すると、このエラーが発生します。現在、アクティビティがないため、問題ありません。
とにかく、心配しないでください。解決策があります。実行構成を編集し、起動オプションをデフォルトのアクティビティからなしに変更して、[OK]を選択するだけです。
ここで、もう一度実行してみます(Windows:Shift + F10)。
デバイスで正常に実行されると、次のようになります。 XposedInstallerアプリのモジュールのリストでこのモジュールを見ることができます。下の画像に示すように、マニフェストファイルに入力した説明テキストも表示されます。
チェックボックスをオンにしてそのモジュールをアクティブにし、デバイスを再起動します。再起動後、Xposed Installerアプリケーションを開き、ログを開きます(パスの上で説明したログファイルを開くこともできます)。次のような行が表示されます。
Xposedモジュールを作成して実行する方法がわかったので、さらに深く掘り下げてステータスバーのコードを確認し、独自の実装をいくつか適用します。
ステップ— 10:ステータスバーのコードを掘り下げる:
ここで、ステータスバー(パッケージ)。ご存知のように、Androidはオープンソースのオペレーティングソースであるため、コードの内部を確認できます。このリンクからAndroidのソースコードをダウンロードできます。 AndroidのバージョンとROMによっては、いくつかの変更がある場合があります。今のところ、私たちは時計のコードを見つけることだけに興味があります。 com.android.systemui
パッケージのどこかにClock.java
クラスがあり、このクラスはTextView
を拡張します。これをTextViewのように扱うことができます。これはそのクラスへのリンクです。 updateClock()
という名前のステータスバーの時刻を更新する方法が1つあります。以下のスニペットをご覧ください:
では、何が必要ですか?このメソッドが実行されるたびにコードを実行したいと思います。これは次のステップで行います。これはメソッドのフックとも呼ばれます。
ステップ— 11:メソッドのフック:
XposedHelper
は、いくつかのヘルパーメソッドを提供するクラスです。必要なヘルパーメソッドの1つは、クラスローダーであるString
の完全なクラス名を取得するfindAndHookMethod
です(
from handleLoadPackage
)、追跡するメソッド名(この場合はupdateClock
) String
およびXC_MethodHook
のコールバック(単なるコールバック)。以下にコードを示します
上記のコードでは、匿名クラスXC_MethodHook
に実装した
およびafterHookedMethod
。名前が示すように、最初のものはフックされたメソッドの前に実行され、後者はフックされたメソッドの後に実行されます(この場合はupdateClock
)。引数と戻り値の型のパラメーターは、MethodHookParam
引数によって処理されます。ただし、現時点では、ステータスバーの時計の色を変更するだけで、afterHookedMethod
が必要になります。
そのTextView
オブジェクト。param.thisObject
から取得できます—これはthis
キーワードと同じになりますClock.java
クラス。次に、それをTextView
にキャストし、そのTextView
オブジェクトの色を変更するだけで、テキストを変更することもできます。 :
ステップ— 12:モジュールを実行します:
コードを実行して、デバイスを再起動します。時計が赤で表示され、追加した絵文字テキストが表示されます。
以上です!!再起動するのは大変だと思います。でもねえ、あなたはあなた自身のXposedモジュールを作成しました、それは素晴らしいことではありませんか?? !!