Android P バージョンの非 SDK インターフェイス制御機能の解釈と適応ガイダンス
Android P バージョンでは、Google は非 SDK インターフェイスの使用に関する制限を追加しました。呼び出し、リフレクション、または JNI を介しても、開発者は非 SDK インターフェイスにアクセスできません。このインターフェイスの悪用は、深刻なシステム互換性をもたらします。
Google の大きな動きに対応して、開発者はどのようにして迅速に対応し、より便利かつ効率的に P バージョンの適応を実現できるでしょうか? Huawei の専門家が非 SDK 制御機能適応ガイドの詳細な解釈を提供します。見てみましょう。
開発プロセス中に、開発者が非 SDK インターフェイスを呼び出すと、アプリケーションがクラッシュして起動に失敗したり、プロセスの実行中にクラッシュやフラッシュバックが発生したり、アプリケーションの機能が利用できなくなるなど、重大な互換性の問題が発生する可能性があります。その影響力は、このインターフェイスを呼び出すすべてのアプリケーションに影響を与えるため、非 SDK インターフェイス制御は Android の歴史の中で最も厳しい変更機能の 1 つとして知られています。
1. 機能の紹介
1.1 非SDKインターフェースの定義
Google Web サイトでクエリできるインターフェイスはすべて SDK インターフェイスであり、上記の SDK インターフェイスを除き、その他はすべて非 SDK インターフェイスです。
1.2 危険性
非 SDK インターフェイスはバージョン間で変更される可能性があり、非 SDK インターフェイスを悪用するアプリケーションは互換性の問題を引き起こします。
1.3 非SDKインターフェースの制御リスト
1. リストの説明
リストタイプ | 影響 | リストの説明 |
ライトグレーのリスト | targetSDK>=P の場合、警告します。 | 現時点では、非 SDK インターフェイスの代替 SDK インターフェイスがない状況に備えて、Google は一時的にそれをライト グレー リストに載せ、後続のバージョンで代替インターフェイスの追加を検討し、その後インターフェイスをダーク グレー リストに移します。リストはコードのメンテナンスを通じて渡されます。 |
ダークグレーのリスト | targetSDK<P の場合は警告し、 |
現在、Google は、代替 SDK インターフェイスが存在し、開発者がこれらの非 SDK インターフェイスを修正する必要がある場合に備えて、非 SDK インターフェイスをダーク グレー リストに入れています。リストはコードを通じて管理されます。 |
ブラックリスト | すべてのサードパーティ製アプリケーションは呼び出しを許可されていません | グレー リスト (ダーク グレー + ライト グレー) 以外のすべての非 SDK インターフェースはブラックリストに追加されます。アプリケーションがブラックリスト インターフェースを使用している場合は、直ちに修正するか、Google にフィードバックしてグレー リストへの追加を申請する必要があります。 。 |
2. リストビュー: https://android.googlesource.com/platform/frameworks/base/+/master/config/
1.4 非 SDK インターフェイス呼び出しの警告
1. すべてのプライベート API で Logcat に警告が表示されます。
2. DP バージョンでは、アクティビティの開始時にトースト警告が表示されます。
3. デバッグ可能アプリケーションにダイアログ ボックス警告が表示されますが、ポップアップ ボックスの内容はトースト プロンプトの内容と一致します。
4. DP2 からは、StrictMode で新しく追加された detectNonSdkApiUsage() を使用して、不正な呼び出しを検出します。
5. 正式な商用バージョンでは、トーストの警告とダイアログ プロンプトが削除されます。
2. 互換性への影響
2.1 影響範囲
非 SDK (ダーク グレー リスト、ブラックリストを含む) インターフェイスを呼び出すすべてのアプリケーションが影響を受けます。
2.2 具体的な影響
開発者プレビューの後続のバージョンでは、非 SDK インターフェイスにアクセスするさまざまな方法でエラーやその他の望ましくない結果が発生します。
面接方法 | 結果 |
Dalvik 命令参照フィールド | NoSuchFieldError が発生します |
Dalvik 命令参照関数 | NoSuchMethodError が発生します |
Class.getDeclaredField() または Class.getField() によるリフレクション | NoSuchFieldException をスローします |
Class.getDeclaredMethod() または Class.getMethod() によるリフレクション | NoSuchMethodException をスローします |
Class.getDeclaredFields() または Class.getFields() によるリフレクション | 非 SDK メンバーは結果に表示されません |
Class.getDeclaredMethods() または Class.getMethods() によるリフレクション | 非 SDK メンバーは結果に表示されません |
env->GetFieldID() を通じて JNI を呼び出します。 | NULL を返し、NoSuchFieldError を発生させます。 |
env->GetMethodID() を通じて JNI を呼び出します。 | NULL を返し、NoSuchMethodErro を発生させます。 |
3. 互換性適応ガイド
3.1 アプリケーションで使用されるすべての非 SDK インターフェイスのリストを取得する
3.1.1 非SDKインターフェース一覧の出力
3.1.2 非SDKインターフェースのスキャン方法
3.1.2.1 動的操作、スキャンによるログ分析
自動または手動のテストを通じて、アプリケーションのすべてのインターフェイスとすべての機能を横断し、ログ分析によって呼び出されるすべての非 SDK インターフェイスをキャプチャします。
キーログ:
隠しフィールド Landroid/os/Message;->flags:I (ライト グレーリスト、JNI) へのアクセス
隠しメソッドへのアクセス Landroid/app/ActivityThread;->currentActivityThread()Landroid/app/ActivityThread; (ダークグレーリスト、反射)
隠しメソッドへのアクセス Landroid/app/ActivityThread;->currentActivityThread()Landroid/app/ActivityThread; (ブラックリスト、リフレクション)
3.1.2.2 静的スキャン、Google が提供する Veridex スキャン ツールによるスキャン
1. ツールパス: art/tools/veridex/
2. ツールのコンパイル: make appcompat
3. ツールの実行:
./art/tools/veridex/appcompat.sh --dex-file=test.apk
パラメーターを指定して scan コマンドを使用すると、スキャン結果がより包括的になりますが、誤検知が発生する可能性があります。
./art/tools/veridex/appcompat.sh --dex-file=test.apk --imprecise
4. スキャン結果を出力します。
注: 強化されたアプリは、強化する前に APK でスキャンする必要があります。
5. ツールのダウンロード: Google は、DP2 バージョンに対応するコードのダウンロードをオープンしました: https://android.googlesource.com/platform/art/+/android-p-preview-2
6. ソースコードのダウンロードガイド: https://source.android.google.cn/setup/downloading
P バージョンの Android プロジェクト コードをダウンロードした後、プロジェクトの下でスキャン ツールを直接コンパイルして実行し、非 SDK インターフェイスをスキャンできます。
3.2 非 SDK インターフェイスの修正
現在、P バージョンでは、明るい灰色のリストにある非 SDK インターフェイスは、修正されていなければ通常どおり使用できます。開発者は、ダーク グレー リストとブラックリストにある非 SDK インターフェイスに焦点を当て、適応のための代替 SDK インターフェイスを見つける必要があります。
1. 修正できないインターフェース: Google に再評価を申請する
2. 呼び出されたインターフェイスがダーク グレー リストまたはブラックリストに含まれており、代替の SDK インターフェイスが見つからない場合は、このインターフェイスを使用する必要がある詳細な理由を Google に提供し、インターフェイスの再評価を申請できます。リンク: https://issuetracker.google.com/issues/new?component=328403&template=1027267
質問フィードバックメールのテンプレート:
3.3 焦点を当てる
アプリケーション テストの結果、ライト グレー リストに追加する必要がある非 SDK インターフェイスは、できるだけ早く Google に報告する必要があることが判明しました。フィードバックが遅くなるほど、Google による変更が難しくなり、結果として機能がなくなる可能性があります。グレー リストに追加され、アプリケーションの機能に影響を与えます。
Google がリリースした DP2 バージョンがブラックリストに追加されました。開発者は、DP2 バージョンのアプリケーションによって呼び出される非 SDK インターフェイスをテストして検証することをお勧めします。修正できない非 SDK インターフェイスについては、タイムリーに Google にフィードバックしてくださいこのインターフェースを使用する詳細な理由を説明し、インターフェースの再評価を申請してください。
4. Pバージョン互換性テスト検証方法
4.1 ブラシ P バージョン
Google Pixel、Pixel XL、Pixel2、Pixel 2 XL を購入し、テスト用に P バージョンをブラッシングします。
4.1.1バージョンのダウンロード
参考:https://developer.android.google.cn/preview/download
装置 | ダウンロードリンク | SHA-256チェックサム |
ピクセル | バショウカジキ-ppp2.180412.013-factory-18f60ec5.zip | 18f60ec5d77dc44a2c80ca0819fe3ce3aaeba04cd35a58598b8352eb200b010a |
ピクセルXL | マーリン-ppp2.180412.013-factory-cf8ae2b1.zip | cf8ae2b1bfe6b9ba8ada311436c29e1cee731c16f1bf790cc36923faf96ee423 |
ピクセル2 | Walleye-ppp2.180412.013-factory-6406b348.zip | 6406b348c6dc2349b1dcf33e1031043d3d0a2c3a065f64e0385d8ee6dacfbcbf |
ピクセル2XL | タイメン-ppp2.180412.013-factory-546fdc1f.zip | 546fdc1fa56d4d47f1c729688c8087d66d59ce831f01b08e28b67bb0320463cd |
DP2 バージョンでは、Web ページの下部にある表示言語を英語に変更する必要がありますが、中国語表示は DP1 バージョンのままです
4.1.2 点滅
点滅する前に、以前にログインしていた Google アカウントからログアウトする必要があります。
1. 対応するデバイスの圧縮パッケージをダウンロードし、解凍します。
2. 電話機を USB に接続した後、adb reboot bootloader コマンドを実行します。
3. 携帯電話に小さなロボットのパターンが表示され、「ロック解除」という単語が表示されたら、圧縮パッケージ内の Bat スクリプトを実行します。
4. 「ロック」の場合:
(1) 設定 - バージョン番号を 7 回連続してクリックして、開発者向けオプションを開きます; (
2) 開発者向けオプションで OEM ロック解除を開きます;
(3) 携帯電話をコンピュータに接続し、adb を実行しますreboot bootloader 小型ロボット インターフェイスへのコマンド;
(4) fastboot oem ロック解除を実行すると、電話機のロックが解除され、上記の点滅方法を使用します。
4.2 リモート実機デバッグ
新規ユーザーがHuawei Terminal Open Labのクラウドテスト機能に申し込む必要がある場合は、Android Green Allianceに参加し、メンバーになる必要があります。以下の手順で申請してください。
1. DevEco プラットフォームにログインします。
2. 会社のサフィックスが付いた電子メール アドレスを使用してアカウントを登録します。
3. 新しく申請したアカウント番号、会社名、個人名と電話番号、担当アプリケーションの名前を [email protected] に送信して、Android Green Alliance のメンバーになることを申請します。審査に合格すると、それを使用する許可を与えられました。
4. アカウントにログインし、リモート デバッグ用の実デバイスを選択します。
5. 電話を選択します: Pixel
6. [今すぐ試す] をクリックして、デバッグ用の APK をアップロードします。
4.3 Googleシミュレータで検証する
Android P SDK とエミュレータをインストールして構成します。https: //developer.android.google.cn/preview/setup-sdkを参照してください。
Android P バージョンのさらにエキサイティングなコンテンツについては、Android Green Alliance にご注目ください。