はじめに
2020年11月2日以降、 AndroidアプリのアップデートはAndroid10(APIレベル29)以上を対象にしなければなりません。
Android10にはアプリに影響を与える可能性のある動作変更点あると公式ドキュメントに書かれています。
その動作変更点のひとつに、非SDKインターフェースに対する制限の更新があります。
開発しているアプリが、制限されている非SDKインターフェースを使用していないか調査する必要があります。
そこで、この記事では制限対象の非SDKインターフェースの使用をLogcatで調査する方法について紹介します。
前提
開発環境
- Language:React Native
- PC OS:Mac OS Catarina 10.15.7
- Android OS:9, 10
- Java:Oracle Java 12
非SDKインターフェースのテスト方法は複数ある
- 非SDKインターフェースの使用を調べる方法は、公式ドキュメントで複数紹介されています。
- デバッグ可能なアプリを使用したテスト
- StrictMode APIを使用したテスト
- veridexツールを使用したテスト
- Android Studioのlintツールを使用したテスト
- Play Consoleを使用したテスト
- この記事ではデバッグ可能なアプリを使用したテストについて補足しながら紹介します。
調査方法
-
- アプリをデバッグビルドする
-
- 調査したいアプリのPIDを特定する
adb shell ps | grep <app name>
-
- 特定したPIDでフィルターをかけてログ出力する
adb logcat --pid=<pid> | grep "Accessing hidden field"
-
- アプリを操作し、以下のようなログが表示されなければ、制限対象の非SDKインターフェースは使用していないとのこと
Accessing hidden field Landroid/os/Message;->flags:I (light greylist, JNI)Accessing hidden field Landroid/os/Message;->flags:I (light greylist, JNI)
補足情報
adbとは
adbとはAndroid Debug Bridgeの略で、Androidデバイスを通信するための多用途コマンドラインツールです。
adbコマンドを使用することで、さまざまなデバイス操作をコマンドラインから実行できます。
この記事では非SDKインターフェースの使用を調べるためにadbコマンドを使用します。
参考:https://developer.android.com/studio/command-line/adb?hl=ja
shellコマンドとは
shellコマンドは、adbを介してデバイスコマンドを発行したり、対話型シェルを起動できます。
adb shell ps
を使用すると、デバイスで実行中のプロセスを一覧で表示することができます。
今回は調査したいアプリのPID(プロセスID)を特定するために、アプリ名でgrepします。
参考:https://developer.android.com/studio/command-line/adb?hl=ja#shellcommands
logcatコマンドとは
logcatコマンドは、デバイスが出力したシステムメッセージのログをダンプするコマンドラインツールです。
adb logcat
で実行することができます。
logcatコマンドにはオプションが用意されていて、今回は特定のPIDでフィルターをかけるオプションを使用します。
参考:https://developer.android.com/studio/command-line/logcat?hl=ja