Android Nougatの公式Xposedフレームワークはこちら-お気に入りのモジュールを今すぐダウンロード!

Androidエコシステムが長年にわたって成熟するにつれて、デバイスをルート化する理由を見つけるユーザーが少なくなっています。 ユーザーが満足のいくエクスペリエンスを見つけるか、GoogleのSafetyNet APIで猫とマウスのゲームをプレイしたくないため、ストックファームウェアを使用することを選択する傾向が高まっています。 しかし、2016年前半にユーザーに電話をルート化した理由を尋ねた場合、おそらく、最大の理由は、Xposed Frameworkをインストールできるようになったことでしょう。 Android 7.0 Nougatが最初にリリースされてから1年以上が経過しましたが、ついに長い待ち時間が終わりました。AndroidNougatの公式Xposed Frameworkがついに利用可能になりました。

過去1年間、Xposed Frameworkの主任開発者であるシニア認定開発者rovo89は、Android Nougat向けXposed Frameworkの進捗状況に関するいくつかの更新を提供してきました。 一部の人にとって、Xposed FrameworkがAndroid Marshmallowで提供している追加機能の数が非常に多いため、ほとんどの場合、待機は耐えられました。 しかし、他の多くの人は、Xposedをデバイスに搭載せずに生活を始めました。

開発者abforceがAOSP 7.1.2のARTサブモジュールをリリースしたとき、プロジェクトの興奮が一瞬見えましたが、私たち自身のGermainZが指摘するように、abforceの実装にはフレームワークが必要であるため、公式のXposed Frameworkのリリースを待つ方が良いカスタムROMに統合されています。 さらに、この非公式の実装は不完全であり、特定のXposedモジュールで一貫性のない、またはバグのある動作を引き起こしていました。

abforceは非公式のXposedをAndroid 7.1 Nougatで機能させるのに素晴らしい仕事をしましたが、彼の実装はXposedに対するrovo89のビジョンに反しました。 これが意味するのは、ユーザーにとってモジュールが問題なく機能するだけでなく、モジュールのセットアップ方法がユーザー間で一貫している必要があるため、開発者はXposedモジュールがアプリのクラッシュの原因であるかどうかを知る必要があるということです。

現在、rovo89(Recognized Developer wanamの支援の後)がXposed Frameworkとインストーラーの公式アップデートをリリースする準備ができており、Android 7.0 / 7.1 Nougatとの互換性をもたらすなどの問題を心配する必要はありません。 つまり、カスタムROMをインストールしたり、不安定なバージョンを点滅させてXposedを楽しんだりする必要はありません。携帯電話をルート化して、最新のXposedインストーラーアプリケーション(下記リンク)をインストールするだけで、XposedインストーラーはXposedをインストールする魔法を実行しますあなたのために

モジュールリポジトリを参照するXposedインストーラー

特に、このリリースはAndroid 8.0 Oreoがリリースされてから1か月以上が経過しているため、これは少し気に入らないように思えるかもしれません。 今後数か月間、Android Oreoの安定版にアクセスできるデバイスはごくわずかです。 Googleの最新の統計によると、Android OreoはすべてのAndroidデバイスの0.2% (Nougatで〜18%)しか使用していませんが、ユーザーの多くはカスタムROMをインストールして最新の状態を維持するのが好きな人です。

2017年10月現在のAndroidバージョンの配布。出典:Google

フォーラムの無数のデバイスで利用できるAndroid 8.0の非公式ポートをインストールしても、これらのポートの多くは毎日のドライバーステータスではありません。 したがって、新しいGoogle Pixel 2/2 XL、Sony Xperia XZ1 / XZ1 Compact、またはHuawei Mate 10などの今後のデバイスのために何百ドルも払うつもりがない限り、おそらく絞ることができるでしょう。 Android NougatでXposed Frameworkを数か月使用しました。

それがあなたのように思える場合は、Xposed Installerとフレームワークzipの公式フォーラムスレッドに進んで、Android Nougatデバイスで実行してください。

Xposed Installer v3.1.2(添付ファイル)のダウンロード

Xposed Installer for Nougat 7.0(SDK24)ダウンロード

Nougat 7.1(SDK25)ダウンロード用のXposedインストーラー

Xposed Frameworkの使用目的や動作方法に精通していない多くの新しいユーザーのために、Xposed Frameworkについて簡単に説明します。 。


Xposed Frameworkをインストールする理由

