am 41a722ab: Merge "Docs: L10N of remaining M-Preview pages (Ja) Bug: 21789313" into mnc-preview-docs

* commit '41a722ab49e8b6dfed1de317e58867afd5bb5077':
  Docs: L10N of remaining M-Preview pages (Ja) Bug: 21789313
This commit is contained in:
David Friedman
2015-07-08 01:00:38 +00:00
committed by Android Git Automerger
10 changed files with 2195 additions and 0 deletions

View File

@@ -0,0 +1,327 @@
page.title=アプリの自動バックアップ
page.tags=バックアップ, previewresources, androidm
page.keywords=バックアップ,自動バックアップ,プレビュー
page.image=images/cards/card-auto-backup_2x.png
@jd:body
<div id="qv-wrapper">
<div id="qv">
<h2>本書の内容</h2>
<ol>
<li><a href="#overview">概要</a></li>
<li><a href="#configuring">データのバックアップを設定する</a></li>
<li><a href="#testing">バックアップ設定をテストする</a></li>
<li><a href="#issues">既知の問題</a></li>
</ol>
</div>
</div>
<p>
アプリ内のデータ作成や環境設定は、多大な労力と時間を必要とする作業です。
端末が破損したり、新しい端末にアップグレードしたりする場合に、そのデータを保持することが、快適な操作性を提供する上で非常に重要です。
Android M Preview を実行する端末では、アプリデータを Google ドライブに自動的にバックアップすることで、前述のような状況でも快適な操作性を実現できます。
アプリデータは、ユーザーが端末を変更したりアップグレードしたりした場合に自動的に復元されます。
</p>
<p>
自動バックアップは、Android M Preview を実行する端末にインストールされているすべてのアプリで有効になっています。追加のアプリコードは必要ありません。
ユーザーは、自動データ バックアップを使用しないよう選択することもできます。
また、バックアップするアプリのデータを制限することもできます。
</p>
<p>
このドキュメントでは、新しいシステムの動作と、バックアップするアプリデータを指定する方法について説明します。
</p>
<h2 id="overview">概要</h2>
<p>
自動バックアップ機能では、アプリがユーザーの端末上に作成するデータを、ユーザーの Google ドライブ アカウントにアップロードして暗号化することで、そのデータを保持します。
開発者やユーザーにデータ ストレージの費用が発生することはなく、保存されたデータはユーザー個人のドライブ容量にはカウントされません。
M Preview の期間中、ユーザーは 1 つの Android アプリにつき最大 25 MB までのデータを保存できます。
</p>
<p>
自動バックアップは、端末がアイドル中で、電源に接続されていて、Wi-Fi に接続されている場合に、24 時間ごとに実行されます。
これらの条件を満たしたとき、バックアップ マネージャー サービスが利用可能なすべてのバックアップ データをクラウドにアップロードします。
ユーザーが新しい端末に切り替えたり、バックアップされたアプリをアンインストールしたり再インストールしたりした場合、復元操作によりバックアップされたデータが新しくインストールされたアプリのデータ ディレクトリにコピーされます。
</p>
<p class="note">
<strong>注:</strong> アプリが以前の <a href="{@docRoot}google/backup/index.html">Android バックアップ サービス</a>を利用している場合、この新しい動作は適用されず、既存のバックアップ動作が引き続き適用されます。
</p>
<h3 id="auto-exclude">自動的に除外されたデータファイル</h3>
<p>
一時ファイルやキャッシュなど、バックアップする必要のないアプリデータもあるため、自動バックアップ サービスではデフォルトで一部のデータ ファイルを除外します。
</p>
<ul>
<li>{@link android.content.Context#getCacheDir
getCacheDir()} メソッドと {@link android.content.ContextWrapper#getCodeCacheDir getCodeCacheDir()}
メソッドに参照されるディレクトリ内のファイル。
</li>
<li>
{@link android.content.Context#getExternalFilesDir getExternalFilesDir()}
メソッドに参照されるディレクトリ内のものを除く、外部ストレージ内のファイル。
</li>
<li>
{@link android.content.Context#getNoBackupFilesDir getNoBackupFilesDir()} メソッドに参照されるディレクトリ内のファイル。
</li>
</ul>
<h2 id="configuring">データのバックアップを設定する</h2>
<p>
前のセクションの自動除外ファイル一覧にあるものを除いて、M Preview 端末にインストールされたすべてのアプリで作成されるデータがバックアップ対象です。
そこからさらに、アプリ マニフェストの設定を使用して、アプリからバックアップするデータを制限したり設定したりできます。
</p>
<h3 id="include-exclude">対象データと除外データ</h3>
<p>
アプリに必要なデータとその保存方法によって、特定のファイルやディレクトリを対象とするか、除外するかの明確なルールが必要になる場合があります。
自動バックアップ サービスでは、XML 構成ファイルとアプリ マニフェストを使ってそのようなバックアップ ツールを設定できます。
アプリ マニフェストでは、次の例のように、バックアップ スキームの構成ファイルを指定できます。
</p>
<pre>
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.my.appexample"&gt;
&lt;uses-sdk android:minSdkVersion="MNC"/&gt;
&lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
&lt;app ...
<strong> android:fullBackupContent="&#64;xml/mybackupscheme"&gt;</strong>
&lt;/app&gt;
...
&lt;/manifest&gt;
</pre>
<p>
このサンプル コードでは、<code>android:fullBackupContent</code> 属性がアプリの開発プロジェクトの <code>res/xml/</code> ディレクトリにある <code>mybackupscheme.xml</code> という名前の XML ファイルを指定しています。
この構成ファイルには、バックアップ対象とするファイルのルールが含まれています。
次のサンプル コードは、バックアップから特定のファイルを除外する構成ファイルを示しています。
</p>
<pre>
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;full-backup-content&gt;
&lt;exclude domain="database" path="device_info.db"/&gt;
&lt;/full-backup-content&gt;
</pre>
<p>
この例のバックアップ構成では、特定のデータベース ファイルのみをバックアップから除外しています。
それ以外のファイルはすべてバックアップされます。
</p>
<h4>バックアップ設定の構文</h4>
<p>
バックアップ サービスの設定では、バックアップに含める、または除外するファイルを指定できます。
データ バックアップ設定の xml ファイルの構文は次のとおりです。
</p>
<pre>
&lt;full-backup-content&gt;
&lt;include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
&lt;exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
&lt;/full-backup-content&gt;
</pre>
<p>
次のエレメントと属性を使って、バックアップに含める、または除外するファイルを指定できます。
</p>
<ul>
<li>
<code>&lt;include&gt;</code>。システムにデフォルトでアプリのすべてのデータをバックアップさせるのではなく、バックアップするリソースを自身で指定する場合、このエレメントを使用します。
<code>&lt;include&gt;</code> タグを指定すると、システムはこのエレメントで<em>指定されたリソースのみ</em>をバックアップします。
</li>
<li>
<code>&lt;exclude&gt;</code>。バックアップから除外するリソースを指定するには、このエレメントを使用します。
システムは、このエレメントで指定されたリソース以外のすべてのアプリ データをバックアップします。
</li>
<li>
<code>domain.</code> バックアップに含める、または除外するリソースのタイプ。この属性を指定する際に有効な値:
</li>
<li style="list-style: none">
<ul>
<li>
<code>root</code>。リソースがアプリのルート ディレクトリにあることを指定します。
</li>
<li>
<code>file</code>。
{@link android.content.Context#getFilesDir getFilesDir()} メソッドで返されるディレクトリ内のリソースに相当します。
</li>
<li>
<code>database</code>。
{@link android.content.Context#getDatabasePath getDatabasePath()} メソッドや
{@link android.database.sqlite.SQLiteOpenHelper} クラスを使用して返されるデータベースに相当します。
</li>
<li>
<code>sharedpref</code>。
{@link android.content.Context#getSharedPreferences getSharedPreferences()} メソッドで返される
{@link android.content.SharedPreferences} オブジェクトに相当します。
</li>
<li>
<code>external</code>。リソースが外部ストレージにあることを指定し、
{@link android.content.Context#getExternalFilesDir getExternalFilesDir()}
メソッドで返されるディレクトリ内のファイルに相当します。
</li>
<li>
<code>path</code>。バックアップに含める、または除外するリソースへのファイルパス。
</li>
</ul>
</li>
</ul>
<h3 id="prohibit">データ バックアップの禁止</h3>
<p>
マニフェストのアプリ エレメントにある <code>android:allowBackup</code> 属性を <code>false</code> に設定すると、一切のデータを自動バックアップしないように選択できます。
この設定を、次のサンプル コードで示します。
</p>
<pre>
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.my.appexample"&gt;
&lt;uses-sdk android:minSdkVersion="MNC"/&gt;
&lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
&lt;app ...
<strong> android:allowBackup="false"&gt;</strong>
&lt;/app&gt;
...
&lt;/manifest&gt;
</pre>
<h2 id="testing">バックアップ設定をテストする</h2>
<p>
バックアップ設定を作成したら、アプリでデータが保存され、正常に復元されることをテストして確認する必要があります。
</p>
<h4>バックアップのログの有効化</h4>
<p>
バックアップで XML ファイルがどのように解析されるかを確認するため、テストのバックアップを実行する前にログ機能を有効にします。
</p>
<pre class="noprettyprint">
$ adb shell setprop log.tag.BackupXmlParserLogging VERBOSE
</pre>
<h4>バックアップのテスト</h4>
<p>手動でバックアップを実行するには、まず次のコマンドを呼び出してバックアップ マネージャーを初期化する必要があります。
</p>
<pre class="noprettyprint">
$ adb shell bmgr run
</pre>
<p>
次に、次のコマンドを使って、アプリのパッケージ名を <code>&lt;PACKAGE&gt;</code> パラメータで指定して手動でアプリケーションをバックアップします。
</p>
<pre class="noprettyprint">
$ adb shell bmgr fullbackup &lt;PACKAGE&gt;</pre>
<h4>復元のテスト</h4>
<p>
アプリのバックアップ後に手動で復元を開始するには、アプリのパッケージ名を <code>&lt;PACKAGE&gt;</code> パラメータで指定します。
</p>
<pre class="noprettyprint">
$ adb shell bmgr restore &lt;PACKAGE&gt;
</pre>
<p class="warning">
<b>警告:</b> このアクションを実行すると、アプリが停止し、復元操作を実行する前にデータが消去されます。
</p>
<p>
アプリをアンインストールしてから再インストールすることで、アプリの復元プロセスを開始します。アプリのインストールが完了すると、アプリデータが自動的にクラウドから復元されます。
</p>
<h4>バックアップのトラブルシューティング</h4>
<p>
問題が発生した場合は、<strong>[設定] &gt; [バックアップ]</strong>でバックアップをオン/オフに切り替え、端末を工場出荷時の状態にリセットするか、次のコマンドを呼び出して、バックアップ データと関連メタデータを消去できます。
</p>
<pre>$ adb shell bmgr wipe &lt;TRANSPORT&gt; &lt;PACKAGE&gt;</pre>
<p>
<code>&lt;TRANSPORT&gt;</code> には、<code>com.google.android.gms</code> というプレフィクスが付く必要があります。
Transport の一覧を取得するには、次のコマンドを呼び出します。
</p>
<pre>$ adb shell bmgr list transports</pre>
<h2 id="issues">既知の問題</h2>
<p>自動バックアップ サービスには、次のような既知の問題があります。</p>
<ul>
<li><strong>Google Cloud Messaging</strong> - プッシュ通知に Google Cloud Messaging を使用するアプリの場合、Messaging の登録時に返された登録 ID をバックアップすると、復元されたアプリのプッシュ通知が破損することがあるという既知の問題があります。古い登録 ID がバックアップされている場合を除いて、新しい端末へのインストール後は、新しい 登録 ID 用の API を照会することが重要です。
これを回避するには、バックアップ対象ファイルから登録 ID を除外します。
</li>
</ul>

View File

@@ -0,0 +1,348 @@
page.title=ダウンロード
page.image=images/cards/card-download_16-9_2x.png
@jd:body
<div style="position:relative; min-height:600px">
<div class="wrap" id="tos" style="position:absolute;display:none;width:inherit;">
<p class="sdk-terms-intro">Android Preview SDK のコンポーネントをダウンロード、インストールする前に、次の利用規約に同意する必要があります。
</p>
<h2 class="norule">利用規約</h2>
<div class="sdk-terms" onfocus="this.blur()" style="width:678px">
以下は、Android SDK Preview の使用許諾契約です(以下「本契約」)。
1.はじめに
1.1 Android SDK Preview以下、本契約で「Preview」という。具体的には利用可能な場合には Android システム ファイル、パッケージ型 API、Preview ライブラリ ファイルを含む)は、本契約の規定に従ってライセンス許可されます。本契約では、デベロッパーの Preview の使用に関して、デベロッパーと Google の間で法的拘束力のある契約を結びます。
1.2 「Android」とは、Android オープン ソース プロジェクトhttp://source.android.com/ にて随時更新)にて利用可能な、端末向けの Android ソフトウェア スタックを意味します。
1.3 「Google」とは、1600 Amphitheatre Parkway, Mountain View, CA 94043, United States に主たる事業所を有するデラウェア州法人である Google Inc. を意味します。
2.本契約の同意
2.1 Preview を使用するには、まず本契約に同意する必要があります。本契約に同意しない場合は Preview を使用できません。
2.2 同意するかまたは Preview を使用するためにクリックすると、本契約に同意したことになります。
2.3 米国またはその他の国(デベロッパーが居住している国かまたはデベロッパーが Preview を使用する国を含む)の法律により Preview の使用を禁止されている人である場合、Preview を使用することも、使用許諾契約に同意することもできません。
2.4 雇用主またはその他の事業体を代表または代理して本契約に拘束されることに同意し Preview を企業または組織の内部で使用する場合、担当者の雇用主またはその他の事業体を本契約に法的に拘束する完全な法的権限を有していることを表明および保証するものとします。担当者が必要な権限を有していない場合は、担当者の雇用主またはその他の事業体を代表または代理して、本契約に同意することも、Preview を使用することもできません。
3.Google Preview ライセンス
3.1 本契約の規定に従い、Google は Android プラットフォーム上で実行するアプリケーションの開発に Preview を個人的にもしくは企業または組織の内部で使用するための、ロイヤリティ フリーな、譲渡不可で、非排他的な、サブライセンス不可の、限定された、取り消し可能なライセンスを付与するものとします。
3.2 Preview に関するすべての法的権利、所有権、利益Preview に含まれる知的財産権を含む)は Google またはサードパーティが所有するものとします。「知的財産権」とは、特許法、著作権法、営業秘密法、商標法、不当競争防止法に基づいて発生するすべての権利、およびその他のすべての所有権を意味します。デベロッパーに明示的に付与されていない権利は、すべて Google が所有します。
3.3 本契約で明示的に許可されている目的以外においては、Preview を使用できません。当該のサードパーティのライセンスで必要とされる場合を除き、デベロッパーは、a Preview または Preview の一部をコピー(バックアップ目的を除く)、修正、改造、再配布、逆コンパイル、リバース エンジニアリング、逆アセンブルまたは派生物の作成、またはbモバイル ハンドセットまたは個人用 PC 以外のハードウェア端末への Preview の読み込み、Preview と他のソフトウェアとの結合、または Preview の一部を組み込んだソフトウェアや端末の配布はできません。
3.4 デベロッパーは、Android の断片化につながるような行為をしないことに同意します。これには、Preview から派生したソフトウェア開発キットの配布、作成への参加、宣伝を含みます(ただし必ずしもこれらには限定されません)。
3.5 オープンソース ソフトウェア ライセンス下でライセンス付与された Preview のコンポーネントの使用、複製、配布は、本契約ではなく、そのオープンソース ソフトウェアのライセンスに準拠するものとします。デベロッパーは、許諾されるすべての権利下で、そのようなオープンソース ソフトウェア ライセンスに対して、優良ライセンシーのままでいることに同意し、そのような権利を終了、停止、または違反する可能性のあるいかなる行為も差し控えることに同意するものとします。
3.6 デベロッパーは、Google が提供する Preview の形式および性質は事前の通知なしに変更される場合があり、今後リリースされる Preview のバージョンでは、以前のバージョンの Preview で開発されたアプリケーションとの互換性がない可能性があることに同意します。デベロッパーは、Google が事前の通知なく、Google の単独の裁量でデベロッパーまたはユーザーへの Previewまたは Preview 内の一部の機能)の提供を(恒久的または一時的に)停止する場合があることに同意します。
3.7 本契約のいかなる部分も、Google のいかなる商標名、商標、サービスマーク、ロゴ、ドメイン名、またはその他のブランド識別表示を使用する権利もデベロッパーに付与するものではありません。
3.8 デベロッパーは、Preview に添付または収録されているすべての知的財産権に関する通知(著作権および商標の通知を含む)の削除、隠ぺい、改ざんを行わないことに同意します。
4.デベロッパーによる Preview の使用
4.1 Google は、本契約に基づき Preview を使用してデベロッパーが開発したソフトウェア アプリケーションに関して、デベロッパー(またはデベロッパーのライセンサー)からいかなる権利、所有権、または利益(当該アプリケーションに含まれる知的財産権を含む)も取得するものではないことに同意します。
4.2 デベロッパーは、Preview をa本契約、およびb該当する司法管轄区における適用される法律、規則、または一般に認められた慣行またはガイドライン米国またはその他の該当国におけるデータまたはソフトウェアの輸出入に関する法律を含むで認められている目的にのみ使用することに同意します。
4.3 Preview を使用してアプリケーションを開発する場合、デベロッパーはユーザーのプライバシーおよび法的権利を保護することに同意します。ユーザーからデベロッパーにユーザー名、パスワード、またはその他のログイン情報または個人情報が提供される場合、デベロッパーは、情報がデベロッパーのアプリケーションに提供されることをユーザーに認識させ、当該ユーザーについてプライバシーに関する法的に十分な通知および保護を行わなければなりません。デベロッパーのアプリケーションに個人情報または秘密情報が保存される場合、この保存は保護された方法で行われなければなりません。ユーザーからデベロッパーのアプリケーションに Google アカウントの情報が提供された場合、デベロッパーのアプリケーションでは、ユーザーが許可したタイミングで、かつユーザーが許可した限定された目的にのみ、当該情報を使用してユーザーの Google アカウントにアクセスすることが認められるものとします。
4.4 デベロッパーは、Preview に関して、第三者Google、およびあらゆる携帯電話会社を含むが、これらに限定されないのサーバー、ネットワーク、またはその他の財産またはサービスへの妨害、中断、損害、または許可されていない態様でのアクセスとなる行為そのような行為に該当する対象製品の開発または販売 / 配布を含む)に関与しないことに同意します。
4.5 デベロッパーは、デベロッパーが Android および Android のアプリケーションを介して作成、送信、表示するデータ、コンテンツ、リソース、および自身の行為の結果Google に発生する可能性のあるあらゆる損失および損害を含む)について、自身が単独で責任を負うこと(および Google がこれについてデベロッパーまたはいかなる第三者に対しても一切責任を負わないこと)に同意します。
4.6 デベロッパーは、本契約、適用される第三者の契約もしくは利用規約、または適用される法律もしくは規則に基づく自身の義務に違反したこと、および当該違反の結果Google または第三者に発生したあらゆる損失および損害を含む)について、自身が単独で責任を負うこと(および Google がこれについてデベロッパーまたはいかなる第三者に対しても一切責任を負わないこと)に同意します。
4.7 Preview は開発中であり、デベロッパーによるテスティングやフィードバックは開発プロセスの重要な一部となります。デベロッパーは、Preview の使用により、一部の機能の実装が開発中であると認識し、Preview が安定したリリースの完全な機能性を持つことに依存すべきでないことを認識するものとします。本 Preview は、公式の Android SDK のリリース後はサポート対象でなくなるため、デベロッパーは、Preview を使用するいかなるアプリケーションも公然と配布または引き渡さないことに同意するものとします。
5.デベロッパーの資格情報
5.1 デベロッパーは、Google が発行した、またはデベロッパー自身で選択した、自身のデベロッパー用資格情報の秘密を保持する責任を負うこと、および自身のデベロッパー用資格情報のもとで開発されたすべてのアプリケーションについて単独で責任を負うことに同意します。
6.プライバシーおよび情報
6.1 Google は、Preview の継続的な技術革新と改良のために、ソフトウェアから特定の使用状況統計情報(一意識別子、関連する IP アドレス、ソフトウェアのバージョン番号、Preview のどのツール/サービスがどのように使用されているかに関する情報を含むが、これらに限定されないを収集できます。この情報が収集される前に、Preview に通知が表示され、デベロッパーの同意が求められます。デベロッパーが同意しない場合は、情報は収集されません。
6.2 収集されるデータは、Preview の改良のために集約された形で精査され、Google のプライバシー ポリシーhttp://www.google.com/policies/privacy/)に従って管理されます。
7.第三者のアプリケーション
7.1 デベロッパーが、Preview を使用して第三者が開発したアプリケーションを実行する、あるいは第三者から提供されたデータ、コンテンツ、リソースにアクセスする場合、デベロッパーは、Google がそれらのアプリケーション、データ、コンテンツ、リソースについて責任を負わないことに同意します。デベロッパーは、そのような第三者のアプリケーションを介してアクセスするすべてのデータ、コンテンツ、リソースについては、それらを生成した者が単独で責任を負うものであり、Google はそれらの第三者のアプリケーション、データ、コンテンツ、またはリソースの使用もしくはアクセスによって生じたあらゆる損失および損害について一切責任を負わないことを理解します。
7.2 デベロッパーは、そのような第三者のアプリケーションを介して表示されるデータ、コンテンツ、リソースは、提供者(あるいは代理の第三者または事業体)が所有する知的財産権で保護されている場合があることを認識するものとします。デベロッパーは、当該所有者からの明確な許可がない限り、それらのデータ、コンテンツ、リソース(全体または一部)の変更、貸与、賃貸、担保、配布または派生物の作成を行うことはできません。
7.3 デベロッパーは、そのような第三者のアプリケーション、データ、コンテンツまたはリソースの使用が、デベロッパーと当該第三者間の別の規約に従うものであることを認識するものとします。
8.Google API の使用
8.1 Google API
8.1.1 API を使用して Google からデータを取得する場合、デベロッパーは、そのデータは、Google またはデータを提供する事業体(あるいは代理の第三者または事業体)が所有する知的財産権で保護されている場合があることを認識するものとします。そのような API の使用は追加の利用規約に従うものとします。デベロッパーは、当該の利用規約による許可がない限り、そのデータ(全体または一部)の変更、貸与、賃貸、担保、配布または派生物の作成を行うことはできません。
8.1.2 デベロッパーは、API を使用して Google からユーザーのデータを取得する場合、ユーザーが明示的に同意した場合のみ、およびユーザーが許可したタイミングとその目的にのみ、データを取得できることを理解し、同意します。
9.本契約の終了
9.1 本契約は、下記の規定に従ってデベロッパーまたは Google のいずれかによって解約されるまで、継続して適用されるものとします。
9.2 デベロッパーが本契約の解約を希望する場合は、Preview および関連するデベロッパー資格情報の使用を停止することで、契約を終了するものとします。
9.3 Google は、理由の有無にかかわらず、書面で通知することでいつでもデベロッパーとの本契約を解約することができます。
9.4 本契約は事前の通知またはその他の措置なく、次のうち早い方に自動的に終了します。
AGoogle が、デベロッパーが居住している国またはデベロッパーがサービスを使用する国での Preview または Preview の一部の配布を停止したとき。
BGoogle が Android SDK の最終バージョンをリリースしたとき。
9.5 本契約が終了すると、本契約で付与されていたライセンスは終了し、デベロッパーは速やかに Preview のすべての使用を停止するものとし、第 10 条、第 11 条、第 12 条、第 14 条の規定は無期限に効力を有するものとします。
10.免責事項
10.1 デベロッパーは、デベロッパーによる Preview の使用はデベロッパー自身の責任において行うものであること、および Preview は「現状有姿」かつ「提供可能な限りにおいて」、Google からのいかなる種類の保証もなく提供されるものであることを明示的に理解し、これに同意します。
10.2 デベロッパーによる Preview および Preview の使用を通じてダウンロードまたはその他の方法で取得されたマテリアルの使用は、デベロッパー自身の裁量および責任において行うものであり、当該使用の結果として生じるデベロッパーのコンピュータ システムもしくはその他の端末への損害またはデータの喪失についての責任はデベロッパーが単独で負います。前述を制限することなく、Preview は安定したリリースではなく、コンピュータやその他の端末の利用の完全な回復不可能な損失を含む、重大な損害を引き起こす可能性のあるエラー、欠陥、およびセキュリティ上の脆弱性が含まれている可能性があることを理解します。
10.3 Google はまた、商品性、特定目的への適合性、および権利侵害がないことの黙示的な保証および条件を含む(ただしこれらに限定されない)、明示的か黙示的かを問わずあらゆる種類のすべての保証および条件を明示的に否定します。
11.責任の制限
11.1 デベロッパーは、Google、その子会社および関連会社、ならびにそのライセンサーが、デベロッパーに発生した直接損害、間接損害、偶発的損害、特別損害、結果的損害、または懲罰的損害データの喪失を含むについて、Google またはその代表者が当該損失が発生する可能性について告知されていたかどうか、または知っていたはずであるかどうかにかかわらず、いかなる責任法理のもとでもデベロッパーに対して責任を負わないことを明示的に理解し、これに同意します。
12.補償
12.1 法律で認められる最大限の範囲内において、デベロッパーは、aデベロッパーが Preview を使用したこと、およびbデベロッパーが Preview で開発したアプリケーションが他者のいかなる知的財産権を侵害していること、または他者の名誉を毀損している、もしくは他者のパブリシティ権もしくはプライバシー権を侵害していること、およびcデベロッパーが本契約に違反したことから発生したあらゆる申し立て、普通法上の訴訟、衡平法上の訴訟、または法的手続き、ならびにあらゆる損失、責任、損害、費用、および経費合理的な弁護士報酬を含むについて、Google、その関連会社、ならびに当該各社の取締役、役員、従業員、代理人を防御し、補償し、免責することに同意します。
13.契約の変更
13.1 Google は、Preview の新しいバージョンを配布することにより、いつでも本契約を変更することができます。変更が生じた場合、Google は、Preview の提供ウェブサイト上に使用許諾契約の改訂版を公開します。
14.法的一般条項
14.1 本契約は、デベロッパーと Google の間の法的な合意のすべてを表し、デベロッパーによる Preview の使用(別の契約下で Google が提供するサービスを除くに適用され、Preview に関するデベロッパーと Google の間のあらゆる事前の合意に完全に取って代わるものです。
14.2 デベロッパーは、Google が本契約に定める(または適用される法律のもとで Google が享受できる法的な権利または救済措置を行使または執行しなかった場合でも、Google の権利が正式に放棄されたとはみなされないこと、および Google が以後も引き続き当該権利および救済措置を行使または執行できることに同意します。
14.3 本件について判断を下す管轄権を有する司法裁判所によって、本契約のいずれかの条項が無効と判断された場合、当該条項は、本契約の残りの部分に影響を与えることなく本契約から削除されるものとします。本契約の残りの条項は、以後も引き続き有効かつ執行可能であるものとします。
14.4 デベロッパーは、Google が親会社となっている各グループ企業が、本契約の第三受益者となること、および当該企業が、当該企業に利益(または受益権)を付与する本契約の条項を直接執行する、また当該条項に依拠する権利を有することを了承し、これに同意します。上記以外のいかなる人または法人も、本契約の第三受益者とはならないものとします。
14.5 輸出規制。Preview は、米国輸出管理法令の対象です。デベロッパーは、Preview に適用されるすべての国内および国際の輸出管理法令に従わなければなりません。これらの法律には、仕向け地、ユーザー、および最終用途に関する制限が含まれます。
14.6 デベロッパーは、Google から事前に書面で承認を得ずに、本契約を譲渡または移転することはできません。また、そのような承認を得ずに計画された譲渡はすべて無効になります。デベロッパーは、Google から事前に書面で承認を得ずに、本契約に基づく自身の責任または義務を他者に委任してはなりません。
14.7 本契約あるいは本契約に基づくデベロッパーと Google の関係から発生または関連するすべての申し立ては、米国カリフォルニア州の抵触法を除いて、カリフォルニア州法に準拠するものとします。デベロッパーおよび Google は、本契約あるいは本契約に基づくデベロッパーと Google の関係から発生または関連する法的事項の解決について、米国カリフォルニア州サンタクララ郡に所在の連邦裁判所または州立裁判所が専属管轄権を有することに合意します。上記にかかわらず、デベロッパーは、Google が任意の司法管轄区において差し止め命令による救済(または同等の緊急法的救済)を求める申し立てを行うことが認められることに同意します。
</div><!-- sdk terms -->
<div id="sdk-terms-form">
<p>
<input id="agree" type="checkbox" name="agree" value="1" onclick="onAgreeChecked()" />
<label id="agreeLabel" for="agree">上記の利用規約を読み、同意します。</label>
</p>
<p><a href="" class="button disabled" id="downloadForRealz" onclick="return onDownloadForRealz(this);"></a></p>
</div>
</div><!-- end TOS -->
<div id="landing">
<div id="qv-wrapper">
<div id="qv">
<h2>本書の内容</h2>
<ol>
<li><a href="#sdk">Preview SDK</a></li>
<li><a href="#docs">デベロッパー ドキュメント</a></li>
<li><a href="#images">ハードウェアのシステム イメージ</a></li>
</ol>
</div>
</div>
<p>
Android M Preview SDK には、アプリとプラットフォームの次期リリースで提供される新しい API とのテストに役立つ開発ツール、Android システム ファイル、ライブラリ ファイルが含まれています。
このドキュメントでは、アプリのテスト用にダウンロードできる Preview のコンポーネントを入手する方法について説明します。
</p>
<h2 id="sdk">Preview SDK</h2>
<p>
Preview SDK <a href="{@docRoot}tools/help/sdk-manager.html">Android SDK マネージャー</a>経由でダウンロードできます。Preview SDK のダウンロードと設定の詳細については、<a href="{@docRoot}preview/setup-sdk.html#downloadSdk">Set Up the Preview SDK</a> をご覧ください。
</p>
<h2 id="docs">デベロッパー ドキュメント</h2>
<p>
デベロッパー ドキュメントのダウンロード パッケージでは、詳細な Preview の API リファレンス情報や API の比較レポートが提供されます。
</p>
<table>
<tr>
<th scope="col">説明</th>
<th scope="col">ダウンロード / チェックサム</th>
</tr>
<tr id="docs-dl">
<td>Android M Preview<br>デベロッパー ドキュメント</td>
<td><a href="#top" onclick="onDownload(this)">m-preview-1-developer-docs.zip</a><br>
MD5: b65201b0d35416f5a1b7a071b52854a7<br>
SHA-1: d47e856aa65e06897e6edd902ad8d2b1f05ac3ec
</td>
</tr>
<table>
<h2 id="images">ハードウェアのシステム イメージ</h2>
<p>
これらのシステム イメージでは、テスト用に物理端末にプラットフォームのプレビュー バージョンをインストールできます。
端末にこれらのイメージを 1 つ以上設定すると、アプリをインストールして、プラットフォームの次期バージョンでアプリがどのように動作するかをテストできます。
端末にシステム イメージをインストールするプロセスでは、<em>端末からすべてのデータが削除</em>されるため、システム イメージのインストール前にデータをバックアップする必要があります。
</p>
<p class="warning">
<b>警告:</b> 次の Android システム イメージはプレビュー版であり、今後変更される可能性があります。デベロッパーによるシステム イメージの使用は、Android SDK Preview 使用許諾契約に準拠するものとします。
Android Preview システム イメージは安定したリリースではなく、お使いのコンピュータ システム、端末、データに影響を与える可能性のあるエラーや欠陥が含まれている場合があります。
プレビュー版の Android システム イメージは工場出荷版の OS と同等のテストを受けておらず、お使いの電話やインストールされているサービス、アンインストールの動作停止を引き起こす場合があります。
</p>
<table>
<tr>
<th scope="col">端末</th>
<th scope="col">ダウンロード / チェックサム</th>
</tr>
<tr id="hammerhead">
<td>Nexus 5GSM/LTE <br>"hammerhead"</td>
<td><a href="#top" onclick="onDownload(this)">hammerhead-MPZ44Q-preview-55d76d3a.tgz</a><br>
MD5:9e2631b06c6525e401ceaae3677ff320<br>
SHA-1:55d76d3a379b18f3363f28d8a462c236ab96fc36
</td>
</tr>
<tr id="shamu">
<td>Nexus 6 <br>"shamu"</td>
<td><a href="#top" onclick="onDownload(this)">shamu-MPZ44Q-preview-c1d6506a.tgz</a><br>
MD5:307cbf9dab0a38df4ab2639d02be12aa<br>
SHA-1: c1d6506a74094bdb2f4b8677c7fe4967334f9ea8
</td>
</tr>
<tr id="volantis">
<td>Nexus 9 <br>"volantis"</td>
<td><a href="#top" onclick="onDownload(this)">volantis-MPZ44Q-preview-d15ad483.tgz</a><br>
MD5: fae40377fd999d2b09128665c915264d<br>
SHA-1:7ab05f96093b2cb370b226f65931202714cbc2ca
</td>
</tr>
<tr id="fugu">
<td>Nexus Player <br>"fugu"</td>
<td><a href="#top" onclick="onDownload(this)">fugu-MPZ44Q-preview-2406ba05.tgz</a><br>
MD5:815902141a85cc65e7725f005cad31d5<br>
SHA-1:2406ba0598dea1e69110497ac0bc8e16789bc8fb
</td>
</tr>
</table>
<h3 id="install-image">端末にイメージをインストールする</h3>
<p>
テスト用に端末イメージを使用するには、互換性のある端末にインストールする必要があります。次の手順に従って、システム イメージをインストールします。
</p>
<ol>
<li>この一覧の中からいずれかのシステム イメージ パッケージをダウンロードして、解凍します。</li>
<li>保持するデータを端末からバックアップします。</li>
<li>
<a href="https://developers.google.com/android/nexus/images#instructions">developers.google.com/android</a>
の手順に従って端末にイメージをフラッシュします。</li>
</ol>
<p class="note">
<strong>注:</strong> 開発用端末に Preview のシステム イメージをフラッシュすると、OTA アップデートを通じて次のプレビュー リリースに自動的にアップグレードされます。
</p>
<h3 id="revertDevice">端末を工場出荷時の仕様に戻す</h3>
<p>
Preview をアンインストールして、工場出荷時の仕様に戻すには、
<a href="http://developers.google.com/android/nexus/images">developers.google.com/android</a> にアクセス
して、端末にフラッシュするイメージをダウンロードします。同じページの手順に従って端末にイメージをフラッシュします。
</p>
</div><!-- landing -->
</div><!-- relative wrapper -->
<script>
var urlRoot = "http://storage.googleapis.com/androiddevelopers/shareables/preview/";
function onDownload(link) {
$("#downloadForRealz").html("Download " + $(link).text());
$("#downloadForRealz").attr('href', urlRoot + $(link).text());
$("#tos").fadeIn('fast');
$("#landing").fadeOut('fast');
return true;
}
function onAgreeChecked() {
/* verify that the TOS is agreed */
if ($("input#agree").is(":checked")) {
/* reveal the download button */
$("a#downloadForRealz").removeClass('disabled');
} else {
$("a#downloadForRealz").addClass('disabled');
}
}
function onDownloadForRealz(link) {
if ($("input#agree").is(':checked')) {
/*
$("#tos").fadeOut('fast');
$("#landing").fadeIn('fast');
*/
ga('send', 'event', 'M Preview', 'System Image', $("#downloadForRealz").html());
/*
location.hash = "";
*/
return true;
} else {
return false;
}
}
$(window).hashchange( function(){
if (location.hash == "") {
location.reload();
}
});
</script>

View File

@@ -0,0 +1,123 @@
page.title=App Links
page.image=images/cards/card-app-linking_2x.png
page.keywords=applinking,deeplinks,intents
@jd:body
<div id="qv-wrapper">
<div id="qv">
<h2>本書の内容</h2>
<ol>
<li><a href="#web-assoc">ウェブサイトの関連を宣言する</a></li>
<li><a href="#verfy-links">App Link の検証を要求する</a></li>
<li><a href="#user-manage">App Link 設定を管理する</a></li>
</ol>
</div>
</div>
<p>
Android インテント システムは、アプリでコンテンツや要求を処理できるようにする柔軟なメカニズムです。
複数のアプリが、それぞれのインテント フィルタに一致する URI パターンを宣言できます。デフォルトのローンチ ハンドラを持たないウェブリンクをユーザーがクリックしたとき、一致するインテント フィルタが宣言されているアプリの一覧から選択するダイアログがプラットフォームによってユーザーに表示されます。
</p>
<p>
Android M Developer Preview でサポートされる App Links では、既存のリンク処理が改善され、アプリ開発者が所有するウェブドメインとアプリを関連付けられるようになりました。
デベロッパーがこの関連を作成すると、プラットフォームが特定のウェブリンクの処理に使用するデフォルトのアプリを自動的に決めることができ、ユーザーにアプリを選択させる操作をスキップできます。
</p>
<h2 id="web-assoc">ウェブサイトの関連付けを宣言する</h2>
<p>
ウェブサイトのオーナーは、アプリのリンクを設定するための関連を宣言する必要があります。サイトのオーナーは、ドメインのよく知られた場所で {@code statements.json} という名前の JSON ファイルをホストすることで、アプリとの関係を宣言します。
</p>
<pre>http://&lt;domain&gt;:&lt;optional port&gt;/.well-known/statements.json</pre>
<p class="note">
<strong>注:</strong>
M Developer Preview の間、JSON ファイルは http プロトコルを介して検証されます。プラットフォームの正式リリースでは、ファイルは暗号化された https プロトコルで検証されます。
</p>
<p>
この JSON ファイルは、このドメイン下の URL のデフォルトのハンドラとして使用する必要のある Android アプリを示します。
アプリは、次のフィールドに基づいて識別されます。
</p>
<ul>
<li>{@code package_name}:アプリのマニフェストで宣言されたパッケージ名。</li>
<li>{@code sha256_cert_fingerprints}:アプリの署名証明書の SHA256 のフィンガープリント。
Java Keytool を使用して、次のコマンドでフィンガープリントを生成できます。
<pre>keytool -list -v -keystore my-release-key.keystore</pre>
</li>
</ul>
<p>
次のファイル一覧は、
{@code statements.json} ファイルのコンテンツと形式の例を示しています。
</p>
<pre>
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "<strong>&lt;package name&gt;</strong>",
"sha256_cert_fingerprints": ["<strong>6C:EC:C5:0E:34:AE....EB:0C:9B</strong>"]
}
}]
</pre>
<h2 id="verfy-links">App Link の検証を要求する</h2>
<p>
アプリから、インテント フィルタのデータ エレメントのホスト名で定義されたアプリのリンクを、それぞれのウェブドメインでホストされる {@code statements.json} ファイルに対してプラットフォームが自動的に検証するよう要求できます。
アプリリンクの検証を要求するには、次のマニフェスト コード スニペットのように {@code android:autoVerify}
属性をマニフェスト内の目的のインテント フィルタに追加します。
</p>
<pre>
&lt;activity ...&gt;
&lt;intent-filter <strong>android:autoVerify="true"</strong>&gt;
&lt;action android:name="android.intent.action.VIEW" /&gt;
&lt;category android:name="android.intent.category.DEFAULT" /&gt;
&lt;category android:name="android.intent.category.BROWSABLE" /&gt;
&lt;data android:scheme="http" android:host="www.android.com" /&gt;
&lt;data android:scheme="https" android:host="www.android.com" /&gt;
&lt;/intent-filter&gt;
&lt;/activity&gt;
</pre>
<p>
{@code android:autoVerify} 属性がアプリ マニフェストに存在する場合、プラットフォームはアプリのインストール時にアプリのリンクを検証しようとします。
プラットフォームがアプリのリンクを正常に検証できない場合、アプリはウェブリンクの処理に適したアプリとして設定されません。
次回ユーザーがいずれかのリンクを開いたとき、プラットフォームはユーザーに再度ダイアログを表示します。
</p>
<p class="note">
<strong>注:</strong> テスト時に、ユーザーがシステムの設定アプリを使ってサポートされているリンクを開くアプリを明示的に有効にしていると、誤検出が原因で検証が失敗する場合があります。この場合、ダイアログは表示されず、リンクは直接アプリに送られますが、これは検証が成功したからではなく、ユーザーの設定に基づいて動作したからです。
</p>
<h2 id="user-manage">App Link 設定を管理する</h2>
<p>
ユーザーが希望する方法で URL を処理するように、ユーザー側でアプリのリンク設定を変更できます。アプリのリンクは、システムの設定アプリの <strong>[設定] &gt; [アプリ] &gt; [アプリ情報] &gt; [デフォルトでの起動]</strong> で確認、管理できます。
</p>

View File

@@ -0,0 +1,67 @@
page.title=Android M Developer Preview
page.tags="preview",
meta.tags="preview, M preview", androidm
fullpage=true
section.landing=true
header.hide=1
footer.hide=1
@jd:body
<section class="dac-expand dac-hero dac-light" >
<div class="wrap">
<div class="cols dac-hero-content">
<div class="col-9of16 col-push-7of16 dac-hero-figure">
<img class="dac-hero-image" src="{@docRoot}images/home/devices-hero_620px_2x.png" srcset="{@docRoot}images/home/devices-hero_620px.png 1x,
{@docRoot}images/home/devices-hero_620px_2x.png 2x">
</div>
<div class="col-7of16 col-pull-9of16">
<h1 class="dac-hero-title">Android M Developer Preview</h1>
<p class="dac-hero-description">
次期バージョンの Android に向けて準備しましょう。Nexus 5、6、9、Nexus Player でアプリをテストします。
<strong>実行時パーミッション</strong>、 <strong>Doze</strong>、<strong>App Standby</strong> 省電力機能、新しい <strong>サポート テクノロジー</strong>などの新機能をご覧ください。
</p>
<a class="dac-hero-cta" href="{@docRoot}preview/overview.html">
<span class="dac-sprite dac-auto-chevron"></span>
スタートガイド
</a><br>
</div>
</div>
<div class="dac-section dac-small">
<div class="resource-widget resource-flow-layout col-16"
data-query="collection:preview/landing/resources"
data-cardSizes="6x2"
data-maxResults="6"></div>
</div>
</div>
</section>
<section class="dac-section dac-gray"><div class="wrap">
<h1 class="dac-section-title">リソース</h1>
<div class="dac-section-subtitle">
Android M 向けにアプリを用意する際に役立つ必須情報をご提供します。
</div>
<div class="resource-widget resource-flow-layout col-16"
data-query="collection:preview/landing/more"
data-cardSizes="6x6"
data-maxResults="16"></div>
<ul class="dac-section-links">
<li class="dac-section-link">
<a href="https://code.google.com/p/android-developer-preview/">
<span class="dac-sprite dac-auto-chevron"></span>
問題の報告
</a>
</li>
<li class="dac-section-link"><a href="http://g.co/dev/AndroidMDevPreview">
<span class="dac-sprite dac-auto-chevron"></span>
Join G+ コミュニティ
</a>
</li>
</ul>
</div>
</section>

View File

@@ -0,0 +1,143 @@
page.title=使用許諾契約
@jd:body
<p>
Android SDK Preview をインストールする前に、次の利用規約に同意する必要があります。
以下に記載するとおり、これは、Android SDK のプレビュー バージョンであり、変更される可能性があります。デベロッパーご自身の責任においてご使用ください。Android SDK Preview は安定したリリースではなく、お使いのコンピュータ システム、端末、データに深刻な影響を与える可能性のあるエラーまたは欠陥が含まれている場合があります。
</p>
<p>
以下は、Android SDK Preview の使用許諾契約です(以下「本契約」)。
</p>
<div class="sdk-terms" style="height:auto;border:0;padding:0;width:700px">
1.はじめに
1.1 Android SDK Preview以下、本契約で「Preview」という。具体的には利用可能な場合には Android システム ファイル、パッケージ型 API、Preview ライブラリ ファイルを含む)は、本契約の規定に従ってライセンス許可されます。本契約では、デベロッパーの Preview の使用に関して、デベロッパーと Google の間で法的拘束力のある契約を結びます。
1.2 「Android」とは、Android オープン ソース プロジェクトhttp://source.android.com/ にて随時更新)にて利用可能な、端末向けの Android ソフトウェア スタックを意味します。
1.3 「Google」とは、1600 Amphitheatre Parkway, Mountain View, CA 94043, United States に主たる事業所を有するデラウェア州法人である Google Inc. を意味します。
2.本契約の同意
2.1 Preview を使用するには、まず本契約に同意する必要があります。本契約に同意しない場合は Preview を使用できません。
2.2 同意するかまたは Preview を使用するためにクリックすると、本契約に同意したことになります。
2.3 米国またはその他の国(デベロッパーが居住している国かまたはデベロッパーが Preview を使用する国を含む)の法律により Preview の使用を禁止されている人である場合、Preview を使用することも、使用許諾契約に同意することもできません。
2.4 雇用主またはその他の事業体を代表または代理して本契約に拘束されることに同意し Preview を企業または組織の内部で使用する場合、担当者の雇用主またはその他の事業体を本契約に法的に拘束する完全な法的権限を有していることを表明および保証するものとします。担当者が必要な権限を有していない場合は、担当者の雇用主またはその他の事業体を代表または代理して、本契約に同意することも、Preview を使用することもできません。
3.Google Preview ライセンス
3.1 本契約の規定に従い、Google は Android プラットフォーム上で実行するアプリケーションの開発に Preview を個人的にもしくは企業または組織の内部で使用するための、ロイヤリティ フリーな、譲渡不可で、非排他的な、サブライセンス不可の、限定された、取り消し可能なライセンスを付与するものとします。
3.2 Preview に関するすべての法的権利、所有権、利益Preview に含まれる知的財産権を含む)は Google またはサードパーティが所有するものとします。「知的財産権」とは、特許法、著作権法、営業秘密法、商標法、不当競争防止法に基づいて発生するすべての権利、およびその他のすべての所有権を意味します。デベロッパーに明示的に付与されていない権利は、すべて Google が所有します。
3.3 本契約で明示的に許可されている目的以外においては、Preview を使用できません。当該のサードパーティのライセンスで必要とされる場合を除き、デベロッパーは、a Preview または Preview の一部をコピー(バックアップ目的を除く)、修正、改造、再配布、逆コンパイル、リバース エンジニアリング、逆アセンブルまたは派生物の作成、またはbモバイル ハンドセットまたは個人用 PC 以外のハードウェア端末への Preview の読み込み、Preview と他のソフトウェアとの結合、または Preview の一部を組み込んだソフトウェアや端末の配布はできません。
3.4 デベロッパーは、Android の断片化につながるような行為をしないことに同意します。これには、Preview から派生したソフトウェア開発キットの配布、作成への参加、宣伝を含みます(ただし必ずしもこれらには限定されません)。
3.5 オープンソース ソフトウェア ライセンス下でライセンス付与された Preview のコンポーネントの使用、複製、配布は、本契約ではなく、そのオープンソース ソフトウェアのライセンスに準拠するものとします。デベロッパーは、許諾されるすべての権利下で、そのようなオープンソース ソフトウェア ライセンスに対して、優良ライセンシーのままでいることに同意し、そのような権利を終了、停止、または違反する可能性のあるいかなる行為も差し控えることに同意するものとします。
3.6 デベロッパーは、Google が提供する Preview の形式および性質は事前の通知なしに変更される場合があり、今後リリースされる Preview のバージョンでは、以前のバージョンの Preview で開発されたアプリケーションとの互換性がない可能性があることに同意します。デベロッパーは、Google が事前の通知なく、Google の単独の裁量でデベロッパーまたはユーザーへの Previewまたは Preview 内の一部の機能)の提供を(恒久的または一時的に)停止する場合があることに同意します。
3.7 本契約のいかなる部分も、Google のいかなる商標名、商標、サービスマーク、ロゴ、ドメイン名、またはその他のブランド識別表示を使用する権利もデベロッパーに付与するものではありません。
3.8 デベロッパーは、Preview に添付または収録されているすべての知的財産権に関する通知(著作権および商標の通知を含む)の削除、隠ぺい、改ざんを行わないことに同意します。
4.デベロッパーによる Preview の使用
4.1 Google は、本契約に基づき Preview を使用してデベロッパーが開発したソフトウェア アプリケーションに関して、デベロッパー(またはデベロッパーのライセンサー)からいかなる権利、所有権、または利益(当該アプリケーションに含まれる知的財産権を含む)も取得するものではないことに同意します。
4.2 デベロッパーは、Preview をa本契約、およびb該当する司法管轄区における適用される法律、規則、または一般に認められた慣行またはガイドライン米国またはその他の該当国におけるデータまたはソフトウェアの輸出入に関する法律を含むで認められている目的にのみ使用することに同意します。
4.3 Preview を使用してアプリケーションを開発する場合、デベロッパーはユーザーのプライバシーおよび法的権利を保護することに同意します。ユーザーからデベロッパーにユーザー名、パスワード、またはその他のログイン情報または個人情報が提供される場合、デベロッパーは、情報がデベロッパーのアプリケーションに提供されることをユーザーに認識させ、当該ユーザーについてプライバシーに関する法的に十分な通知および保護を行わなければなりません。デベロッパーのアプリケーションに個人情報または秘密情報が保存される場合、この保存は保護された方法で行われなければなりません。ユーザーからデベロッパーのアプリケーションに Google アカウントの情報が提供された場合、デベロッパーのアプリケーションでは、ユーザーが許可したタイミングで、かつユーザーが許可した限定された目的にのみ、当該情報を使用してユーザーの Google アカウントにアクセスすることが認められるものとします。
4.4 デベロッパーは、Preview に関して、第三者Google、およびあらゆる携帯電話会社を含むが、これらに限定されないのサーバー、ネットワーク、またはその他の財産またはサービスへの妨害、中断、損害、または許可されていない態様でのアクセスとなる行為そのような行為に該当する対象製品の開発または販売 / 配布を含む)に関与しないことに同意します。
4.5 デベロッパーは、デベロッパーが Android および Android のアプリケーションを介して作成、送信、表示するデータ、コンテンツ、リソース、および自身の行為の結果Google に発生する可能性のあるあらゆる損失および損害を含む)について、自身が単独で責任を負うこと(および Google がこれについてデベロッパーまたはいかなる第三者に対しても一切責任を負わないこと)に同意します。
4.6 デベロッパーは、本契約、適用される第三者の契約もしくは利用規約、または適用される法律もしくは規則に基づく自身の義務に違反したこと、および当該違反の結果Google または第三者に発生したあらゆる損失および損害を含む)について、自身が単独で責任を負うこと(および Google がこれについてデベロッパーまたはいかなる第三者に対しても一切責任を負わないこと)に同意します。
4.7 Preview は開発中であり、デベロッパーによるテスティングやフィードバックは開発プロセスの重要な一部となります。デベロッパーは、Preview の使用により、一部の機能の実装が開発中であると認識し、Preview が安定したリリースの完全な機能性を持つことに依存すべきでないことを認識するものとします。本 Preview は、公式の Android SDK のリリース後はサポート対象でなくなるため、デベロッパーは、Preview を使用するいかなるアプリケーションも公然と配布または引き渡さないことに同意するものとします。
5.デベロッパーの資格情報
5.1 デベロッパーは、Google が発行した、またはデベロッパー自身で選択した、自身のデベロッパー用資格情報の秘密を保持する責任を負うこと、および自身のデベロッパー用資格情報のもとで開発されたすべてのアプリケーションについて単独で責任を負うことに同意します。
6.プライバシーおよび情報
6.1 Google は、Preview の継続的な技術革新と改良のために、ソフトウェアから特定の使用状況統計情報(一意識別子、関連する IP アドレス、ソフトウェアのバージョン番号、Preview のどのツール/サービスがどのように使用されているかに関する情報を含むが、これらに限定されないを収集できます。この情報が収集される前に、Preview に通知が表示され、デベロッパーの同意が求められます。デベロッパーが同意しない場合は、情報は収集されません。
6.2 収集されるデータは、Preview の改良のために集約された形で精査され、Google のプライバシー ポリシーhttp://www.google.com/policies/privacy/)に従って管理されます。
7.第三者のアプリケーション
7.1 デベロッパーが、Preview を使用して第三者が開発したアプリケーションを実行する、あるいは第三者から提供されたデータ、コンテンツ、リソースにアクセスする場合、デベロッパーは、Google がそれらのアプリケーション、データ、コンテンツ、リソースについて責任を負わないことに同意します。デベロッパーは、そのような第三者のアプリケーションを介してアクセスするすべてのデータ、コンテンツ、リソースについては、それらを生成した者が単独で責任を負うものであり、Google はそれらの第三者のアプリケーション、データ、コンテンツ、またはリソースの使用もしくはアクセスによって生じたあらゆる損失および損害について一切責任を負わないことを理解します。
7.2 デベロッパーは、そのような第三者のアプリケーションを介して表示されるデータ、コンテンツ、リソースは、提供者(あるいは代理の第三者または事業体)が所有する知的財産権で保護されている場合があることを認識するものとします。デベロッパーは、当該所有者からの明確な許可がない限り、それらのデータ、コンテンツ、リソース(全体または一部)の変更、貸与、賃貸、担保、配布または派生物の作成を行うことはできません。
7.3 デベロッパーは、そのような第三者のアプリケーション、データ、コンテンツまたはリソースの使用が、デベロッパーと当該第三者間の別の規約に従うものであることを認識するものとします。
8.Google API の使用
8.1 Google API
8.1.1 API を使用して Google からデータを取得する場合、デベロッパーは、そのデータは、Google またはデータを提供する事業体(あるいは代理の第三者または事業体)が所有する知的財産権で保護されている場合があることを認識するものとします。そのような API の使用は追加の利用規約に従うものとします。デベロッパーは、当該の利用規約による許可がない限り、そのデータ(全体または一部)の変更、貸与、賃貸、担保、配布または派生物の作成を行うことはできません。
8.1.2 デベロッパーは、API を使用して Google からユーザーのデータを取得する場合、ユーザーが明示的に同意した場合のみ、およびユーザーが許可したタイミングとその目的にのみ、データを取得できることを理解し、同意します。
9.本契約の終了
9.1 本契約は、下記の規定に従ってデベロッパーまたは Google のいずれかによって解約されるまで、継続して適用されるものとします。
9.2 デベロッパーが本契約の解約を希望する場合は、Preview および関連するデベロッパー資格情報の使用を停止することで、契約を終了するものとします。
9.3 Google は、理由の有無にかかわらず、書面で通知することでいつでもデベロッパーとの本契約を解約することができます。
9.4 本契約は事前の通知またはその他の措置なく、次のうち早い方に自動的に終了します。
AGoogle が、デベロッパーが居住している国またはデベロッパーがサービスを使用する国での Preview または Preview の一部の配布を停止したとき。
BGoogle が Android SDK の最終バージョンをリリースしたとき。
9.5 本契約が終了すると、本契約で付与されていたライセンスは終了し、デベロッパーは速やかに Preview のすべての使用を停止するものとし、第 10 条、第 11 条、第 12 条、第 14 条の規定は無期限に効力を有するものとします。
10.免責事項
10.1 デベロッパーは、デベロッパーによる Preview の使用はデベロッパー自身の責任において行うものであること、および Preview は「現状有姿」かつ「提供可能な限りにおいて」、Google からのいかなる種類の保証もなく提供されるものであることを明示的に理解し、これに同意します。
10.2 デベロッパーによる Preview および Preview の使用を通じてダウンロードまたはその他の方法で取得されたマテリアルの使用は、デベロッパー自身の裁量および責任において行うものであり、当該使用の結果として生じるデベロッパーのコンピュータ システムもしくはその他の端末への損害またはデータの喪失についての責任はデベロッパーが単独で負います。前述を制限することなく、Preview は安定したリリースではなく、コンピュータやその他の端末の利用の完全な回復不可能な損失を含む、重大な損害を引き起こす可能性のあるエラー、欠陥、およびセキュリティ上の脆弱性が含まれている可能性があることを理解します。
10.3 Google はまた、商品性、特定目的への適合性、および権利侵害がないことの黙示的な保証および条件を含む(ただしこれらに限定されない)、明示的か黙示的かを問わずあらゆる種類のすべての保証および条件を明示的に否定します。
11.責任の制限
11.1 デベロッパーは、Google、その子会社および関連会社、ならびにそのライセンサーが、デベロッパーに発生した直接損害、間接損害、偶発的損害、特別損害、結果的損害、または懲罰的損害データの喪失を含むについて、Google またはその代表者が当該損失が発生する可能性について告知されていたかどうか、または知っていたはずであるかどうかにかかわらず、いかなる責任法理のもとでもデベロッパーに対して責任を負わないことを明示的に理解し、これに同意します。
12.補償
12.1 法律で認められる最大限の範囲内において、デベロッパーは、aデベロッパーが Preview を使用したこと、およびbデベロッパーが Preview で開発したアプリケーションが他者のいかなる知的財産権を侵害していること、または他者の名誉を毀損している、もしくは他者のパブリシティ権もしくはプライバシー権を侵害していること、およびcデベロッパーが本契約に違反したことから発生したあらゆる申し立て、普通法上の訴訟、衡平法上の訴訟、または法的手続き、ならびにあらゆる損失、責任、損害、費用、および経費合理的な弁護士報酬を含むについて、Google、その関連会社、ならびに当該各社の取締役、役員、従業員、代理人を防御し、補償し、免責することに同意します。
13.契約の変更
13.1 Google は、Preview の新しいバージョンを配布することにより、いつでも本契約を変更することができます。変更が生じた場合、Google は、Preview の提供ウェブサイト上に使用許諾契約の改訂版を公開します。
14.法的一般条項
14.1 本契約は、デベロッパーと Google の間の法的な合意のすべてを表し、デベロッパーによる Preview の使用(別の契約下で Google が提供するサービスを除くに適用され、Preview に関するデベロッパーと Google の間のあらゆる事前の合意に完全に取って代わるものです。
14.2 デベロッパーは、Google が本契約に定める(または適用される法律のもとで Google が享受できる法的な権利または救済措置を行使または執行しなかった場合でも、Google の権利が正式に放棄されたとはみなされないこと、および Google が以後も引き続き当該権利および救済措置を行使または執行できることに同意します。
14.3 本件について判断を下す管轄権を有する司法裁判所によって、本契約のいずれかの条項が無効と判断された場合、当該条項は、本契約の残りの部分に影響を与えることなく本契約から削除されるものとします。本契約の残りの条項は、以後も引き続き有効かつ執行可能であるものとします。
14.4 デベロッパーは、Google が親会社となっている各グループ企業が、本契約の第三受益者となること、および当該企業が、当該企業に利益(または受益権)を付与する本契約の条項を直接執行する、また当該条項に依拠する権利を有することを了承し、これに同意します。上記以外のいかなる人または法人も、本契約の第三受益者とはならないものとします。
14.5 輸出規制。Preview は、米国輸出管理法令の対象です。デベロッパーは、Preview に適用されるすべての国内および国際の輸出管理法令に従わなければなりません。これらの法律には、仕向け地、ユーザー、および最終用途に関する制限が含まれます。
14.6 デベロッパーは、Google から事前に書面で承認を得ずに、本契約を譲渡または移転することはできません。また、そのような承認を得ずに計画された譲渡はすべて無効になります。デベロッパーは、Google から事前に書面で承認を得ずに、本契約に基づく自身の責任または義務を他者に委任してはなりません。
14.7 本契約あるいは本契約に基づくデベロッパーと Google の関係から発生または関連するすべての申し立ては、米国カリフォルニア州の抵触法を除いて、カリフォルニア州法に準拠するものとします。デベロッパーおよび Google は、本契約あるいは本契約に基づくデベロッパーと Google の関係から発生または関連する法的事項の解決について、米国カリフォルニア州サンタクララ郡に所在の連邦裁判所または州立裁判所が専属管轄権を有することに合意します。上記にかかわらず、デベロッパーは、Google が任意の司法管轄区において差し止め命令による救済(または同等の緊急法的救済)を求める申し立てを行うことが認められることに同意します。
</div>

View File

@@ -0,0 +1,70 @@
page.title=サンプル
page.image=images/cards/samples-new_2x.png
@jd:body
<p>
以下のコードサンプルは、M Developer Preview 用に提供しています。サンプルを Android Studio でダウンロードするには、<b>[File] &gt; [Import Samples]</b> メニュー オプションを選択します。
</p>
<p class="note">
<strong>注:</strong> 以下のダウンロード可能なプロジェクトは、Gradle と Android Studio でご利用いただくために提供しています。
</p>
<h3 id="RuntimePermissions">実行時パーミッション</h3>
<p>
Android M では、システムのパーミッションの仕組みが変わります。ユーザーは、パーミッション要求の承認をインストール時ではなく、実行時に求められるようになります。
このサンプルでは、このパーミッションの要求方法を紹介しています。
</p>
<p><a href="https://github.com/googlesamples/android-RuntimePermissions">GitHub でサンプルを入手</a></p>
<h3 id="ConfirmCredentials">資格情報の確認</h3>
<p>
このサンプルでは、アプリで端末の資格情報を認証手段として使用する方法を紹介しています。
</p>
<p><a href="https://github.com/googlesamples/android-ConfirmCredential">GitHub でサンプルを入手</a>
</p>
<h3 id="FingerprintDialog">指紋ダイアログ</h3>
<p>
このサンプルでは、ユーザーを認証するために登録された指紋をアプリで識別する方法を紹介しています。
</p>
<p><a href="https://github.com/googlesamples/android-FingerprintDialog">GitHub でサンプルを入手</a></p>
<h3 id="AutomaticBackup">アプリの自動バックアップ</h3>
<p>
Android M では、アプリの設定の自動バックアップが導入されました。このサンプルでは、設定のバックアップを管理するためにアプリにフィルタリング ルールを追加する方法を紹介しています。
</p>
<p><a href="https://github.com/googlesamples/android-AutoBackupForApps">GitHub でサンプルを入手</a></p>
<h3 id="CameraRaw">Camera 2 Raw</h3>
<p>
このサンプルでは、<code>Camera2</code> API を使用して、RAW カメラバッファをキャプチャし、<code>DNG</code> ファイルとして保存する方法を紹介しています。
</p>
<p><a href="https://github.com/googlesamples/android-Camera2Raw">GitHub でサンプルを入手</a></p>
<h3 id="ActiveNotification">アクティブ通知</h3>
<p>
このサンプルでは、その時点でアプリに表示されている通知の数を <a href="{@docRoot}reference/android/app/NotificationManager.html"><code>NotificationManager</code></a> を使って調べる方法を紹介しています。
</p>
<p><a href="https://github.com/googlesamples/android-ActiveNotifications">GitHub でサンプルを入手</a></p>

View File

@@ -0,0 +1,207 @@
page.title=Preview SDK のセットアップ
page.image=images/cards/card-set-up_16-9_2x.png
@jd:body
<div id="qv-wrapper">
<div id="qv">
<h2>本書の内容</h2>
<ol>
<li><a href="#get-as13">Android Studio 1.3 を入手する</a></li>
<li><a href="#get-sdk">Preview SDK を入手する</a></li>
<li><a href="#create-update">プロジェクトを作成または更新する</a></li>
<li><a href="#setup-test">テスト用にセットアップする</a></li>
</ol>
</div>
</div>
<p>M Developer Preview SDK は、Android SDK Manager から入手できます。このドキュメントは、Android SDK Manager の使用方法やプロジェクトの作成方法などの Android アプリ開発についての知識をお持ちの方を対象にしています。
Android アプリを初めて開発する場合は、まず <a href="{@docRoot}training/basics/firstapp/index.html">Building Your First App</a> のトレーニング レッスンをご覧ください。</a>
</p>
<h2 id="get-as13">Android Studio 1.3 を入手する</h2>
<p>Developer Preview は、現在プレビュー段階にある Android Studio 1.3 に最適化されています。
Preview SDK をご使用になる場合は、Android Studio 1.3 のプレビュー版をインストールすることをお勧めします。
</p>
<p class="caution"><strong>注意:</strong> Android Studio 1.3 の Canary プレビューは、現在も開発中です。
メインの開発用マシンを Developer Preview のテストに使用する場合、テスト用に 2 つ目の Android Studio をインストールできます。
</p>
<p>Android Studio 1.3 プレビューをインストールするには: </p>
<ol>
<li><a href="{@docRoot}tools/studio/index.html">Android Studio</a> をダウンロードして起動します。
</li>
<li>[<strong>Settings</strong>] ウィンドウを開きますWindows では、 <strong>[File] &gt; [Settings]</strong> を選択すると開くことができます)。
<strong>[Appearance &amp; Behavior] &gt; [System Settings] &gt; [Updates]</strong> を選択します。
<p class="aside">OSX では、Android Studio の [<strong>Preferences</strong>] ウィンドウで、[<strong>Appearance &amp; Behavior</strong>] パネルを見つけることができます。
</p>
</li>
<li> [<strong>Updates</strong>] パネルで、<strong>[Automatically check updates for:] に
[Canary Channel]</strong> を選択します。
</li>
<li>[<strong>Updates</strong>] パネルで、[<strong>Check Now</strong>] を選択して最新の Canary ビルドの有無を確認します。
メッセージが表示されたら、最新の Canary ビルドをダウンロードしてインストールします。
</li>
</ol>
<h2 id="get-sdk">Preview SDK を入手する</h2>
<p>開発環境に Preview SDK コンポーネントを追加するには: </p>
<ol>
<li>Android Studio 1.3 プレビューを起動します。
</li>
<li>[<strong>Settings</strong>] ウィンドウを開きますWindows では、 <strong>[File] &gt; [Settings]</strong> を選択すると開くことができます)。
<strong>[Appearance &amp; Behavior] &gt; [System Settings] &gt; [Updates]</strong> を選択します。
<p class="aside">OSX では、Android Studio の [<strong>Preferences</strong>] ウィンドウで、[<strong>Appearance &amp; Behavior</strong>] パネルを見つけることができます。
</p>
</li>
<li>[<strong>Updates</strong>] パネルで、<strong>[Automatically check updates for:] に
[Canary Channel]</strong> を、<strong>[Automatically check updates for Android SDK:] に
[Preview Channel]</strong> を選択します。
</li>
<li>[<strong>Android SDK Manager</strong>] を起動します。Android Studio 1.3 では、SDK Manager はスタンドアロン アプリケーションではなくなり Android Studio に統合されました。)
</li>
<li>[<strong>Platforms</strong>] セクションで、[<strong>Android MNC Preview</strong>] を選択します。
</li>
<li>[<strong>Tools</strong>] セクションで、最新の Android [<strong>SDK Tools</strong>]、[<strong>Platform-tools</strong>]、[<strong>Build-tools</strong>] を選択します。
</li>
<li>[<strong>Install packages</strong>] をクリックし、すべてのパッケージの使用許諾契約に同意します。
</li>
<li>[<strong>Settings</strong>] ウィンドウを開き、<strong>[Appearance &amp; Behavior] &gt; [System Settings] &gt; [Android SDK]</strong> を選択し、M Developer Preview がインストールされていることを確認します。
</li>
<li>[<strong>Android SDK</strong>] パネルで、[<strong>SDK Platforms</strong>] を選択します。
[<strong>Android MNC Preview</strong>] が [<em>Installed</em>] と表示されているはずです。
また、[<strong>SDK Tools</strong>] タブを開き、最新のツールがインストールされていることを確認します。
</li>
</ol>
<p>上記の手順を完了すると、開発環境でプレビュー コンポーネントを利用できるようになります。
</p>
<h2 id="create-update">プロジェクトを作成または更新する</h2>
<p>
プレビュー API を使用するには、プレビュー コンポーネントを使用するために開発プロジェクトを作成または更新する必要があります。
</p>
<h3 id="create">新しいプロジェクトを作成する</h3>
<p>
Preview SDK を使用してプロジェクトを作成するときには、Android Studio を使用することをお勧めします。<a href="{@docRoot}sdk/installing/create-project.html">Creating a Project</a> に記載されている手順に従い、プロジェクト ウィザードで [<em>Form Factors</em>] 画面が表示されるまで操作を進めます。
次に、以下の手順に従い、Preview SDK 用に構成されたプロジェクトを作成します。
</p>
<ul>
<li>[<strong>Phone and Tablet</strong>] をチェックします。</li>
<li>[<strong>Minimum SDK</strong>] で、[<strong>MNC: Android M (Preview)</strong>] を選択します。
</li>
</ul>
<h3 id="update">既存のプロジェクトを更新する</h3>
<p>
既存のプロジェクトを使用する場合は、プロジェクト構成を変更してプレビュー API を有効にする必要があります。開発環境で、モジュールの <code>build.gradle</code> ファイルを開き、次のように値を設定します。
</p>
<ul>
<li><code>compileSdkVersion</code> に <code>'android-MNC'</code> を設定します。</li>
<li><code>minSdkVersion</code> に <code>'MNC'</code> を設定します。</li>
<li><code>targetSdkVersion</code> に <code>'MNC'</code> を設定します。</li>
</ul>
<h2 id="setup-test">テスト用にセットアップする</h2>
<p>
Preview SDK でアプリをテストするには、プレビュー版のプラットフォームを使用して構成した端末または仮想端末が必要です。
互換端末をお持ちの場合、テスト用にプレビュー プラットフォームをインストールできます。
互換端末をお持ちでない場合は、テスト用に仮想端末を構成できます。
</p>
<h3 id="setup-device">物理端末をセットアップする</h3>
<p>
Nexus 5、Nexus 6、Nexus 9、Android TV をお持ちの場合は、アプリのテスト用にこれらの端末にプレビュー システム イメージをインストールできます。Android Virtual Device Manager ツールを使用すると、Android Studio 内から仮想端末をプレビュー版のプラットフォームでセットアップできます。
</p>
<p class="caution">
<strong>重要:</strong> 端末にプレビュー イメージをインストールすると、<em>端末からすべてのデータが削除されます</em>。そのため、プレビュー イメージをインストールする前にすべてのデータをバックアップする必要があります。
</p>
<h3 id="setupAVD">仮想端末をセットアップする</h3>
<p>
Android Virtual Device Manager ツールを使用すると、Android Studio 内からプレビュー版のプラットフォームで仮想端末をセットアップできます。
</p>
<p>AVD マネージャーで AVD を作成するには: </p>
<ol>
<li><a href="{@docRoot}preview/setup-sdk.html">Preview SDK のセットアップ</a>の説明に従って、開発環境に Preview SDK をインストールします。
</li>
<li><a href="{@docRoot}tools/devices/managing-avds.html">Managing AVDs with AVD Manager</a> の手順に従います。
以下の設定を使用します。
<ul>
<li><strong>端末:</strong> Nexus 5、Nexus 6、Nexus 9、Android TV</li>
<li><strong>対象:</strong>
Android M (Preview) - API Level M</li>
<li><strong>ABI:</strong> x86</li>
</ul>
</li>
</ol>
<p>
テスト用の仮想端末の作成についての詳細は、<a href="{@docRoot}tools/devices/index.html">Managing Virtual Devices</a> をご覧ください。
</p>

