クイックスタート
アプリケーション開発の詳細に興味のない人を読むことに負担をかけないために、私はすぐにプログラムでの作業に関する簡単な情報を提供します。
- リリースセクションのGitHubでダウンロードできます。 残念ながら、GitHubポリシーのため、* .jarファイルを純粋な形式で添付することはできないため、zipアーカイブにラップする必要がありました。
- 要件: Javaがインストール済み(JREが十分)およびAdb 。
- 起動:ターミナルでDroidShoter.jarファイルまたはjava -jar DroidShoter.jarコマンドをダブルクリックします。
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シェルコマンドは、表示設定を変更するために使用されます。
- wmサイズ[WxH] (Android 4.3以降)およびam display-size [WxH] (4.3まで)-画面解像度の変更
- wm density [value] (Android 4.3以降)およびam display-size [value] (最大4.3。)-ピクセル密度の変更用
- 表示パラメーターをリセットするには、パラメーターの設定の代わりに「リセット」を使用して上記のコマンドを使用します。
残念ながら、画面構成を変更すると、システム要素(ステータスバーなど)が誤ってレンダリングされる場合があります。 この問題は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 |
ロジックは、便宜上、追加機能によって構成されています。
- デバイスの接続/切断を自動的に検出
- スクリーンショット用のフォルダーを指定する機能(相対パスと絶対パスの両方がサポートされています)
- スクリーンショットファイルの名前のプレフィックスを指定します。 名前は次のパターンに従います。 [prefix] [width] x [height] _ [density]
- モードを変更した後、スクリーンショットを撮る前に遅延を設定する機能( アクティビティをサーバーからデータを取得するなどの時間のかかる操作を実行できるようにするために必要)
- 各デバイスのアクティブな動作モードのリストを保存します(DroidShoterを再起動すると、最後に無効化されたモードのチェックボックスが削除されます)
- ANDROID_HOME変数での自動Adb検索。 ユーザーが手動で指定した場合、 Adbへのパスを保存する
- 画面を物理的にリセットするための個別のボタン。 念のためボタンを導入しましたが、実際に使用する必要はありませんでした。
一部のアプリケーションでは、画面設定で「クラッシュ」する状況が発生する場合があります。 このような場合、このモードを作業から除外するだけで十分です(ただし、もちろん、「クラッシュ」の原因を考慮する方がよいでしょう-アプリケーションに問題がある可能性があります)。
オペレーティングシステムの観点から見ると、ディスプレイ設定の変更は画面構成の変更であり、現在のアクティビティを再作成する標準プロセスが必要です。 構成の変更はscreenSizeパラメーターに従って行われ、タグでマニフェストに登録することでアクティビティでインターセプトできます
android:configChanges="screenSize"
これは、DroidShoterの追加のプラスを意味します。構成の変更後のアプリケーションによる状態の復元の正確性がテストされます。
DroidShoterの結果の例:
Nexus 7タブレット(2013)とネイティブアプリケーション「Calculator」を使用しました。 計算機は、画面の解像度が異なると、緑色の背景に追加機能が異なって表示され、レイアウトの変更が明確に示されるという点で興味深いです。
スクリーンショットフォルダーの内容
1200x1920_MDPI
768x1280_XHDPI
480x854_MDPI
320x480_MDPI
仕事のビデオ
ビデオでは、コンテンツのサイズは小さくなりますが、実際にはデバイスの画面はほぼいっぱいです。
解像度は約5秒ごとに変化します。
解像度は約5秒ごとに変化します。
DroidShoter開発計画、プログラムがコミュニティによって要求されている場合:
- オリエンテーションのサポート
- ローカリゼーション変更サポート
- さまざまなアプリケーション画面を自動的に起動します(必要なIntent extraを使用 )
- CIシステムへの統合の確保
あなたのアイデア、問題、提案は、GitHubの問題としてコメントで歓迎されるか、直接送信することができます。
サムスンは再び注目を集めました(IDEAへのIntent Senderプラグインの開発が彼らに腹を立てているため):サムスンタブS(SM-T700)は、いくつかのスクリーンショットの後に再起動し、その後起動しませんでした(ハードリセットを介してのみ)。