カスタムROMをフラッシュせずにカスタムROM機能を取得したいですか? GravityBoxとして知られる、ROMを調整するためのすべてのXposedモジュールの母があなたをカバーしました。 アプリごとに表示設定をカスタマイズしたいですか? アプリの設定をお試しください。 ハングアウトのような特定のアプリケーションをカスタマイズするのはどうですか? または、Instagramを変更して、好きな投稿をダウンロードできるようにしますか?

GravityBox通知コントロール

アプリの設定

Xposedを使用すると 、開発者はほとんど何でも変更できます。ほとんどの場合、個々のアプリケーションを対象としていますが、システム全体の機能も変更できます。 リストした例は、氷山の一角にすぎません。 追加できる追加機能や変更できるアプリの数は驚くほど多く、公式のXposed Moduleリポジトリを検索して自分で確認してください。 一部のモジュールは、この新しいリリースとNougatのサポートのために更新する必要がある場合があるため、Nougat ROMにインストールする前に必ず確認してください。

Xposedモジュールはどのように機能しますか?

その要点は、Xposed Frameworkにより、ユーザーがインストールしたものであれシステムアプリケーションであれ、モジュールをアプリケーションのJavaメソッド「フック」できることです。 Xposedを使用すると、モジュールはターゲットアプリケーションの元のメソッドの前、最中、または代わりに独自のメソッドを実行できます。

たとえば、Gmailアプリケーションで新しいメールの通知を送信する方法を想像してください。 デフォルトでは、このメソッドは、メールをアーカイブ/削除または返信するためのボタンを備えた新しい通知を作成します。 このメソッドにフックして、「既読にする」などの新しいボタンを追加するようにXposedモジュールを作成できます(はい、そのためのモジュールは既にあります)。

上記は、Xposed Frameworkがそのモジュールにできることの最終結果を過度に単純化したものです。 フレームワーク自体は非常に複雑であり、カスタムROMを必要とせずに、ルート化されたデバイス上でほぼ普遍的に動作するようになっているため、Xposed for Android Nougatの完了に時間がかかっています。

Xposed開発にそれほど時間がかかるのはなぜですか?

Xposedの背後にある魔法-モジュールが他のアプリのメソッドにフックできるようにする-には、ZygoteとAndroidランタイム(ART)がどのように機能するかについての深い知識が必要です。 これらの要件により、多数の人々がプロジェクトに貢献することは既に禁止されていますが、この問題は、 rovo89が過去5年間Xposedの主要な貢献者であったという事実により悪化しています。

Xposedの最後のパブリックリリースが拒否されて以来、Xposedに加えられた変更をオープンソース化することを求める理由です。 それは彼の発案によるものであり、彼はそれを理解し修正するのが得意です。そのため、このような後期段階でプロジェクトに人材を追加すると、プロジェクトがさらに遅れる可能性があります。