View File

@@ -0,0 +1,67 @@
page.title=サポート
page.image=images/cards/card-support_16-9_2x.png
@jd:body
<p>
M Developer Preview についてのバグの報告やフィードバックがありましたら Issue Tracker で<a href="https://code.google.com/p/android-developer-preview/">Issue を作成</a>してください。
</p>
<p>
また、<a href="http://g.co/dev/AndroidMDevPreview">M Developer Preview Google+ コミュニティ</a>にご参加いただくと、開発上の問題についての相談やディスカッションを行うことができます。
</p>
<h2 id="release-notes">リリースノート</h2>
<!--
<div class="toggle-content opened">
<p><a href="#" onclick="return toggleContent(this)">
<img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-content-img"
alt=""/>M Developer Preview, Revision 2</a> <em>(Month 2015)</em>
</p>
<div class="toggle-content-toggleme">
<dl>
<dt>Fix Category 1</dt>
<dd>
<ul>
<li>Fixed issue X.</li>
<li>Fixed issue Y.</li>
<li>Fixed issue Z.</li>
</ul>
</dd>
<dt>Fix Category 2</dt>
<dd>
<ul>
<li>Fixed issue X.</li>
<li>Fixed issue Y.</li>
<li>Fixed issue Z.</li>
</ul>
</dd>
</dl>
</div>
</div>
-->
<div class="toggle-content opened">
<p><a href="#" onclick="return toggleContent(this)"><img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-content-img" alt="" />M Developer Preview, Revision 1</a> <em>2015 年 5 月)</em>
</p>
<div class="toggle-content-toggleme">
<dl>
<dt>イニシャル リリース。</dt>
</dl>
</div>
</div>

