DroidShoter-1台のデバイスとAdbを使用した異なる画面解像度でのアプリケーションスクリーンショット

ご存知のように、多くのAndroidデバイスがあります...非常に多くです。 これにより、解像度とピクセル密度の組み合わせが異なる膨大な数の画面が表示され、アプリケーションの開発が非常に複雑になります。 ある時点で、さまざまな画面でのアプリケーションの検証を簡素化し、多くのデバイスやエミュレーターでの起動を避けたいと思いました。 問題の分析により、問題を解決するために必要なものはすべてあり、Adbを使用すると、1つの接続されたデバイスでできることが示されました。 その結果、 クロスプラットフォームユーティリティが開発され、1つのデバイスのさまざまな画面パラメーターにアプリケーションのスクリーンショットが自動的に保存されます。アプリケーションのソースコードを使用した追加操作は不要です(すべてエミュレーターでも機能します)。 ユーティリティが動作した後、アプリケーションのスクリーンショットがさまざまなデバイスで表示される形式で取得されます。 将来、取得したスクリーンショットを使用して、アプリケーション表示のアーティファクトを識別し、レイアウトの最適性を分析できます。



DroidShoterメイン








クイックスタート



アプリケーション開発の詳細に興味のない人を読むことに負担をかけないために、私はすぐにプログラムでの作業に関する簡単な情報を提供します。



JavaとAdbへのリンクを含む詳細な手順はGitHubにあります

DroidShoterの使用自体は非常に簡単です。ユーティリティを起動し、デバイスを選択し、パラメーターを設定して、 「開始」をクリックします。



記事の最後にあるネタバレの下にあるプログラムの結果の例。



注意! 公式ファームウェアAndroid 5.0.2を使用したSamsung Tab S(SM-T700)の問題に関するメッセージがありました。 このデバイスでユーティリティを使用する場合は、設定のリセットが必要になる可能性があることに注意してください。 他のSamsungデバイスでは問題はありませんでした。



いくつかの詳細



Googleの公式ドキュメントによると、画面はサイズで分割されます:small、normal、large、xlarge。 ピクセル密度:ldpi、mdpi、hdpi、xhdpi:

画面サイズ








さまざまな画面の組み合わせは、可能なサイズとピクセル密度の交差から生じることがわかります。 画面サイズとピクセル密度の組み合わせにより、解像度が決まります。 したがって、画面を十分に特徴付ける2つの基本的な特性、 解像度ピクセル密度を区別できます。 Adbを使用して変更できるのはこれらの特性です。 また、 Adbを使用してスクリーンショットを撮ることもできます。 つまり 、スクリーンパラメーターのさまざまな組み合わせを通過し、それぞれのスクリーンショットを撮ることを妨げるものは何もありません。 自動化したかったのはこのプロセスでした。



最初に、画面設定を取得する方法を学ぶ必要がありました。 Android 4.3以降のデバイスで問題がなかった場合( 「wmサイズ」および「wm密度」コマンドの出力を解析)、残りの部分では別の方法を見つける必要がありました。 その結果、 「dumpsys window」コマンドを使用して、 「init = 480x800 240dpi」のような結果の出力に行を見つけました。 残念ながら、このアプローチを採用している一部のデバイス(これまでのところ1台のSharp製の電話のみ)では密度が得られず、ユーティリティはサポートされません。



次のAdbシェルコマンドは、表示設定を変更するために使用されます。



残念ながら、画面構成を変更すると、システム要素(ステータスバーなど)が誤ってレンダリングされる場合があります。 この問題はAndroidにあり、解決できませんでした。 ただし、これはアプリケーション自体が正しく表示されるのを妨げません。



一般に、この時点で、作業に必要なものはすべてそこにあり、ユーティリティはそこにあることがすでに明らかでした。 問題は直接的な開発のままでした。 言語としては、現時点で私に最も近いプログラミング言語としてJavaを使用し、UIを操作するためのSwingフレームワークを使用しました。 さらに、 Javaには優れたddmlibライブラリがあり、 Adbを簡単に操作できます。



DroidShoterの現時点での基本的なロジックはかなり単純です。 デバイスを選択すると、画面の物理パラメーターが決定され、それに基づいて後続の作業の表示パラメーターの順序が構築されます。 次に、 「開始」をクリックした後、画面設定を変更してスクリーンショットを撮るプロセスが開始されます。



ディスプレイパラメータキューとして、画面解像度と「ベース」のピクセル密度値のすべての組み合わせが使用されますが、これはデバイスの物理パラメータよりも小さい値です。 つまり 720x1280の物理解像度の画面では、1020x1980の解像度は使用されません。 240の物理密度で320の密度を持つ同じもの。



厳密に言えば、Adbではデバイスの物理的特性を超えるパラメーターを使用できますが、現時点では使用を中止することにしました。 一部のピクセルが失われ、アプリケーションの外観が実際のピクセルと一致しなくなります(たとえば、一般的にリストに要素の区切りが表示される場合があります)。



基本パラメーター:
Dpi 画面解像度-解像度の最大ピクセル密度
XXXHDPI-640

DPI_560-560

XXHDPI-480

DPI_420-420

XHDPI-320

HDPI-240

MDPI-160

2560x1600-XHDPI

2560x1440-DPI_560

1920x1200-DPI_560

1920x1080-DPI_560

1280x768-DPI_420

1280x720-DPI_420

854x480-HDPI

800x480-HDPI

480x320-MDPI

320x240-MDPI







ロジックは、便宜上、追加機能によって構成されています。



一部のアプリケーションでは、画面設定で「クラッシュ」する状況が発生する場合があります。 このような場合、このモードを作業から除外するだけで十分です(ただし、もちろん、「クラッシュ」の原因を考慮する方がよいでしょう-アプリケーションに問題がある可能性があります)。



オペレーティングシステムの観点から見ると、ディスプレイ設定の変更は画面構成の変更であり、現在のアクティビティを再作成する標準プロセスが必要です。 構成の変更はscreenSizeパラメーターに従って行われ、タグでマニフェストに登録することでアクティビティでインターセプトできます
android:configChanges="screenSize"
      
      





これは、DroidShoterの追加のプラスを意味します。構成の変更後のアプリケーションによる状態の復元の正確性がテストされます。



DroidShoterの結果の例:
Nexus 7タブレット(2013)とネイティブアプリケーション「Calculator」を使用しました。 計算機は、画面の解像度が異なると、緑色の背景に追加機能が異なって表示され、レイアウトの変更が明確に示されるという点で興味深いです。

スクリーンショットフォルダーの内容
画像



1200x1920_MDPI
画像



768x1280_XHDPI
画像



480x854_MDPI
画像



320x480_MDPI
画像



仕事のビデオ
ビデオでは、コンテンツのサイズは小さくなりますが、実際にはデバイスの画面はほぼいっぱいです。

解像度は約5秒ごとに変化します。









DroidShoter開発計画、プログラムがコミュニティによって要求されている場合:



あなたのアイデア、問題、提案は、GitHubの問題としてコメントで歓迎されるか、直接送信することができます。



PS操作中に破損したデバイスは1つもありません。

サムスンは再び注目を集めました(IDEAへのIntent Senderプラグインの開発が彼らに腹を立てているため):サムスンタブS(SM-T700)は、いくつかのスクリーンショットの後に再起動し、その後起動しませんでした(ハードリセットを介してのみ)。



All Articles