さらに、rovo89がソースを継続的に更新すると、誰かが未完成のコードを使用して、それに付随するユニバーサルXposedインストーラーなしで半機能Xposedフレームワークを構築することを心配しました。 (この正確なことはabforceの実装でとにかく起こり、さまざまなインストール方法の混乱がrovo89の 'を正当化した。)

したがって、rovo89に彼のペットプロジェクトに取り組む時間を与えることが、私たちにできる最善のことでした。 Xposedは彼の仕事ではありません。 それは単に趣味であり、彼がコミュニティのために5年間行ってきたものです。 Xposedと同じくらい複雑なプロジェクトでは、作業してからテストする時間が必要です。つまり、彼が他の義務のために持っていなかった時間です。 昨年、rovo89がこの問題に関するいくつかの公開アップデートで文書化したように、Xposed Framework自体とXposed Installerの両方のリリース準備が整うまで、進展が見られました。

XvoposedをNougatで動作させるためにrovo89は何をしましたか?

Androidの新しいリリースでは、ARTの動作に変更が加えられる場合があり、Xposedの一部の修正が必要になる場合があります。 Android 7.0 Nougatは、たとえば、アプリケーションの実行時パフォーマンスの改善に役立つART用のJust-in-Timeコンパイラーを導入しました。 しかし、abforceによる非公式のXposedフレームワークは、多くのART最適化を無効にしているため、メソッドフックは正しく機能します。

Android NougatのART最適化。 出典:Google

対照的に、rovo89の実装は、 JITを使用してメソッドの呼び出し元を再コンパイルし、メソッドフックを適切に保持することにより、Android NougatですべてのART最適化を維持します 。 つまり、ART最適化を強制的に無効にすることにより、パフォーマンスを犠牲にすることなくXposedモジュールの利点を享受できます。

Xposed for Android Nougatで信頼できるフック方法を最終的に達成するためにrovo89が行ったことの詳細については、彼が提供した以下のステートメントを読むことをお勧めします。

rovo89からの完全な声明

Xposedの中核は明らかにJavaメソッドをフックする能力です。つまり、これらのメソッドの前、後、または代わりにモジュールにコードを実行させます。 他のほとんどすべての機能はこれに基づいているため、常に期待どおりに機能することが重要です。 5年前にXposedを発明して以来、一般的な概念は同じでした。メソッドのエントリポイントを変更する必要があります。 実行中にエントリポイントがチェックされない場合、これは失敗し始めます。これは、実際にはARTの最適化の一部に当てはまります。

1つの例は、コンパイル時にエントリポイントがすでにわかっている場合、呼び出し元は検索せずにこのアドレスに直接ジャンプできます。 別の例はインライン化です。 この例を考えてみましょう:

ARTは、twice()メソッドが非常にシンプルであり、したがって、次のようにdoSomething()メソッドにロジックを埋め込むことに気付くほど賢いです。

twice()メソッドをフックすることはできますが、実行時にdoSomething()から呼び出されることはないため、コールバックは行われません。 ARTはさらに賢いものです。魔法は常に42であり、したがって条件が満たされることは決してないことを認識しています。 したがって、doSomething()メソッド全体は実際には何もしません:

以前のバージョンでは、Xposedはこれらの最適化を完全に無効にし、すべてを強制的に再コンパイルしていました。 それにはいくつかの欠点がありました。 まず、ART開発者は最適化によってパフォーマンスを最大化するという素晴らしい仕事をしており、それらを無効にすることでパフォーマンスが低下することもあります(ただし、その程度は測定しませんでした)。 それから、再コンパイル自体は必ずしも簡単ではないので、特に最初は多くの頭痛の種になりました。 最後に、/ system上のプリコンパイル済みファイルに加えて、再コンパイル済みファイルがスペースを占有します。

Nougatの非公式バージョンもこれらの最適化を無効にしますが、それらは再コンパイルを強制しません(元々はポートがROMに統合されるように作られていたため)。 そのため、フックが実行されない場合があります。

公式バージョンでは、最適化されたコードを保持しながら、信頼できるフックを使用できます。 それはどのように機能しますか? さて、Xposedは行われたすべての呼び出しを記録します。 これは、APKのコンパイル中、または事前に最適化されたコードの別のパスで発生します。 この追加データは多くのスペースを占有しませんが、Xposedは特定のメソッドがインライン化された可能性がある場所を見つけることができます。 そのため、メソッドがフックされると、その呼び出し元はすべて最適化解除されます。つまり、コードは使用されなくなります。 これにより、フックコールバックが確実に呼び出されます。 そして、呼び出し元が頻繁に使用される場合、JITで再コンパイルされます。今回はメソッドがフックされているため、最適化の一部が適用されないという知識があります。 これは、フック方法の影響が最小限に抑えられることを意味します。 わーい!

さあ、試してみてください。 ファイルベースの暗号化をサポートするために設定パスを変更する必要があったため、必ずXposed Installer 3.1.2を使用してください。

結論

Xposed for Android 7.X Nougatのリリースと同じように、皆さんが宣伝されていることを願っています。 長い間待ちましたが、Xposedの複雑さを考えると避けられません。 Xposedが何であるか、またはどのように機能するかについてまだ混乱している場合は、心配しないでください。 実際にそれがどのように機能するかを理解している人は非常に少数です(私たちも含まれています)。 rovo89のような開発者は、作業のパッケージ化に最善を尽くしています。そのため、実際に何が起こっているのかを理解する必要はありません。

Xposed Frameworkが好きですか? 彼の素晴らしい仕事にrovo89に寄付することを検討してください。 プロジェクトに貢献するために必要なものがあると思う場合は、以下のrovo89のGitHubページをご覧ください。

rovo89に寄付する

Xposedに貢献する

Xposedモジュールをお探しですか? Xposed Framework Moduleサブフォーラムを確認するか、Labsアプリケーションをダウンロードして、Xposed Modulesのコレクションを参照してください。

Xposed Modulesフォーラム

ラボをダウンロード

Android Oreo Progress

ご参考までに、Android Oreo向けのXposedの入手方法は次のとおりです。

私はすでにAndroid 8.0で作業を開始しています。 私が調べなければならないいくつかの新しい言語機能がありますが、一般的な概念はまだ機能するはずです。 これには、メソッドがフックされたときに呼び出し元のコンパイルされたコードを無効にするためのすべての作業が含まれます。これは、Nougatで作業したときに最も時間がかかりました。 ですから、今回はもっと速くなると確信しています。 Android 8.1はそれほど大きな違いはないので、追加の作業はあまりないと思います。