View File

@@ -0,0 +1,187 @@
page.title=テストガイド
page.image=images/cards/card-build_16x9_2x.png
page.keywords=プレビュー リソース,Android M,テスト,パーミッション
@jd:body
<div id="qv-wrapper">
<div id="qv">
<h2>本書の内容</h2>
<ol>
<li><a href="#runtime-permissions">パーミッションをテストする</a></li>
<li><a href="#doze-standby">Doze と App Standby をテストする</a></li>
<li><a href="#ids">自動バックアップと端末識別子</a></li>
</ol>
</div>
</div>
<p>
Android M Developer Preview を利用すると、次期バージョンのプラットフォームでアプリが動作するか確認できます。
Android M Developer Preview には、<a href="{@docRoot}preview/api-overview.html">API の概要</a>と<a href="{@docRoot}preview/behavior-changes.html">動作の変更点</a>に記載されているように、アプリに影響を与える可能性のある多くの API と動作の変更が含まれています。
Android M Developer Preview でアプリをテストする時には、アプリの良好な使用感を確保するために、システムのいくつかの変更点に特に注意する必要があります。
</p>
<p>
このガイドでは、アプリで Android M Developer Preview の機能の何をどのようにテストすればよいか説明します。以下の機能は、アプリの動作に大きな影響を与える可能性があるので、優先してテストする必要があります。
</p>
<ul>
<li><a href="#runtime-permissions">パーミッション</a>
</li>
<li><a href="#doze-standby">Doze と App Standby</a>
</li>
<li><a href="#ids">自動バックアップと端末識別子</a></li>
</ul>
<p>
テスト用のプレビュー システム イメージを使用した端末または仮想端末のセットアップ方法の詳細については、<a href="{@docRoot}preview/setup-sdk.html">Preview SDK のセットアップ</a>をご覧ください。
</p>
<h2 id="runtime-permissions">パーミッションをテストする</h2>
<p>
<a href="{@docRoot}preview/features/runtime-permissions.html">パーミッション</a> モデルの変更により、ユーザーがアプリにパーミッションを付与する方法が変わりました。
アプリでは、インストール時にすべてのパーミッションを要求するのではなく、実行時に個々のパーミッションをユーザーに要求する必要があります。
これにより、ユーザーは、各アプリのアクティビティをより細かくコントロールできるようになるだけではなく、アプリが各パーミッションを要求する理由をこれまでよりもよく理解できるようになります。
ユーザーは、いつでもアプリに個別にパーミッションを付与したり、付与したパーミッションを個別に取り消したりできます。
この機能は、アプリの動作に大きな影響を与える可能性があり、アプリの一部の機能が動作しなくなったり、限定された機能しか使えなくなったりする可能性もあります。
</p>
<p class="caution">
この変更は、アプリがこの新しいバージョンを対象にしているかどうかにかかわらず、この新しいプラットフォーム上で実行されるすべてのアプリに影響します。
このプラットフォームはレガシーアプリに限定的な互換動作を提供しますが、公式版のプラットフォームのリリースに合わせてアップデート版のアプリを公開できるように、新しいパーミッション モデルに対応させるためのアプリの移行を今から計画することを強くお勧めします。
</p>
<h3 id="permission-test-tips">テストのヒント</h3>
<p>
以下のテストのヒントを活用して、アプリでの新しいパーミッション動作のテストを計画し、実行してください。
</p>
<ul>
<li>アプリの現在のパーミッションと関連するコードパスを確認します。</li>
<li>パーミッションで保護されているサービスとデータ間のユーザーフローをテストします。</li>
<li>付与されたパーミッションと取り消されたパーミッションのさまざまな組み合わせをテストします。</li>
<li>{@code adb} ツールを使用して、コマンドラインからパーミッションを管理します。
<ul>
<li>パーミッションとステータスをグループ化して表示します。
<pre>adb shell pm list permissions -d -g</pre>
</li>
<li>以下の構文を使用して 1 つまたは複数のパーミッションを付与または取り消します。<br>
<pre>adb shell pm [grant|revoke] &lt;permission.name&gt; ...</pre>
</li>
</ul>
</li>
<li>アプリでパーミッションを使用しているサービスを分析します。</li>
</ul>
<h3 id="permission-test-strategy">テスト方針</h3>
<p>
このパーミッションの変化は、アプリの構造と設計、ユーザーが体験する使用感とフローに影響を与えます。
アプリの現在のパーミッション利用の状況を調査し、新しいフローの検討を開始する必要があります。
このプラットフォームの公式リリースは互換動作を提供しますが、互換動作に頼ることなくアプリのアップデートを計画することを強くお勧めします。
</p>
<p>
まずアプリが実際に必要とし使用しているパーミッションを特定してから、パーミッションで保護されたサービスを使用している各コードパスを探してください。
これには、新しいプラットフォーム上でのテストと、コードの解析が必要です。
テストでは、アプリの {@code targetSdkVersion} をこのプレビュー版に変えて、実行時パーミッションのオプトインに重点的にテストする必要があります。
詳細については、<a href="{@docRoot}preview/setup-sdk.html#">Preview SDK のセットアップ</a>をご覧ください。
</p>
<p>
パーミッションの取り消しと追加のさまざまな組み合わせをテストし、パーミッションに依存するユーザーフローを確認します。
パーミッションへの依存性が明白または論理的ではない箇所では、依存性を取り除くため、またはパーミッションが必要な理由を明白にするために、フローのリファクタリングまたはコンパートメント化を検討する必要があります。
</p>
<p>
実行時パーミッションの動作、テスト、ベスト プラクティスについては、Developer Preview ページの<a href="{@docRoot}preview/features/runtime-permissions.html">パーミッション</a>をご覧ください。
</p>
<h2 id="doze-standby">Doze と App Standby をテストする</h2>
<p>
省電力機能である Doze と App Standby により、端末がアイドル状態のときやそのアプリにフォーカスがないときに、アプリが実行できるバックグラウンド処理の量が制限されます。
システムによってアプリに加えられる可能性のある制限には、ネットワーク アクセスの制限や停止、バックグラウンド タスクの停止、通知の停止、ウェイク リクエストの無視、アラームなどがあります。
これらの省電力のための最適化が行われた状態で確実にアプリが適切に動作するように、これらの省電力状態をシミュレートしてアプリをテストする必要があります。
</p>
<h4 id="doze">アプリで Doze をテストする</h4>
<p>アプリで Doze をテストするには: </p>
<ol>
<li>M Preview のシステム イメージを使用して、ハードウェア端末または仮想端末を構成します。</li>
<li>端末を開発マシンに接続し、アプリをインストールします。</li>
<li>アプリを実行し、アクティブ状態のままにします。</li>
<li>以下のコマンドを実行して、端末の Doze モードへの移行をシミュレートします。
<pre>
$ adb shell dumpsys battery unplug
$ adb shell dumpsys deviceidle step
$ adb shell dumpsys deviceidle -h
</pre>
</li>
<li>端末がアクティブ状態に戻ったときのアプリの動作を観察します。端末が Doze モードから抜けるときに、アプリがスムーズに復帰することを確認します。
</li>
</ol>
<h4 id="standby">アプリで App Standby をテストする</h4>
<p>アプリで App Standby モードをテストするには: </p>
<ol>
<li>M Preview のシステム イメージを使用して、ハードウェア端末または仮想端末を構成します。</li>
<li>端末を開発マシンに接続し、アプリをインストールします。</li>
<li>アプリを実行し、アクティブ状態のままにします。</li>
<li>以下のコマンドを実行して、アプリのスタンバイ モードへの移行をシミュレートします。
<pre>
$ adb shell am broadcast -a android.os.action.DISCHARGING
$ adb shell am set-idle &lt;packageName&gt; true
</pre>
</li>
<li>以下のコマンドを使用して、アプリのウェイクをシミュレートします。
<pre>$ adb shell am set-idle &lt;packageName&gt; false</pre>
</li>
<li>アプリがウェイク状態に戻ったときのアプリの動作を観察します。アプリがスタンバイ モードからスムーズに復帰することを確認します。
特に、アプリの通知とバックグラウンド ジョブが想定通りの動作を続けているかを確認する必要があります。
</li>
</ol>
<h2 id="ids">アプリの自動バックアップと端末固有識別子</h2>
<p>アプリが、Google Cloud Messaging の登録 ID などの何らかの端末固有の識別子を内部ストレージに保持している場合、<a href="{@docRoot}preview/backup/index.html">アプリの自動バックアップ</a>の説明に従って、そのストレージのロケーションを自動バックアップの対象から除外してください。
</p>

