Android P バージョンの非 SDK インターフェイスの管理および制御機能については、Huawei を参照してください。

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 の場合は警告し、
>=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 バージョンでは、アクティビティの開始時にトースト警告が表示されます。

a2.png

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インターフェース一覧の出力

スクリーンショット.PNG

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. スキャン結果を出力します。

a5.png

注: 強化されたアプリは、強化する前に 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

質問フィードバックメールのテンプレート:

a6.png

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

 a8.png

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. アカウントにログインし、リモート デバッグ用の実デバイスを選択します。

a9.png

5. 電話を選択します: Pixel

a10.png

6. [今すぐ試す] をクリックして、デバッグ用の APK をアップロードします。

a11.png

4.3 Googleシミュレータで検証する

Android P SDK とエミュレータをインストールして構成します。https: //developer.android.google.cn/preview/setup-sdkを参照してください。

Android P バージョンのさらにエキサイティングなコンテンツについては、Android Green Alliance にご注目ください。

おすすめ

転載: blog.csdn.net/qq_19822039/article/details/83537713