View File

@@ -0,0 +1,656 @@
page.title=表示パフォーマンスのテスト
page.image=images/cards/card-test-performance_2x.png
page.keywords=パフォーマンス,fps,ツール
@jd:body
<div id="qv-wrapper">
<div id="qv">
<h2>本書の内容</h2>
<ol>
<li><a href="#measure">UI のパフォーマンスを測定する</a>
<ul>
<li><a href="#aggregate">フレームのデータを集計する</a></li>
<li><a href="#timing-info">正確なフレーム タイミング情報</a></li>
<li><a href="#timing-dump">簡易フレーム タイミング ダンプ</a></li>
<li><a href="#collection-window">データ収集用のウィンドウを制御する</a></li>
<li><a href="#diagnose">パフォーマンスの低下を診断する</a></li>
<li><a href="#resources">追加リソース</a></li>
</ul>
</li>
<li><a href="#automate">UI パフォーマンス テストを自動化する</a>
<ul>
<li><a href="#ui-tests">UI テストをセットアップする</a></li>
<li><a href="#automated-tests">自動化された UI テストをセットアップする</a></li>
<li><a href="#triage">見つけた問題を選別し解決する</a></li>
</ul>
</li>
</ol>
</div>
</div>
<p>
ユーザー インターフェースUIのパフォーマンスをテストすることで、アプリが機能面での要件に合うだけでなく、ユーザーがアプリをスムーズに操作でき、毎秒安定して 60 フレーム(<a href="https://www.youtube.com/watch?v=CaMTIgxCSqU&amp;index=25&amp;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE">why 60fps?</a>)で、フレームのドロップや遅延なしで、言い換えれば<em>ジャンク</em>なしで実行されるようにします。
このドキュメントでは、UI のパフォーマンスを測定することができるツールについて説明し、UI パフォーマンスの測定値をテストで活用する方法を提示します。
</p>
<h2 id="measure">UI のパフォーマンスを測定する</h2>
<p>
パフォーマンスを改善するには、まずシステムのパフォーマンスを測定し、次にパイプラインのさまざまな箇所で発生している問題を診断し識別する必要があります。
</p>
<p>
<em><a href="https://source.android.com/devices/tech/debug/dumpsys.html">dumpsys</a></em> は端末上で動作し、システム サービスの状態についての情報をダンプする Android ツールです。
<em>gfxinfo</em> コマンドを dumpsys に渡すと、記録中に実行されたアニメーションのフレームに関連するパフォーマンス情報が logcat に出力されます。
</p>
<pre>
&gt; adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt;
</pre>
<p>
このコマンドは、フレーム タイミング データの複数の異なるバリアントを生成することがあります。
</p>
<h3 id="aggregate">フレームのデータを集計する</h3>
<p>
M Preview では、このコマンドは、プロセスの生存期間全体を通して収集したフレームのデータの集計結果を logcat に出力します。
次に例を示します。
</p>
<pre class="noprettyprint">
Stats since: 752958278148ns
Total frames rendered: 82189
Janky frames: 35335 (42.99%)
90th percentile: 34ms
95th percentile: 42ms
99th percentile: 69ms
Number Missed Vsync: 4706
Number High input latency: 142
Number Slow UI thread: 17270
Number Slow bitmap uploads: 1542
Number Slow draw: 23342
</pre>
<p>
これらのデータは、アプリのレンダリングのパフォーマンスと多くのフレームの全体での安定性を大まかに示します。
</p>
<h3 id="timing-info">正確なフレーム タイミング情報</h3>
<p>
M Preview では、gfxinfo のための新しいコマンド、<em>framestats</em> が採用され、最新のフレームのフレーム タイミングのきわめて詳細な情報を提供します。そのため、より正確に問題を追跡しデバッグできるようになります。
</p>
<pre>
&gt;adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt; framestats
</pre>
<p>
このコマンドは、アプリによって生成された最新 120 フレームのフレーム タイミング情報を、ナ秒の精度を持つタイムスタンプを使用して出力します。以下は、adb dumpsys gfxinfo
&lt;PACKAGE_NAME&gt; framestats による未加工の出力例です。
</p>
<pre class="noprettyprint">
0,49762224585003,49762241251670,9223372036854775807,0,49762257627204,49762257646058,49762257969704,49762258002100,49762265541631,49762273951162,49762300914808,49762303675954,
0,49762445152142,49762445152142,9223372036854775807,0,49762446678818,49762446705589,49762447268818,49762447388037,49762453551527,49762457134131,49762474889027,49762476150120,
0,49762462118845,49762462118845,9223372036854775807,0,49762462595381,49762462619287,49762462919964,49762462968454,49762476194547,49762476483454,49762480214964,49762480911527,
0,49762479085548,49762479085548,9223372036854775807,0,49762480066370,49762480099339,49762481013089,49762481085850,49762482232152,49762482478350,49762485657620,49762486116683,
</pre>
<p>
この出力の各行が、アプリによって生成される 1 つのフレームを示します。各ラインは、フレームを生成するパイプラインの各段階で費やされた時間を出力する固定された数の列を持ちます。
次のセクションでは、各列が何を示しているかも含めて、フォーマットを詳細に説明します。
</p>
<h4 id="fs-data-format">Framestats データ形式</h4>
<p>
データは CSV 形式で出力されるため、お好みのスプレッドシート ツールに簡単に貼り付けたり、スクリプトで簡単に集計して解析したりできます。
以下のリストは、出力データ列のフォーマットを説明しています。
すべてのタイムスタンプはナノ秒単位で出力されます。
</p>
<ul>
<li>FLAGS
<ul>
<li>FLAGS 列が「0」の行には、FRAME_COMPLETED 列から INTENDED_VSYNC 列を引いて計算されたフレームの総処理時間が示されます。
</li>
<li>FLAGS 列が「0」以外の場合、そのフレームは通常のパフォーマンスからの外れ値であると定められているのでその行は無視する必要があります。この場合、レイアウトと描画に 16 ミリ秒よりも長くかかることが想定されています。
これは、以下の原因で起きることがあります。
<ul>
<li>ウィンドウのレイアウトが変更された(アプリケーションの最初のフレームの場合や画面が回転された後など)。
</li>
<li>フレームが省略された。この場合、いくつかの値には不適切なタイムスタンプが含まれます。
たとえば 60 fps よりも速く実行されている場合や、画面上にダーティで終わったものが何もない場合など、フレームは省略することができます。これは必ずしもアプリに問題がある兆候ではありません。
</li>
</ul>
</li>
</ul>
</li>
<li>INTENDED_VSYNC
<ul>
<li>フレームの意図された開始ポイント。この値が VSYNC と異なる場合、vsync 信号にすぐに応答することを阻止する動作が UI スレッド上で発生していたことを意味します。
</li>
</ul>
</li>
<li>VSYNC
<ul>
<li>すべての vsync リスナーとフレームの描画Choreographer フレーム コールバック、アニメーション、View.getDrawingTime() など)で使用された時間の値。
</li>
<li>VSYNC と VSYNC のアプリケーションへの影響の詳細については、<a href="https://www.youtube.com/watch?v=1iaHxmfZGGc&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=23">Understanding VSYNC</a> のビデオをご覧ください。
</li>
</ul>
</li>
<li>OLDEST_INPUT_EVENT
<ul>
<li>入力キューの最も古い入力イベントのタイムスタンプ。フレームの入力イベントが存在しない場合は、Long.MAX_VALUE。
</li>
<li>この値は、主にプラットフォームの動作のパフォーマンスを示すことを意図しており、アプリのデベロッパーが活用できる場面は限定されます。
</li>
</ul>
</li>
<li>NEWEST_INPUT_EVENT
<ul>
<li>入力キューの最も新しい入力イベントのタイムスタンプ。フレームの入力イベントが存在しない場合は、0。
</li>
<li>この値は、主にプラットフォームの動作のパフォーマンスを示すことを意図しており、アプリのデベロッパーが活用できる場面は限定されます。
</li>
<li>ただし、FRAME_COMPLETED から NEWEST_INPUT_EVENT を引いた値を確認することによって、そのアプリが増やす待ち時間がどれくらいか大まかに知ることができます。
</li>
</ul>
</li>
<li>HANDLE_INPUT_START
<ul>
<li>入力イベントがアプリケーションにディスパッチされるときのタイムスタンプ。
</li>
<li>この値と ANIMATION_START との間の時間を確認することで、アプリケーションが入力イベントを処理するために費やした時間を測定することができます。
</li>
<li>この値が大きい(&gt; 2 ミリ秒の場合、View.onTouchEvent() などの入力イベントを処理するためにアプリが長い時間を費やしていることを意味します。これは、この動作の最適化または別のスレッドへの移行が必要なことを示している場合があります。
新しいアクティビティやそれに類するものを起動するクリック イベントなどの一部のシナリオでは、この値が大きいことは想定済みであり許容範囲内です。
</li>
</ul>
</li>
<li>ANIMATION_START
<ul>
<li>Choreographer を使用して登録されたアニメーションが実行されたときのタイムスタンプ。
</li>
<li>この値と PERFORM_TRANVERSALS_START の間の時間を確認することで、実行中のすべてのアニメーターObjectAnimator、ViewPropertyAnimator、共通の遷移となっている Transitionsを評価するのにかかった時間を確認することができます。
</li>
<li>この値が大きい(&gt; 2 ミリ秒)の場合、アプリがカスタム アニメーターを記述していないか、また ObjectAnimators がアニメーション化しているのがどの項目かを確認して、それらがアニメーションに適しているかどうか確かめてください。
</li>
<li>Choreographer についての詳細は、<a href="https://developers.google.com/events/io/sessions/325418001">For Butter or Worse</a> のビデオをご覧ください。
</li>
</ul>
</li>
<li>PERFORM_TRAVERSALS_START
<ul>
<li>この値から DRAW_START を引くと、レイアウトと測定のフェーズが完了するまでにかかる時間を知ることができます(スクロールまたはアニメーションの間は、この時間がゼロに近いことが望ましいことにご注意ください)。
</li>
<li>レンダリング パイプラインのレイアウトと測定のフェーズについての詳細は、<a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=27">Invalidations, Layouts and Performance</a> のビデオをご覧ください。
</li>
</ul>
</li>
<li>DRAW_START
<ul>
<li>performTraversals の描画のフェーズが開始された時間。これは、無効化されているビューのディスプレイ リストを記録する開始ポイントです。
</li>
<li>この値と SYNC_START の間の時間は、ツリー内のすべての無効化されているビュー上で View.draw() を呼び出すのにかかった時間を示します。
</li>
<li>描画モデルに関する詳細は、<a href="{@docRoot}guide/topics/graphics/hardware-accel.html#hardware-model">Hardware Acceleration</a> または <a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=27">Invalidations, Layouts and Performance</a> のビデオをご覧ください。
</li>
</ul>
</li>
<li>SYNC_START
<ul>
<li>描画の同期フェーズが開始された時間。
</li>
<li>この値と ISSUE_DRAW_COMMANDS_START の間の時間が非常に大きい場合(&gt; 0.4 ミリ秒またはこれに近い値、通常は、GPU にアップロードする必要がある多くの新しい Bitmaps が描画されたこと意味します。
</li>
<li>同期フェーズについての詳細は、<a href="https://www.youtube.com/watch?v=VzYkVL1n4M8&amp;index=24&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu">Profile GPU Rendering</a> のビデオをご覧ください。
</li>
</ul>
</li>
<li>ISSUE_DRAW_COMMANDS_START
<ul>
<li>ハードウェア レンダラーが、GPU への描画コマンドの発行を開始した時間。
</li>
<li>この値と FRAME_COMPLETED の間の時間により、そのアプリがどれくらいの量の GPU 作業を生じさせているのか大まかに知ることができます。
オーバードローが多すぎたりまたはレンダリング効果が不十分だったりという問題がある場合は、この時間にあらわれます。
</li>
</ul>
</li>
<li>SWAP_BUFFERS
<ul>
<li>eglSwapBuffers が呼び出された時間。プラットフォーム作業関連以外では、あまり重要ではない値です。
</li>
</ul>
</li>
<li>FRAME_COMPLETED
<ul>
<li>すべてが完了した時間です。そのフレームを処理するのにかかった時間の合計は、FRAME_COMPLETED から INTENDED_VSYNC を引くと計算できます。
</li>
</ul>
</li>
</ul>
<p>
このデータは、別の方法でも使用できます。たとえば、さまざまな遅延バケットでのフレームの処理にかかった時間FRAME_COMPLETED - INTENDED_VSYNCの分布を示す下記のヒストグラムは、単純ですが役に立ちます。
このグラフを一目見るだけで、大部分のフレームは 16 ミリ秒の限界線(赤色の線)を大きく下回った良好な状態であるけれども、いくつかのフレームが限界線を著しく上回っていることがわかります。
ヒストグラムで時間の経過に伴う変化を確認することで、大規模な変化が起きているのか、新しい外れ値が作成されているのか知ることができます。
また、データに含まれる多くのタイムスタンプに基づいて、入力待ち時間、レイアウトにかかった時間、その他のこれに類する興味を引く指標をグラフにできます。
</p>
<img src="{@docRoot}preview/images/perf-test-framestats.png">
<h3 id="timing-dump">簡易フレーム タイミング ダンプ</h3>
<p>
[開発者向けオプション] で [<strong>GPUレンダリングのプロフィール作成</strong>] を [<strong>adb shell dumpsys gfxinfo</strong>] に設定すると、<code>adb shell dumpsys gfxinfo</code> コマンドにより、最新の 120 フレームのタイミング情報が、いくつかの異なるカテゴリに分かれて、タブ区切りで出力されます。
このデータは、描画パイプラインのどの部分の処理が遅いのかを大まかに知るのに役に立ちます。
</p>
<p>
上記の <a href="#fs-data-format">framestats</a> と同様に、お好みのスプレッドシート ツールに簡単に貼り付けたり、スクリプトで簡単に集計し解析したりできます。
以下のグラフは、アプリによって生成された多くのフレームが時間を費やした箇所の内訳を示しています。
</p>
<img src="{@docRoot}preview/images/perf-test-frame-latency.png">
<p>
このグラフは、gfxinfo を実行し、出力結果をコピーし、スプレッドシート アプリケーションに貼り付け、データを積み上げ棒グラフにしたものです。
</p>
<p>
各縦棒は、アニメーションの 1 フレームを示し、その高さはそのフレームを処理するのにかかるミリ秒の数を示しています。
また、縦棒の色分けされた各部分は、レンダリング パイプラインの各段階を示しています。これにより、ボトルネックを生んでいる可能性があるのはアプリケーションのどの箇所か確認できます。
レンダリング パイプラインとその最適化方法に関する詳細は、<a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;index=27&amp;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE">Invalidations, Layouts and Performance</a> のビデオをご覧ください。
</p>
<h3 id="collection-window">データ収集用のウィンドウを制御する</h3>
<p>
Framestats と簡易フレーム タイミングの両方とも、非常に短いウィンドウを通じて、約 2 秒相当のレンダリングについてデータを収集しています。
たとえば、収集するデータを特定のアニメーションだけに限定したい場合、このタイミング データ収集用ウィンドウを正確にコントロールするには、すべてのカウンタをリセットし収集したデータを集計します。
</p>
<pre>
&gt;adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt; reset
</pre>
<p>
これは、ダンプ コマンドとあわせて使用することもでき、フレームの 2 秒未満のウィンドウを続けてキャプチャしながら、通常の流れで収集しリセットできます。
</p>
<h3 id="diagnose">パフォーマンスの低下を診断する</h3>
<p>
パフォーマンスの低下を見つけることは、問題を見つけだし、アプリケーションの状態を良好に維持するための最初のステップです。
ただし、dumpsys は、ただ問題の存在とその相対的な深刻度を明らかにするだけです。
さらに、パフォーマンスの問題の具体的な原因を突き止め、解決するための適切な方法を見つける必要があります。
それには、<a href="{@docRoot}tools/help/systrace.html">systrace</a> ツールを利用することをお勧めします。
</p>
<h3 id="resources">追加リソース</h3>
<p>
Android のレンダリング パイプラインの仕組み、一般的な問題、それらの問題の修正方法についての詳細は、以下の資料が役に立ちます。
</p>
<ul>
<li>Rendering Performance 101
</li>
<li>Why 60fps?
</li>
<li>Android UI and the GPU
</li>
<li>Invalidations Layouts and performance
</li>
<li>Analyzing UI Performance with Systrace
</li>
</ul>
<h2 id="automate">UI パフォーマンス テストを自動化する</h2>
<p>
UI パフォーマンスのテスト手法の 1 つに、対象のアプリ上で一連のユーザー操作を人間のテスターに実行してもらい、目視でジャンクを探すかツール主体の手法を使用して長い時間を費やしてジャンクを見つけるかのいずれかの方法をとるというものがあります。
ただし、この人の力による方法は危険を伴います。フレームレートの変化に気付く能力は、人によって大きく異なります。また、この方法は、多くの時間が必要で単調で退屈なものであり、ミスも起こりがちです。
</p>
<p>
より効率的な手法は、自動化された UI テストにより主要なパフォーマンス指標のログを取って解析することです。
Android M Developer Preview には、アプリケーションのアニメーションに対するジャンクの量と深刻度を簡単に確認することができ、現在のパフォーマンスを確認し将来のパフォーマンス目標を実現するための適切なプロセスを構築するために使用できる新しいログ記録機能が含まれています。
</p>
<p>
このドキュメントでは、この新しいログ機能によるデータを使用してパフォーマンス テストを自動化するための手法について紹介します。
</p>
<p>
この手法には、鍵となるアクションが 2 つあります。何をどのようにテストするかということを明確にすることと、自動化されたテスト環境をセットアップし管理することです。
</p>
<h3 id="ui-tests">UI テストをセットアップする</h3>
<p>
自動化されたテストを実行する前に、テストの仕様や必要になる可能性があるものを適切に把握するために、いくつかの大まかな決定をしておくことが重要です。
</p>
<h4>
テストする重要なアニメーションやフローを明確にする
</h4>
<p>
パフォーマンスの低さがユーザーの目に最も多く触れるのは、アニメーションのスムーズさが失われる場合です。
そのため、どのタイプの UI アクションをテストするか決めるときに、ユーザーが最もよく見る重要なアニメーションまたはユーザーの使用感にとって最も重要なアニメーションにフォーカスすると効果があります。
以下にいくつかの一般的なシナリオをご紹介します。
</p>
<ul>
<li>プライマリ ListView または RecyclerView のスクロール
</li>
<li>非同期処理待ちサイクル中のアニメーション
</li>
<li>ビットマップを読み込んだり操作したりするアニメーション
</li>
<li>アルファブレンドを含むアニメーション
</li>
<li>キャンバスを使用して描画するカスタムビュー
</li>
</ul>
<p>
チームのエンジニア、デザイナー、プロダクト マネージャーと連携して、テスト範囲のこれらの重要な製品アニメーションの優先順位を決めてください。
</p>
<h4>
将来の目標を決め、実現を目指す
</h4>
<p>
具体的なパフォーマンス目標を明確にし、その目標に合わせてテストを作成しデータを収集することが重要な場合もあります。
次に例を示します。
</p>
<ul>
<li>詳細を知るために、初めて UI パフォーマンスの追跡を開始したいだけですか。
</li>
<li>将来発生する可能性のあるパフォーマンスの低下を防止したいですか。
</li>
<li>現在のフレームのスムーズ度合いは 90% で、今四半期中に 98 % にしたいと考えていますか。
</li>
<li>現在のフレームのスムーズ度合い 98% を低下させたくないと考えていますか。
</li>
<li>ローエンド端末でのパフォーマンスを改善することが目標ですか。
</li>
</ul>
<p>
上記のすべての場合で、複数のバージョンのアプリケーションでのパフォーマンスを示すヒストリカル トラッキングが必要です。
</p>
<h4>
テストする端末を明確にする
</h4>
<p>
アプリケーションのパフォーマンスは、そのアプリケーションが実行される端末によって異なります。端末によっては、メモリが少なく、GPU のパワーが低く、CPU チップが遅いものもあります。
つまり、あるハードウェアでスムーズに実行できるアニメーションが別のハードウェアではうまく実行できなかったり、さらに悪い場合は、パイプラインの別の箇所にボトルネックを生んだりすることになります。
そのため、このようなハードウェアの違いに対処するために、最新のハイエンド端末と、ローエンド端末、タブレットなどの幅広い端末を選んでテストを実行する必要があります。
さまざまな CPU 性能、RAM、画面密度、サイズ等の端末を用意してください。
ハイエンド端末でうまくいったテストが、ローエンド端末では失敗することがあります。
</p>
<h4>
UI のテストの基本的なフレームワーク
</h4>
<p>
<a href="{@docRoot}training/testing/ui-testing/uiautomator-testing.html">UI Automator</a> や <a href="{@docRoot}training/testing/ui-testing/espresso-testing.html">Espresso</a> といったツールが、ユーザーがアプリケーション内を移動する動作を自動処理にするために用意されています。
これらは、端末でのユーザーの操作を模倣するシンプルなフレームワークです。
これらのフレームワークを使用するには、一連のユーザー アクションを実行する独自のスクリプトを作成して、端末上で実行します。
</p>
<p>
<code>dumpsys gfxinfo</code> と、これらの自動化されたテストを組み合わせることで、テストを実行できる再現可能なシステムを簡単に作成して、特定の条件でのパフォーマンス情報を測定できます。
</p>
<h3 id="automated-tests">自動化された UI テストをセットアップする</h3>
<p>
UI テストを実行する機能と、1 つのテストからデータを集めるためのパイプラインを用意したら、次の重要なステップは、複数の端末で、そのテストを複数回実行でき、開発チームの解析用にパフォーマンス データを集計できるフレームワークを用意することです。
</p>
<h4>
テスト自動化のためのフレームワーク
</h4>
<p>
UI テストのフレームワーク(<a href="{@docRoot}training/testing/ui-testing/uiautomator-testing.html">UI Automator</a> など)は、対象の端末やエミュレータ上で直接実行されます。
<em>dumpsys gfxinfo</em> によるパフォーマンス情報の収集はホストマシンによって行われますが、コマンドの送信は ADB を通じて行われます。
これらの別々に分かれている処理の自動化を橋渡しするために、<a href="{@docRoot}tools/help/monkeyrunner_concepts.html">MonkeyRunner</a> フレームワークは開発されました。このフレームワークは、ホストマシンで動作するスクリプティング システムで、接続されている端末にコマンドを発行できるとともに、それらの端末からデータを受け取ることもできます。
</p>
<p>
UI パフォーマンス テストの適切な自動化のためのスクリプトを作成することで、少なくとも、以下のタスクを MonkeyRunner を利用して実行することが可能になります。
</p>
<ul>
<li>対象の端末1 台または複数台)またはエミュレータに任意の APK をロードして起動する
</li>
<li>UI Automator UI テストを起動して、実行できるようにする
</li>
<li><em>dumpsys gfxinfo</em>を通じて情報を収集する。<em></em>
</li>
<li>情報を集計し、デベロッパーに役に立つ形で表示する。
</li>
</ul>
<h3 id="triage">見つけた問題を選別し解決する</h3>
<p>
問題のパターンまたはパフォーマンスの低下を確認したら、次に必要なことは問題の解決方法を見つけその方法を実行することです。
その自動化されたテスト フレームワークがフレームの正確なタイミングの内訳を保存している場合、最近行われたコードやレイアウトの疑わしい変更を調べたり(パフォーマンスが低下している場合)、手作業での調査に切り替えたときにシステムのどの箇所を解析するか絞り込んだりするのに役立ちます。
手作業での調査は、まず <a href="{@docRoot}tools/help/systrace.html">systrace</a> から開始することをお勧めします。systrace は、システムのレンダリング パイプラインのすべての段階、すべてのスレッド、コア、およびテスト担当者が定義したカスタム イベントについての正確なタイミング情報を表示します。
</p>
<h4>
一時的なタイミングを適切にプロファイリングする
</h4>
<p>
レンダリング パフォーマンスのタイミングを取得し測定することには困難を伴います。
これらの数値は、その本質として、決定的なものではなく、多くの場合、システムの状態、利用可能なメモリ量、サーマル・スロットリング、その地域に最後に日照があった時間などに応じて変動します。
つまり同じテストを 2 度実行した場合、近似するが完全に同じではない、わずかに異なる結果が出ることがあるということです。
</p>
<p>
この方法で適切にデータを集めプロファイリングするには、同じテストを複数回実行し、結果を平均値または中間値として集計します(以下では、この処理を「バッチ」と記載します)。これにより、テストのパフォーマンスの大まかな数字を、正確なタイミングを必要とすることなく取得できます。
</p>
<p>
バッチは、コード変更の合間にも、それらの変更がパフォーマンスにもたらす相対的な影響を確認するために使用できます。
変更前のバッチの平均フレームレートが変更後のバッチよりも大きい場合、通常、WRT パフォーマンスが全面的に改善したと言えます。
</p>
<p>
つまり、自動化された UI テストでは、この考え方を取り入れることと、テスト中に発生する可能性のある異常を把握しておくことが必要です。
たとえば、アプリケーションのパフォーマンスが、そのアプリケーションではなく何らかの端末の問題により突然低下した場合、通常時のタイミングを取得するためにバッチを再度実行した方がよいことがあります。
</p>
<p>
それでは、測定値を意味のあるものにするには、何回テストを実行すればよいでしょうか。少なくとも 10 回は必要であり、50 回や 100 回などのように回数が多いほど正確な結果が得られます(もちろん、時間と正確さはトレードオフの関係にあります)。
</p>