diff options
Diffstat (limited to 'docs/html-intl/intl/ja')
-rw-r--r-- | docs/html-intl/intl/ja/preview/api-overview.jd | 521 | ||||
-rw-r--r-- | docs/html-intl/intl/ja/preview/behavior-changes.jd | 402 | ||||
-rw-r--r-- | docs/html-intl/intl/ja/preview/features/runtime-permissions.jd | 794 | ||||
-rw-r--r-- | docs/html-intl/intl/ja/preview/overview.jd | 362 |
4 files changed, 2079 insertions, 0 deletions
diff --git a/docs/html-intl/intl/ja/preview/api-overview.jd b/docs/html-intl/intl/ja/preview/api-overview.jd new file mode 100644 index 0000000..2c0816b --- /dev/null +++ b/docs/html-intl/intl/ja/preview/api-overview.jd @@ -0,0 +1,521 @@ +page.title=API の概要 +page.keywords=プレビュー,sdk,互換性 +page.tags=previewresources, androidm sdk.platform.apiLevel=22-mnc +page.image=images/cards/card-api-overview_16-9_2x.png +@jd:body + + + +<div id="qv-wrapper"> +<div id="qv"> + +<h2>本書の内容 + <a href="#" onclick="hideNestedItems('#toc44',this);return false;" class="header-toggle"> + <span class="more">詳細を表示</span> + <span class="less" style="display:none">詳細を非表示</span></a></h2> + +<ol id="toc44" class="hide-nested"> + <li><a href="#app-linking">アプリのリンク機能</a></li> + <li><a href="#backup">アプリの自動バックアップ</a></li> + <li><a href="#authentication">認証</a> + <ol> + <li><a href="#fingerprint-authentication">指紋認証</a></li> + <li><a href="#confirm-credential">資格情報の確認</a></li> + </ol> + </li> + <li><a href="#direct-share">ダイレクト シェア</a></li> + <li><a href="#voice-interactions">音声インタラクション</a></li> + <li><a href="#assist">Assist API</a></li> + <li><a href="#notifications">通知</a></li> + <li><a href="#bluetooth-stylus">Bluetooth スタイラスのサポート</a></li> + <li><a href="#ble-scanning">Bluetooth Low Energy のスキャンの改善</a></li> + <li><a href="#hotspot">アクセス ポイント2.0 リリース 1 のサポート</a></li> + <li><a href="#4K-display">4K ディスプレイ モード</a></li> + <li><a href="#behavior-themeable-colorstatelists">テーマ化可能な ColorStateLists</a></li> + <li><a href="#audio">オーディオ機能</a></li> + <li><a href="#video">ビデオ機能</a></li> + <li><a href="#camera">カメラ機能</a> + <ol> + <li><a href="#flashlight">Flashlight API</a></li> + <li><a href="#reprocessing">カメラの再処理</a></li> + </ol> + </li> + <li><a href="#afw">Android for Work の機能</a></li> +</ol> + +<h2>API の変更点</h2> +<ol> +<li><a href="{@docRoot}preview/download.html">API レベル 22 から M Preview»</a> </li> +</ol> + +</div> +</div> + +<p>M Developer Preview では、ユーザーやアプリ開発者に Android プラットフォームの次期リリースの新機能をいち早く試していただくことができます。 + +このドキュメントでは、いくつかの注目すべき API の概要について説明します。</p> + +<p>M Developer Preview は、<strong>Developer の早期導入者</strong>と<strong>テスター</strong>を対象としています。 +是非 +<a href="{@docRoot}preview/setup-sdk.html">M Developer Preview を試して</a>フィードバックをご提供ください。あなたのご意見が、Android フレームワークの方向性を決定する上で貴重な情報になります。 + +</p> + +<p class="caution"><strong>注意:</strong> M Developer Preview を使用したアプリは、Google Play ストアには公開しないでください。 +</p> + +<p class="note"><strong>注</strong>: このドキュメントには、まだ <a href="{@docRoot}">developer.android.com</a> のリファレンス マテリアルにないクラスやメソッドが多数登場します。 +このドキュメントでは、API エレメントは {@code code style} 形式で記載されています(ハイパーリンクなし)。 +これらのエレメントに関する API ドキュメント(準備段階)については、<a href="{@docRoot}preview/download.html#docs">プレビューのリファレンス</a>をダウンロードしてください。 +</p> + +<h3>重要な動作の変更点</h3> + +<p>過去に Android にアプリを公開したことがある場合は、アプリがプラットフォームの変更による影響を受ける場合があります。 +</p> + +<p>詳細については、<a href="behavior-changes.html">Behavior Changes</a> をご覧ください。</p> + +<h2 id="app-linking">アプリのリンク機能</h2> +<p>このプレビューでは、アプリのリンク機能を強化することで Android のインテント システムが向上しました。この機能では、所有するウェブドメインにアプリを関連付けることができます。 +この関連付けに基づいて、プラットフォームが特定のウェブリンクの処理に使用するデフォルトのアプリを決めることができ、ユーザーにアプリを選択させる操作をスキップできます。この機能の実装方法については、 +<a href="{@docRoot}preview/features/app-linking.html">アプリのリンク機能</a>をご覧ください。 + + + +<h2 id="backup">アプリの自動バックアップ</h2> +<p>システムで、アプリの自動フルデータ バックアップと復元を実行できるようになりました。この動作は、M Preview を対象としたアプリでデフォルトで有効になっています。追加のコードは必要ありません。 +ユーザーが Google アカウントを削除すると、バックアップ データも削除されます。 +この機能の仕組みとファイル システムでバックアップ対象を設定する方法については、 +<a href="{@docRoot}preview/backup/index.html">アプリの自動バックアップ</a>をご覧ください。 +</p> + +<h2 id="authentication">認証</h2> +<p>このプレビューでは、サポートされる端末での指紋スキャンを使用したユーザー認証や、端末のロック解除メカニズム(ロック画面のパスワードなど)を使って最後にユーザーが認証された時期の確認などを行える新しい API が提供されます。 + +これらの API は、<a href="{@docRoot}training/articles/keystore.html">Android キーストローク システム</a>と共に使用します。 +</p> + +<h3 id="fingerprint-authentication">指紋認証</h3> + +<p>指紋スキャンでユーザーを認証するには、新しい +{@code android.hardware.fingerprint.FingerprintManager} クラスのインスタンスを取得して、 +{@code FingerprintManager.authenticate()} メソッドを呼び出します。アプリは、指紋センサー付きの、互換性のある端末上で実行している必要があります。 +指紋認証フローのユーザー インターフェースをアプリに実装し、UI には標準の Android 指紋アイコンを使用する必要があります。Android 指紋アイコン({@code c_fp_40px.png})は<a href="https://github.com/googlesamples/android-FingerprintDialog" class="external-link">サンプルアプリ</a>に含まれています。指紋認証を使用するアプリを複数開発する場合は、それぞれのアプリで個別にユーザーの指紋を認証する必要があります。 + + + + +</p> + +<p>アプリでこの機能を使用するには、まずマニフェストに {@code USE_FINGERPRINT} パーミッションを追加する必要があります。 +</p> + +<pre> +<uses-permission + android:name="android.permission.USE_FINGERPRINT" /> +</pre> + +<img src="{@docRoot}preview/images/fingerprint-screen.png" srcset="{@docRoot}preview/images/fingerprint-screen.png 1x, {@docRoot}preview/images/fingerprint-screen_2x.png 2x" style="float:right; margin:0 0 10px 20px" width="282" height="476" /> + +<p>アプリでの指紋認証の実装については、 +<a href="https://github.com/googlesamples/android-FingerprintDialog" class="external-link">指紋ダイアログのサンプル</a>をご覧ください。 +</p> + +<p>この機能をテストする場合は、次の手順を使用します。</p> +<ol> +<li>Android SDK Tools Revision 24.3 をインストールします(まだインストールしていない場合)。</li> +<li> +<strong>[設定] > [セキュリティ] > [指紋]</strong> の登録手順に従い、エミュレータに新しい指紋を登録します。</li> +<li>エミュレータを使って、次のコマンドで指紋のタッチ ベントをエミュレートします。 +同じコマンドを使って、ロック画面やアプリでの指紋のタッチイベントをエミュレートします。 + +<pre class="no-prettyprint"> +adb -e emu finger touch <finger_id> +</pre> +<p>Windows では、{@code telnet 127.0.0.1 <emulator-id>}、 +{@code finger touch <finger_id>} の順に実行する必要がある場合があります。 +</p> +</li> +</ol> + +<h3 id="confirm-credential">資格情報の確認</h3> +<p>アプリでは、ユーザーがいつ、最後に端末のロックを解除したかに基づいて、ユーザーを認証できます。この機能によって、ユーザーがアプリ固有のパスワードを覚えたり、開発者が独自の認証ユーザー インターフェースを実装したりする必要性がなくなります。 + +アプリでこの機能を使用する場合は、ユーザー認証用の公開鍵か秘密鍵を実装する必要があります。 +</p> + +<p>ユーザーが正常に認証された後、同じキーを再使用できるタイムアウト期間を設定するには、{@link javax.crypto.KeyGenerator} か +{@link java.security.KeyPairGenerator} のセットアップ後に新しい +{@code android.security.keystore.KeyGenParameterSpec.setUserAuthenticationValidityDurationSeconds()} メソッドを呼び出します。 + +現在、この機能は対象暗号化操作で動作します。 +</p> + +<p>再認証ダイアログを過度に表示しないようにします。アプリでは、まず暗号オブジェクトを使用し、タイムアウトした場合は +{@link android.app.KeyguardManager#createConfirmDeviceCredentialIntent(java.lang.CharSequence, java.lang.CharSequence) createConfirmDeviceCredentialIntent()} メソッドを使用してユーザーをアプリ内で再認証するようにします。 + + +</p> + +<p>アプリでのこの機能の実装については、 +<a href="https://github.com/googlesamples/android-ConfirmCredential" class="external-link">資格情報の確認サンプル</a>をご覧ください。 +</p> + +<h2 id="direct-share">ダイレクト シェア</h2> + +<img src="{@docRoot}preview/images/direct-share-screen.png" srcset="{@docRoot}preview/images/direct-share-screen.png 1x, {@docRoot}preview/images/direct-share-screen_2x.png 2x" style="float:right; margin:0 0 20px 30px" width="312" height="329" /> + +<p>このプレビューでは、ユーザーが直感的にすばやく共有できるようにする API が提供されます。アプリで特定のアクティビティを起動する<em>ダイレクト シェアのターゲット</em>を定義すると、それらのダイレクト シェアのターゲットは <em>[共有]</em> メニューに表示されるようになります。 + +この機能を使うと、他のアプリ内にある連絡先などのターゲットにコンテンツを共有できます。 +たとえば、ダイレクト シェアのターゲットによって他のソーシャル ネットワーク アプリのアクティビティが起動し、そのアプリ内の特定の友人やコミュニティに直接コンテンツを共有できるようになります。 + +</p> + +<p>ダイレクト シェアのターゲットを有効にするには、まず +{@code android.service.} を拡張するクラスを定義する必要があります。 <br> +{@code chooser.ChooserTargetService} クラス。マニフェストで +{@code ChooserTargetService} を宣言します。その宣言内で、 +{@code BIND_CHOOSER_TARGET_SERVICE} パーミッションと、 +{@code SERVICE_INTERFACE} アクションを使ったインテント フィルタを指定します。</p> +<p>次の例は、マニフェストで {@code ChooserTargetService} を宣言する方法を示しています。 +</p> +<pre> +<service android:name=".ChooserTargetService" + android:label="@string/service_name" + android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"> + <intent-filter> + <action android:name="android.service.chooser.ChooserTargetService" /> + </intent-filter> +</service> +</pre> + +<p>{@code ChooserTargetService} に公開するアクティビティごとに、 {@code "android.service.chooser.chooser_target_service"} という名前の +{@code <meta-data>} 要素をアプリのマニフェストに追加します。 + +</p> + +<pre> +<activity android:name=".MyShareActivity” + android:label="@string/share_activity_label"> + <intent-filter> + <action android:name="android.intent.action.SEND" /> + </intent-filter> +<meta-data + android:name="android.service.chooser.chooser_target_service" + android:value=".ChooserTargetService" /> +</activity> +</pre> + +<h2 id="voice-interactions">音声インタラクション</h2> +<p> +このプレビューでは、<a href="https://developers.google.com/voice-actions/" class="external-link">音声アクション</a>と共に使用することでアプリに対話形式の音声操作をビルドできる新しい音声インタラクション API が提供されます。 + + +{@code android.app.Activity.isVoiceInteraction()} メソッドを呼び出して、アクティビティが音声アクションへの応答として開始されたかどうかを確認します。 +音声アクションへの応答であった場合、アプリで +{@code android.app.VoiceInteractor} クラスを使用してユーザーに音声の確認や、オプションのリストからの選択などを要求できます。 +音声アクションの実装の詳細については、 +<a href="https://developers.google.com/voice-actions/interaction/" class="external-link">音声アクションの開発者サイト</a>をご覧ください。 +</p> + +<h2 id="assist">Assist API</h2> +<p> +このプレビューでは、アシスタントを介してユーザーがアプリを操作できる新しい方法が用意されています。この機能を使用するには、ユーザーが現在のコンテキストを使うようアシスタントを有効にする必要があります。 +有効にすると、<strong>ホーム</strong> ボタンを長押しすることで、すべてのアプリ内でアシスタントを呼び出すことができます。 +</p> +<p> +{@link android.view.WindowManager.LayoutParams#FLAG_SECURE} フラグを設定すると、アプリが現在のコンテキストをアシスタントと共有しないようにできます。新しい {@code android.app.Activity.AssistContent} クラスを使用すると、プラットフォームがアシスタントに渡す標準的な情報セットの他に、アプリで追加の情報を共有できます。 + +</p> + +<p>アプリから追加のコンテキストをアシスタントに提供するには、次の手順を使用します。</p> + +<ol> +<li>{@link android.app.Application.OnProvideAssistDataListener} インターフェースを実装します。</li> +<li> +{@link android.app.Application#registerOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener) registerOnProvideAssistDataListener()} を使用してこのリスナーを登録します。</li> +<li>アクティビティ固有の文脈情報を提供するには、 +{@link android.app.Activity#onProvideAssistData(android.os.Bundle) onProvideAssistData()} コールバックと、任意で新しい +{@code Activity.onProvideAssistContent()} コールバックをオーバーライドします。 +</ol> + +<h2 id="notifications">通知</h2> +<p>このプレビューでは、通知に関して次のような API の変更点が追加されています。</p> +<ul> + <li>新しい<em>アラームのみの</em> Do not disturb モードに相当する新しい {@code NotificationListenerService.INTERRUPTION_FILTER_ALARMS} フィルタレベル。 +</li> + <li>ユーザーが予定したリマインダを他のイベント({@link android.app.Notification#CATEGORY_EVENT})やアラーム({@link android.app.Notification#CATEGORY_ALARM})から区別する際に使用される新しい{@code Notification.CATEGORY_REMINDER} カテゴリの値。 + + +</li> + <li>{@code Notification.Builder.setSmallIcon(Icon)} メソッドや {@code Notification.Builder.setLargeIcon(Icon)} メソッド経由で通知にアタッチできる新しい {@code android.graphics.drawable.Icon} クラス。 + +</li> + <li>現在どの通知がアクティブなのかをアプリが検出できるようにする新しい {@code NotificationManager.getActiveNotifications()} メソッド。 +この機能を使用するアプリの実装については、<a href="https://github.com/googlesamples/android-ActiveNotifications" class="external-link">アクティブな通知のサンプル</a>をご覧ください。 +</li> +</ul> + +<h2 id="bluetooth-stylus">Bluetooth スタイラスのサポート</h2> +<p>このプレビューでは、Bluetooth スタイラスを使用したユーザー入力のサポートが強化されました。互換性のある Bluetooth スタイラスと電話やタブレットをペアリングして接続できます。 +接続されている間、タッチスクリーンからの位置情報とスタイラスからの筆圧やボタン情報を合わせることで、タッチスクリーン単独の場合よりも表現の幅が大きく広がります。 + +新しい +{@code View.onStylusButtonPressListener} コールバックと {@code GestureDetector.OnStylusButtonPressListener} コールバックをアクティビティに登録すると、スタイラスのボタンが押されたことをアプリがリッスンし、次のアクションを実行できるようになります。 + +</p> + +<p>スタイラスのボタン操作を検出するには、{@link android.view.MotionEvent} メソッドと定数を使用します。 +</p> +<ul> +<li>ユーザーがスタイラスでアプリ画面のボタンをタップすると、 +{@link android.view.MotionEvent#getToolType(int) getTooltype()} メソッドが +{@link android.view.MotionEvent#TOOL_TYPE_STYLUS} を返します。</li> +<li>M Preview を対象としたアプリでは、ユーザーがプライマリのスタイラス ボタンを押すと +{@link android.view.MotionEvent#getButtonState() getButtonState()} メソッドが {@code MotionEvent.STYLUS_BUTTON_PRIMARY} を返します。 + +スタイラスにセカンダリ ボタンがある場合は、ユーザーがそのボタンを押したときに同じメソッドで {@code MotionEvent.STYLUS_BUTTON_SECONDARY} が返されます。 +ユーザーが同時に両方のボタンを押した場合は、両方の値が OR で返されます({@code STYLUS_BUTTON_PRIMARY|STYLUS_BUTTON_SECONDARY}) + +</li> +<li> +以前のプラットフォーム バージョンを対象としたアプリでは、 +{@link android.view.MotionEvent#getButtonState() getButtonState()} メソッドは +{@link android.view.MotionEvent#BUTTON_SECONDARY}(プライマリのスタイラス ボタンが押されたとき)、 +{@link android.view.MotionEvent#BUTTON_TERTIARY}(セカンダリのスタイラス ボタンが押されたとき)、または両方を返します。 +</li> +</ul> + +<h2 id="ble-scanning">Bluetooth Low Energy のスキャンの改善</h2> +<p> +アプリで Bluetooth Low Energy スキャンを実行する場合は、新しい +{@code android.bluetooth.le.ScanSettings.Builder.setCallbackType()} メソッドを使って、設定された +{@link android.bluetooth.le.ScanFilter} に一致する宣伝パケットが最初に見つかったときと、それが長期間見つからない場合に通知する目的でのみコールバックが必要であると指定できます。 + +このスキャン アプローチは、以前のプラットフォーム バージョンで提供されていたものよりもはるかに効率的です。 + +</p> + +<h2 id="hotspot">アクセス ポイント 2.0 リリース 1 のサポート</h2> +<p> +このプレビューでは、Nexus 6 と Nexus 9 端末のアクセス ポイント2.0 Release 1 仕様のサポートが追加されました。アクセス ポイント 2.0 の資格情報をアプリに提供するには、 +{@code setPlmn()} や {@code setRealm()} などの +{@link android.net.wifi.WifiEnterpriseConfig} クラスの新しいメソッドを使用します。 +{@link android.net.wifi.WifiConfiguration} オブジェクトで、 +{@link android.net.wifi.WifiConfiguration#FQDN} フィールドと {@code providerFriendlyName} フィールドを設定できます。新しい {@code ScanResult.PasspointNetwork} プロパティは、検出されたネットワークがアクセス ポイント 2.0 のアクセス ポイントを表しているかどうかを示します。 + + +</p> + +<h2 id="4K-display">4K ディスプレイ モード</h2> +<p>互換性のあるハードウェアで、ディスプレイの解像度を 4K レンダリングにアップグレードするようアプリから要求できるようになりました。 +現在の物理的解像度を照会するには、新しい +{@code android.view.Display.Mode} API を使用します。UI が低い論理的解像度で描画されていて、より高い物理的解像度にアップスケールされた場合は、 +{@code Display.Mode.getPhysicalWidth()} メソッドが返す物理的解像度が {@link android.view.Display#getSize(android.graphics.Point) getSize()} で報告される論理的解像度と異なる場合があります。 + +</p> + +<p>アプリ ウィンドウの +{@code WindowManager.LayoutParams.preferredDisplayModeId} プロパティを設定することで、アプリの実行時に物理的解像度を変更するようシステムに要求できます。この機能は、4K ディスプレイの解像度に切り替えたい場合に便利です。 +4K ディスプレイ モード中、UI は引き続き元の解像度(1080p など)で表示され、4K にアップスケールされますが、 +{@link android.view.SurfaceView} オブジェクトではコンテンツをネイティブの解像度で表示する場合があります。 +</p> + +<h2 id="behavior-themeable-colorstatelists">テーマ化可能な ColorStateLists</h2> +<p>M Preview を実行する端末で、テーマの属性が +{@link android.content.res.ColorStateList} でサポートされるようになりました。 +{@link android.content.res.Resources#getColorStateList(int) getColorStateList()} メソッドと +{@link android.content.res.Resources#getColor(int) getColor()} メソッドは廃止されました。これらの API を呼び出す場合は、代わりに新しい {@code Context.getColorStateList()} メソッドか +{@code Context.getColor()} メソッドを呼び出します。 +これらのメソッドは、{@link android.support.v4.content.ContextCompat} の v4 appcompat ライブラリにもあります。 +</p> + +<h2 id="audio">オーディオ機能</h2> + +<p>このプレビューでは、次のように Android でのオーディオ処理が改善されました。 </p> +<ul> + <li>新しい {@code android.media.midi} API を使った <a href="http://en.wikipedia.org/wiki/MIDI" class="external-link">MIDI</a> プロトコルのサポート。 +これらの API を使用して MIDI イベントを送受信できます。 +</li> + <li>デジタル オーディオの録音を作成して、それぞれのオブジェクトを再生し、システムのデフォルトをオーバーライドするオーディオ ソースとシンク プロパティを構成するための新しい {@code android.media.AudioRecord.Builder} クラスと {@code android.media.AudioTrack.Builder} クラス + +。</li> + <li>オーディオと入力端末を関連付ける API フック。これは、ユーザーが Android TV に接続されているゲーム コントローラーやリモート コントロールから音声検索を開始できるアプリの場合に特に便利です。ユーザーが検索を開始すると、システムが新しい +{@code android.app.Activity.onSearchRequested()} コールバックを呼び出します。 + +ユーザーの入力端末に組み込みのマイクがあるかどうかを確認するには、そのコールバックから {@link android.view.InputDevice} オブジェクトを取得して、新しい +{@code InputDevice.hasMic()} メソッドを呼び出します。 +</li> + <li>アタッチされたすべてのソースとシンク オーディオ端末の一覧を取得できる新しい {@code android.media.AudioDevicesManager} クラス。 +また、オーディオ端末の接続時と接続解除時にアプリで通知を受けたい場合は、 +{@code android.media.OnAudioDeviceConnectionListener} オブジェクトを指定することもできます。 +</li> +</ul> + +<h2 id="video">ビデオ機能</h2> +<p>このプレビューでは、ビデオ処理の API に次のような新機能が追加されました。</p> +<ul> +<li>アプリでオーディオ ストリームとビデオ ストリームを同調してレンダリングできる新しい {@code android.media.MediaSync}。 +オーディオ バッファはノンブロッキング方式で送信され、コールバック経由で返されます。 +ダイナミック再生レートもサポートしています。 +</li> +<li>アプリで開かれたセッションが、リソース マネージャーによって再要求されたことを示す新しい {@code MediaDrm.EVENT_SESSION_RECLAIMED} イベント。 +アプリが DRM セッションを使用する場合は、必ずこのイベントを処理し、再要求されたセッションは使用しないようにします。 + +</li> +<li>リソース マネージャーがコーデックで使用されたメディア リソースを再要求したことを示す新しい {@code MediaCodec.CodecException.ERROR_RECLAIMED} エラーコード。 +この例外では、コーデックはターミナル状態に移動するため、解放する必要があります。 + +</li> +<li>同時に発生できるコーデック インスタンスの最大数のヒントを得られる新しい {@code MediaCodecInfo.CodecCapabilities.getMaxSupportedInstances()} インターフェース。 + +</li> +<li>高速または低速モーション再生におけるメディアの再生レートを設定する新しい {@code MediaPlayer.setPlaybackParams()} メソッド。 +ビデオと共にオーディオの再生を自動的に延ばしたり早めたりもします。 +</li> +</ul> + +<h2 id="camera">カメラ機能</h2> +<p>このプレビューでは、カメラのフラッシュやカメラによる画像の再処理にアクセスするための新しい API が用意されています。 +</p> + +<h3 id="flashlight">Flashlight API</h3> +<p>カメラ端末にフラッシュ ユニットが付属している場合は、{@code CameraManager.setTorchMode()} メソッドを呼び出すことで、カメラ端末を開かずにフラッシュ ユニットのタッチモードのオン/オフを切り替えることができます。 +アプリには、フラッシュ ユニットやカメラ端末のフラッシュの独占所有権はありません。 +トーチモードは、カメラ端末が利用不可になったときや、トーチを付けている他のカメラリソースが利用不可になったときにオフになり、利用できなくなります。 + +他のアプリでも {@code setTorchMode()} を呼び出してトーチモードをオフにできます。 +最後にトーチモードをオンにしたアプリが閉じられると、トーチモードはオフになります。 +</p> + +<p> +{@code CameraManager.registerTorchCallback()} メソッドを呼び出すことで、トーチモードの状態に関する通知を受けるようコールバックを登録できます。コールバックを初めて登録したときに、現在検知されているすべてのフラッシュ ユニット付きのカメラ端末のトーチモードの状態が即座に呼び出されます。 + +トーチモードが正常にオン/オフされると、 +{@code CameraManager.TorchCallback.onTorchModeChanged()} メソッドが呼び出されます。</p> + +<h3 id="reprocessing">Reprocessing API</h3> +<p>{@link android.hardware.camera2 Camera2} API は、YUV とプライベートな不透明形式の画像の再処理をサポートするよう拡張されました。 +アプリは、再処理機能が利用可能かどうかを {@code CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES} 経由で確認します。 +端末が再処理をサポートしている場合は、 +{@code CameraDevice.createReprocessableCaptureSession()} を呼び出して再処理可能なカメラ撮影セッションを作成し、入力バッファの再処理の要求を作成できます。 + +</p> + +<p>入力バッファのフローをカメラの再処理入力に接続するには、{@code ImageWriter} クラスを使用します。 +空のバッファを取得するには、次のプログラミング モデルを使用します。</p> + +<ol> +<li>{@code ImageWriter.dequeueInputImage()} メソッドを呼び出します。</li> +<li>入力バッファにデータを入力します。</li> +<li>{@code ImageWriter.queueInputImage()} メソッドを呼び出して、バッファをカメラに送ります。</li> +</ol> + +<p>{@code ImageWriter} オブジェクトを +{@code android.graphics.ImageFormat.PRIVATE} 画像と共に使用する場合、アプリから直接画像データにアクセスすることはできません。 +代わりに、{@code ImageWriter.queueInputImage()} メソッドをバッファコピーなしで呼び出して、{@code ImageFormat.PRIVATE} 画像を直接 +{@code ImageWriter} に渡します。 +</p> + +<p>{@code ImageReader} クラスで {@code android.graphics.ImageFormat.PRIVATE} 形式の画像ストリームがサポートされるようになりました。 +これにより、アプリが +{@code ImageReader} 出力画像の循環的な画像のキューを維持でき、1 つ以上の画像を選択して、それらをカメラの再処理用に +{@code ImageWriter} に送ることができます。</p> + +<h2 id="afw">Android for Work の機能</h2> +<p>このプレビューには、次のような Android for Work 用の新しい API が含まれています。</p> +<ul> + <li><strong>企業の専用端末の制御の強化:</strong>デバイス オーナーは次の設定を制御でき、企業の専用端末を管理しやすくなります。 + + + <ul> + <li> +{@code DevicePolicyManager.setKeyguardEnabledState()} メソッドを使ったキーガードの無効化と有効化。</li> + <li> +{@code DevicePolicyManager.setStatusBarEnabledState()} メソッドを使ったステータスバー(クイック設定、通知、Google Now を起動するスワイプアップのジェスチャ)の無効化と有効化。 +</li> + <li>{@link android.os.UserManager} の定数 {@code DISALLOW_SAFE_BOOT} を使ったセーフブートの無効化と有効化。 +</li> + <li> +{@link android.provider.Settings.Global} の定数 {@code STAY_ON_WHILE_PLUGGED_IN} を使った電源接続時の画面オフの回避。</li> + </ul> + </li> + <li><strong>デバイス オーナーによるアプリのサイレント インストールとアンインストール:</strong>デバイス オーナーでは、{@link android.content.pm.PackageInstaller} API を使って、Google Play for Work から独立してアプリケーションをサイレントにインストール、アンインストールできます。 + +デバイス オーナー経由で、ユーザー操作なしでアプリを取得したりインストールしたりできる端末を提供できます。 +この機能は、Google アカウントのアクティベートなしでキオスクや同様の端末のワンタッチ プロビジョニングを有効にする際に便利です。 +</li> +<li><strong>企業証明書のサイレント アクセス: </strong>ユーザーが証明書の選択を求められる前にアプリが +{@link android.security.KeyChain#choosePrivateKeyAlias(android.app.Activity,android.security.KeyChainAliasCallback,java.lang.String[],java.security.Principal[],java.lang.String,int,java.lang.String) choosePrivateKeyAlias()} を呼び出すと、プロファイルやデバイス オーナーが {@code DeviceAdminReceiver.onChoosePrivateKeyAlias()} メソッドを呼び出して要求元のアプリケーションにエイリアスをサイレントに提供できるようになりました。 + + +この機能によって、ユーザー操作なしでマネージド アプリが証明書にアクセスできるようになります。 +</li> +<li><strong>システムアップデートの自動受信。</strong> +{@code DevicePolicyManager.setSystemUpdatePolicy()} を使ってシステムアップデートのポリシーを設定することで、デバイス オーナーがキオスク端末などでシステムアップデートを自動的に受信できるようにしたり、ユーザーが操作しないようアップデートを最大 30 日間保留したりできます。 + +さらに、管理者はアップデートを実行する時間枠を、キオスク端末が使用されていない時間帯などに設定できます。 +利用可能なシステムアップデートがある場合、システムは Work Policy Controller アプリにシステムアップデートのポリシーがあるかどうかを確認し、それに基づいて動作します。 + + +</li> +<li> +<strong>代理証明書のインストール:</strong>プロファイルやデバイス オーナーで、サードパーティ アプリが次の {@link android.app.admin.DevicePolicyManager} 証明書の管理 API を呼び出す権限を付与できるようになりました。 + + +<ul> + <li>{@link android.app.admin.DevicePolicyManager#getInstalledCaCerts(android.content.ComponentName) +getInstalledCaCerts()}</li> + <li>{@link android.app.admin.DevicePolicyManager#hasCaCertInstalled(android.content.ComponentName,byte[]) +hasCaCertInstalled()}</li> + <li>{@link android.app.admin.DevicePolicyManager#installCaCert(android.content.ComponentName,byte[]) +installCaCert()}</li> + <li>{@link android.app.admin.DevicePolicyManager#uninstallCaCert(android.content.ComponentName,byte[]) +uninstallCaCert()}</li> + <li>{@link android.app.admin.DevicePolicyManager#uninstallAllUserCaCerts(android.content.ComponentName) +uninstallAllUserCaCerts()}</li> + <li>{@link android.app.admin.DevicePolicyManager#installKeyPair(android.content.ComponentName,java.security.PrivateKey,java.security.cert.Certificate,java.lang.String) +installKeyPair()}</li> +</ul> +</li> +<li><strong>企業のファクトリー リセット制限:</strong>デバイス オーナーをプロビジョニングする際、 +{@code DeviceManagerPolicy.EXTRA_PROVISIONING_RESET_PROTECTION_PARAMETERS} バンドルを設定して、ファクトリー リセット保護(FRP)をロック解除するようパラメータを構成できます。 +NFC プログラマー アプリでは、端末が FRP のロック解除するようリセットされ、端末がプロビジョニングされた後にこれらのパラメータを提供でき、事前に Google アカウントを設定しておく必要はありません。 + +これらのパラメータを修正しない場合、FRP は続行し、事前にアクティブ化された Google の資格情報なしで端末がアクティベートされないようにします。 + + +<p>さらに、Google Play サービスでアプリの制限を設定することで、デバイス オーナーは FRP のロック解除用の別の Google アカウントを指定して、端末でアクティベートされたアカウントを置き換えることができます。 +</p> +</li> +<img src="{@docRoot}preview/images/work-profile-screen.png" srcset="{@docRoot}preview/images/work-profile-screen.png 1x, {@docRoot}preview/images/work-profile-screen_2x.png 2x" style="float:right; margin:0 0 10px 20px" width="282" height="476" /> +<li><strong>データ使用のトラッキング</strong>プロファイルやデバイス オーナーでは、新しい +{@code android.app.usage.NetworkStatsManager} メソッドを使用して、<strong>[設定] > [データ]</strong> に表示されるデータ使用の統計を照会できます。 +プロファイル オーナーには、管理するプロファイルのデータを照会するパーミッションが自動的に付与され、デバイス オーナーは管理されたプライマリ ユーザーの使用データへのアクセス権が付与されます。 + +</li> +<li><strong>実行時パーミッションの管理:</strong> +<p>プロファイルやデバイス オーナーは、 +{@code DevicePolicyManager.setPermissionPolicy()} を使用するすべてのアプリケーションのすべての実行時の要求に対するパーミッション ポリシーを設定でき、通常のとおりユーザーにパーミッションを付与するよう要求する、自動的に付与する、パーミッションをサイレントに拒否する、のいずれかを行うことができます。 + +後者のポリシーが設定されている場合、ユーザーはプロファイルやデバイス オーナーによって選択された内容を <strong>[設定]</strong> にあるアプリのパーミッション画面で修正できません。 + +</p></li> +<li><strong>設定の VPN:</strong>VPN アプリは、<strong>[設定] > [その他] > [VPN]</strong> に表示されます。さらに、VPN の使用に関する通知は、その VPN の構成状況によるものになります。 + + +プロファイル オーナーの場合、通知は VPN が マネージド プロファイル、個人プロファイル、または両方のどれに構成されているかによって、それ固有のものになります。 +デバイス オーナーの場合、通知は VPN が端末全体に構成されているかどうかによって、それ固有のものになります。 +</li> +<li><strong>ワーク ステータスの通知:</strong>マネージド プロファイルからのアプリのアクティビティがフォアグラウンドにある場合は、ステータスバーのブリーフケース アイコンが表示されます。 +さらに、端末がマネージド プロファイルのアプリのアクティビティに直接ロック解除されている場合、ユーザーがワーク プロファイル内にいることがトースト通知で表示されます。 + + +</li> +</ul> + +<p class="note"> + M Developer Preview のすべての API の変更点の詳細については、<a href="{@docRoot}preview/download.html">API Differences Report</a> をご覧ください。 +</p> diff --git a/docs/html-intl/intl/ja/preview/behavior-changes.jd b/docs/html-intl/intl/ja/preview/behavior-changes.jd new file mode 100644 index 0000000..a7950a1 --- /dev/null +++ b/docs/html-intl/intl/ja/preview/behavior-changes.jd @@ -0,0 +1,402 @@ +page.title=動作の変更点 +page.keywords=プレビュー,sdk,compatibility +sdk.platform.apiLevel=MNC +@jd:body + +<div id="qv-wrapper"> +<div id="qv"> + +<h2>本書の内容</h2> + +<ol id="toc44" class="hide-nested"> + <li><a href="#behavior-runtime-permissions">実行時パーミッション</a></li> + <li><a href="#behavior-power">省電力の最適化 </a> + <ol> + <li><a href="#behavior-doze">Doze</a></li> + <li><a href="#behavior-app-standby">App Standby</a></li> + </ol> + </li> + <li><a href="#behavior-adoptable-storage">追加可能なストレージ端末</a></li> + <li><a href="#behavior-apache-http-client">Apache HTTP Client の削除</a></li> + <li><a href="#behavior-audiomanager-Changes">AudioManager の変更点</a></li> + <li><a href="#behavior-test-selection">テキスト選択</a></li> + <li><a href="#behavior-keystore">Android キーストロークの変更点</a></li> + <li><a href="#behavior-network">Wi-Fi とネットワークの変更点</a></li> + <li><a href="#behavior-camera">カメラ サービスの変更点</a></li> + <li><a href="#behavior-art-runtime">ART ランタイム</a></li> + <li><a href="#behavior-apk-validation">APK の検証</a></li> + <li><a href="#behavior-afw">Android for Work の変更点</a></li> +</ol> + +<h2>API の変更点</h2> +<ol> +<li><a href="{@docRoot}preview/download.html">API レベル 22 から M Preview»</a> </li> +</ol> + + +<h2>関連ドキュメント</h2> +<ol> +<li><a href="{@docRoot}preview/api-overview.html">M Developer Preview API の概要</a> </li> +</ol> + +</div> +</div> + +<p>M Developer Preview には、新機能以外にもさまざまなシステムの変更点や API の動作の変更点が盛り込まれています。 +このドキュメントでは、アプリ開発において把握しておくべき主な変更点について説明します。 +</p> + +<p>過去に Android にアプリを公開したことがある場合は、アプリがこれらの変更による影響を受ける場合があることに注意してください。 +</p> + +<h2 id="behavior-runtime-permissions">実行時パーミッション</h1> +<p>このプレビューでは、アプリのパーミッションを実行時にユーザーが直接管理できる新しいパーミッション モデルが採用されました。 +このモデルによって、ユーザーに対するパーミッションの可視性と制御性が向上し、アプリ開発者にとってはアプリのインストールや自動アップデート プロセスの効率が上がります。ユーザーはインストール済みアプリのパーミッションを個別に付与したり取り消したりできます。 + + </p> + +<p>M Preview を対象としたアプリでは、必ずパーミッションを実行時に確認、要求するようにします。 +アプリにパーミッションが付与されているかどうかを確認するには、新しい {@code Context.checkSelfPermission()} メソッドを呼び出します。 +パーミッションを要求するには、新しい +{@code Activity.requestPermission()} メソッドを呼び出します。アプリが M を対象としていない場合でも、新しいパーミッション モデルでアプリをテストするようにしてください。 +</p> + +<p>アプリで新しいパーミッションをサポートする際の詳細については、Developer Preview ページの +<a href="{@docRoot}preview/features/runtime-permissions.html">Permissions</a> をご覧ください。 +アプリへの影響を評価する際のヒントについては、<a href="{@docRoot}preview/testing/guide.html#runtime-permissions">Testing Guide</a> をご覧ください。 +</p> + +<h2 id="behavior-power">省電力の最適化 </h2> +<p>このプレビューでは、アイドル中の端末やアプリに対する新しい省電力の最適化機能が採用されています。</p> + +<h3 id="behavior-doze">Doze</h3> +<p>端末が電源に接続されておらず、画面が一定時間オフ状態の場合は <em>Doze</em> モードに入り、システムをスリープ状態に保ちます。 +このモードでは、端末は定期的に通常の操作を短時間再開することで、アプリを同期したり、システムが保留中の操作を行ったりすることができます。 + +</p> + +<p>Doze 中は、アプリに次の制限が適用されます。</p> +<ul> +<li>アプリで優先度の高い Google Cloud Messaging の通知を受信する場合以外、ネットワーク アクセスは無効になります。 +</li> +<li><a href="{@docRoot}reference/android/os/PowerManager.WakeLock.html">Wake ロック</a> は無視されます。</li> +<li>{@link android.app.AlarmManager} クラスを使ってスケジュールされたアラームは無効になりますが、{@link android.app.AlarmManager#setAlarmClock setAlarmClock()} メソッドと {@code AlarmManager.setAndAllowWhileIdle()} を使って設定したアラームは除きます。 + +</li> +<li>WiFi スキャンは実行されません。</li> +<li>同期アダプタ と {@link android.app.job.JobScheduler} の同期とジョブは実行できません。 +</li> +</ul> +</p> +<p>端末が Doze モードでなくなると、保留中のすべての同期とジョブが実行されます。</p> +<p>この機能をテストするには、M Preview を実行する端末を開発マシンに接続して、次のコマンドを呼び出します。 + +</p> +<pre class="no-prettyprint"> +$ adb shell dumpsys battery unplug +$ adb shell dumpsys deviceidle step +$ adb shell dumpsys deviceidle -h +</pre> +<p class="note"><strong>注</strong>: +<a href="https://developers.google.com/cloud-messaging/" class="external-link">Google Cloud Messaging</a> の次期リリースでは、高優先度のメッセージを指定できます。 + +アプリが高優先度の GCM メッセージを受信する場合は、端末が Doze 中でも短時間のネットワーク アクセスが付与されます。 + +</p> + +<p>アプリで Doze をテストする方法のヒントについては、 +<a href="{@docRoot}preview/testing/guide.html#doze-standby">Testing Guide</a> をご覧ください。 + </p> + +<h3 id="behavior-app-standby">App Standby</h3> +<p>このプレビューでは、アクティブに使用されていないアプリをシステムがアイドル状態であるとみなす場合があります。 +システムが次の信号を検出しない場合、一定時間の経過後にアプリはアイドル状態であるとみなされます。 +</p> + +<ul> +<li>アプリがユーザーによって明示的に起動された。</li> +<li>アプリのプロセスが現在フォアグラウンドにある(アクティビティかフォアグラウンド サービスとしてか、他のアクティビティかフォアグラウンド サービスによって使用されている)。 +</li> +<li>アプリがロック画面や通知トレイに表示される通知を生成する。 +</li> +<li>ユーザーが、アプリに最適化が適用されないよう <strong>[設定]</strong> で明示的に指定する。 +</li> +</ul> + +<p>端末が電源に接続されていない場合、アイドル中のみなされたアプリのネットワーク アクセスは無効になり、同期とジョブは保留されます。 +端末が電源に接続されると、アプリのネットワーク アクセスは許可され、保留中のすべてのジョブと同期が実行されます。 +端末が長時間アイドル状態の場合、アイドル中のアプリは 1 日 1 回程度ネットワーク アクセスが許可されます。 +</p> + +<p>この機能をテストするには、M Preview を実行する端末を開発マシンに接続して、次のコマンドを呼び出します。 + +</p> +<pre class="no-prettyprint"> +$ adb shell dumpsys battery unplug +$ adb shell am set-idle <packageName> true +$ adb shell am set-idle <packageName> false +$ adb shell am get-idle <packageName> +</pre> + +<p class="note"><strong>注:</strong> +<a href="https://developers.google.com/cloud-messaging/" class="external-link">Google Cloud Messaging</a>(GCM)の次期リリースでは、高優先度のメッセージを指定できます。 + +アプリが高優先度の GCM メッセージを受信する場合は、アプリがアイドル 中でも短時間のネットワーク アクセスが付与されます。 + +</p> + +<p>アプリで App Standby をテストする方法のヒントについては、 +<a href="{@docRoot}preview/testing/guide.html#doze-standby">Testing Guide</a> をご覧ください。 + </p> + +<h2 id="behavior-adoptable-storage">追加可能なストレージ端末</h2> +<p> +このプレビューでは、SD カードなどの外部ストレージ端末を<em>追加</em>できます。外部ストレージ端末を追加すると、端末が内部ストレージのように動作するよう暗号化とフォーマットが行われます。 +この機能によって、アプリとアプリの個人データをストレージ端末間で移動できるようになります。 +アプリを移動する際、システムはマニフェストの +<a href="{@docRoot}guide/topics/manifest/manifest-element.html#install">{@code android:installLocation}</a> を遵守します。 + +</p> + +<p>アプリが次の API やフィールドにアクセスする場合は、アプリが内部ストレージ端末と外部ストレージ端末間で移動する際に返されるファイルパスが動的に変化することに注意してください。ファイルパスの構築時は、これらの API を動的に呼び出すことを強くお勧めします。ハードコードされたファイル パスを使用したり、過去にビルドした完全修飾ファイルパスをそのまま使用したりしないでください。 + + +</p> + +<ul> +<li>{@link android.content.Context} メソッド: + <ul> + <li>{@link android.content.Context#getFilesDir() getFilesDir()}</li> + <li>{@link android.content.Context#getCacheDir() getCacheDir()}</li> + <li>{@link android.content.Context#getCodeCacheDir() getCodeCacheDir()}</li> + <li>{@link android.content.Context#getDatabasePath(java.lang.String) getDatabasePath()}</li> + <li>{@link android.content.Context#getDir(java.lang.String,int) getDir()}</li> + <li>{@link android.content.Context#getNoBackupFilesDir() getNoBackupFilesDir()}</li> + <li>{@link android.content.Context#getFileStreamPath(java.lang.String) getFileStreamPath()}</li> + <li>{@link android.content.Context#getPackageCodePath() getPackageCodePath()}</li> + <li>{@link android.content.Context#getPackageResourcePath() getPackageResourcePath()}</li> + </ul> +</li> +<li>{@link android.content.pm.ApplicationInfo} フィールド: + <ul> + <li>{@link android.content.pm.ApplicationInfo#dataDir dataDir}</li> + <li>{@link android.content.pm.ApplicationInfo#sourceDir sourceDir}</li> + <li>{@link android.content.pm.ApplicationInfo#nativeLibraryDir nativeLibraryDir}</li> + <li>{@link android.content.pm.ApplicationInfo#publicSourceDir publicSourceDir}</li> + <li>{@link android.content.pm.ApplicationInfo#splitSourceDirs splitSourceDirs}</li> + <li>{@link android.content.pm.ApplicationInfo#splitPublicSourceDirs splitPublicSourceDirs}</li> + </ul> +</li> +</ul> + +<p>Developer Preview のこの機能をデバッグするには、USB On-The-Go(OTG)ケーブルで Android 端末に接続された USB ドライブの追加を有効にして、次のコマンドを実行します。 +</p> + +<pre class="no-prettyprint"> +$ adb shell sm set-force-adoptable true +</pre> + +<h2 id="behavior-apache-http-client">Apache HTTP Client の削除</h2> +<p>このプレビューでは、Apache HTTP クライアントのサポートが削除されました。アプリでこのクライアントを使用していて、Android 2.3(API レベル 9)以上を対象としている場合は、代わりに {@link java.net.HttpURLConnection} クラスを使用します。 + +この API は透過的データ圧縮と応答のキャッシュによってネットワーク使用を軽減し、電源の消費を最小化するため、効率性が向上します。 +Apache HTTP API を引き続き使用するには、まず {@code build.gradle} ファイルで次のコンパイル時の依存関係を宣言する必要があります。 + +</p> +<pre> +android { + useLibrary 'org.apache.http.legacy' +} +</pre> +<p>Android は、OpenSSL から +<a href="https://boringssl.googlesource.com/boringssl/" class="external-link">BoringSSL</a> ライブラリに移行しています。 +アプリで Android NDK を使用している場合は、{@code libcrypto.so} や {@code libssl.so} など、NDK API の一部でない暗号化ライブラリにリンクしないでください。 +これらのライブラリは パブリック API ではなく、リリースや端末に対する通知なしで変更されたり、中断したりする可能性があります。また、セキュリティ上の脆弱性を露呈する場合もあります。 + +代わりに、ネイティブ コードを変更して JNI 経由で Java の暗号化 API を呼び出すか、希望の暗号化ライブラリに静的リンクします。 + +</p> + +<h2 id="behavior-audiomanager-Changes">AudioManager の変更点</h2> +<p>{@link android.media.AudioManager} クラスで音量を直接設定したり、特定のストリームをミュートにしたりする方法はサポートされなくなりました。 +{@link android.media.AudioManager#setStreamSolo(int,boolean) +setStreamSolo()} メソッドは廃止されたため、代わりに +{@code AudioManager.requestAudioFocus()} メソッドを呼び出す必要があります。同様に、 +{@link android.media.AudioManager#setStreamMute(int,boolean) setStreamMute()} メソッドも廃止され、代わりに {@code AudioManager.adjustStreamVolume()} メソッドを呼び出して、値に {@code ADJUST_MUTE} か {@code ADJUST_UNMUTE} を渡します。 + +</p> + +<h2 id="behavior-test-selection">テキスト選択</h2> + +<img src="{@docRoot}preview/images/text-selection.gif" style="float:right; margin:0 0 20px 30px" width="360" height="640" /> + +<p>ユーザーがアプリ内でテキストを選択するとき、 +<em>切り取り</em>、<em>コピー</em>、<em>貼り付け</em>などのテキスト選択のアクションを +<a href="http://www.google.com/design/spec/patterns/selection.html#selection-text-selection" class="external-link">フローティング ツール バー</a>に表示できるようになりました。 +<a href="{@docRoot}guide/topics/ui/menus.html#CABforViews">個別のビューに対してコンテキスト アクション モードを有効にする</a>にあるように、コンテキスト アクションバーに関するユーザー操作の実装も同様です。 + +</p> + +<p>テキスト選択にフローティング ツール バーを実装するには、既存のアプリに次の変更を加えます。 +</p> +<ol> +<li>{@link android.view.View} オブジェクトか {@link android.app.Activity} オブジェクトで、{@link android.view.ActionMode} の呼び出しを +{@code startActionMode(Callback)} から {@code startActionMode(Callback, ActionMode.TYPE_FLOATING)} に変更します。 +</li> +<li>既存の {@code ActionMode.Callback} の実装を、{@code ActionMode.Callback2} に拡張します。 +</li> +<li>{@code Callback2.onGetContentRect()} メソッドをオーバーライドして、ビューのコンテンツの {@link android.graphics.Rect} オブジェクト)テキスト選択の四角形など)の座標を指定します。 +</li> +<li>四角形の位置が有効でなくなり、無効な要素がこれのみである場合は、{@code ActionMode.invalidateContentRect()} メソッドを呼び出します。 +</li> +</ol> + +<p><a href="{@docRoot}tools/support-library/index.html"> +Android Support Library</a> revision 22.2 を使用している場合、フローティング ツール バーに下方互換性はなく、デフォルトで appcompat が代わりに {@link android.view.ActionMode} オブジェクトを制御することに注意してください。 + +これにより、フローティング ツール バーは表示されなくなります。 +{@link android.support.v7.app.AppCompatActivity} で +{@link android.view.ActionMode} がサポートされるようにするには、 +{@code android.support.v7.app.AppCompatActivity.getDelegate()} を呼び出して、返された +{@link android.support.v7.app.AppCompatDelegate} オブジェクトで +{@code android.support.v7.app.AppCompatDelegate.setHandleNativeActionModesEnabled()} を呼び出し、 入力パラメータを {@code false} に設定します。 +この呼び出して、{@link android.view.ActionMode} オブジェクトの制御がフレームワークに戻ります。 +M Preview を実行する端末ではフレームワークによる +{@link android.support.v7.app.ActionBar} やフローティング ツール バー モードのサポートが可能ですが、M Preview 以前の端末では +{@link android.support.v7.app.ActionBar} モードのみがサポートされます。</p> + +<h2 id="behavior-keystore">Android キーストロークの変更点</h2> +<p>このプレビューでは、 +<a href="{@docRoot}training/articles/keystore.html">Android Keystore プロバイダ</a>による DSA のサポートがなくなります。 +ECDSA は引き続きサポートされます。</p> + +<p>停止時に暗号化を必要としないキーが、ロック画面の(ユーザーや端末の管理者などによる)無効時やリセット時に削除されなくなりました。 +停止時に暗号化を必要とするキーは、これらのイベント時に削除されます。 +</p> + +<h2 id="behavior-network">Wi-Fi とネットワークの変更点</h2> + +<p>このプレビューでは、Wi-Fi API とネットワーク API の動作に次のような変更点が追加されました。</p> +<ul> +<li>オブジェクトの作成者である場合のみ、アプリで{@link android.net.wifi.WifiConfiguration} オブジェクトの状態を変更できます。 +ユーザーや他のアプリによって作成された +{@link android.net.wifi.WifiConfiguration} オブジェクトは変更、削除できません。 +</li> +<li> +以前は、 +{@link android.net.wifi.WifiManager#enableNetwork(int,boolean) enableNetwork()} で +{@code disableAllOthers=true} 設定を使ってアプリから端末を特定の Wi-Fi ネットワークに接続させた場合、端末はセルラー データなどの他のネットワークから切断されていました。 +このプレビューでは、端末が他のネットワークから切断されないようになりました。アプリの {@code targetSdkVersion} が {@code “20”} 以下の場合は、選択した Wi-Fi ネットワークに固定されます。 + +アプリの {@code targetSdkVersion} が {@code “21”} 以上の場合は、マルチネットワーク API( +{@link android.net.Network#openConnection(java.net.URL) openConnection()}メソッド、 +{@link android.net.Network#bindSocket(java.net.Socket) bindSocket()}メソッド、新しい +{@code ConnectivityManager.bindProcessToNetwork()} メソッドなど)を使用してネットワーク トラフィックが選択したネットワークに送られるようにします。 + +</li> +</ul> + +<h2 id="behavior-camera">カメラ サービスの変更点</h2> +<p>このプレビューでは、カメラ サービスの共有リソースへのアクセスモデルが、以前の "先着順" モデルから、"優先度順" に変更されました。 + +この動作の変更には、次のようなものがあります。</p> +<ul> +<li>カメラ端末を開いて構成するなど、カメラのサブシステム リソースへのアクセスは、クライアント アプリケーション プロセスの "優先度" に基づいて与えられます。 +通常、ユーザーに表示されているアクティビティやフォアグラウンドにあるアクティビティのあるアプリケーション プロセスの優先度が最も高くなり、カメラ リソースの取得や使用の信頼性が高まります。 + +</li> +<li>優先度の低いアプリでアクティブなカメラ クライアントは、より優先度の高いアプリケーションがカメラを使おうとした際に使用が中断される場合があります。 +廃止された {@link android.hardware.Camera} API では、使用が中断されたクライアントに +{@link android.hardware.Camera.ErrorCallback#onError(int,android.hardware.Camera) onError()} が呼び出されます。 + +{@link android.hardware.camera2 Camera2} API では、使用が中断されたクライアントに +{@link android.hardware.camera2.CameraDevice.StateCallback#onDisconnected(android.hardware.camera2.CameraDevice) onDisconnected()} が呼び出されます。 +</li> +<li>適切なカメラ ハードウェア付きの端末では、別のアプリケーション プロセスを独立して開き、別のカメラ端末を同時に使用できます。 +ただし、同時アクセスによってパフォーマンスや開いているカメラ端末の性能が著しく低下するマルチプロセスの使用が検出可能になり、カメラ サービスでは許可されなくなりました。 + +この変更によって、同じカメラ端末にアクセスしようとしているアプリが他になくても、優先度の低いクライアントによる使用が中断される場合があります。 + + +</li> +<li> +現在のユーザーを変更すると、アプリ内で前のユーザー アカウントで所有していたアクティブなカメラ クライアントが中断させられることになります。 +カメラへのアクセスは、現在の端末ユーザーが所有するユーザー プロファイルのみに制限されます。つまり、ユーザーが別のアカウントに切り替えた場合、"ゲスト" アカウントはカメラのサブシステムを使用するプロセスを実行したまま去ることはできません。 + + +</li> +</ul> + +<h2 id="behavior-art-runtime">ART ランタイム</h2> +<p>ART ランタイムで、 +{@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()} メソッドに対するアクセスルールを正常に実装できるようになりました。この変更によって、以前のバージョンで Dalvik がアクセス ルールを正しく確認できなかった問題が解決しました。アプリで +{@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()} メソッドを使用していて、アクセス チェックをオーバーライドしたい場合は、 {@link java.lang.reflect.Constructor#setAccessible(boolean) setAccessible()} メソッドを使って入力パラメータを {@code true} に設定します。 + + + + +アプリで +<a href="{@docRoot}tools/support-library/features.html#v7-appcompat">v7 appcompat ライブラリ</a>や +<a href="{@docRoot}tools/support-library/features.html#v7-recyclerview">v7 recyclerview ライブラリ</a>を使用する場合は、これらのライブラリの最新バージョンを使用するようアプリをアップデートする必要があります。 +アップデートしない場合は、XML から参照するカスタム クラスがアップデートされていて、クラス コンストラクタがアクセス可能であることを確認しておく必要があります。 +</p> + +<p>このプレビューでは、動的リンクの動作がアップデートされました。動的リンクでは、ライブラリの {@code soname} とそのパス(<a href="https://code.google.com/p/android/issues/detail?id=6670" class="external-link"> +public bug 6670</a>)の違いを認識でき、{@code soname} が実装されています。 + + +以前動作していたアプリで間違った {@code DT_NEEDED} エントリを持つもの(ビルドマシンのファイル システムの絶対パスなど)は、読み込み時に失敗する場合があります。 +</p> + +<p>{@code dlopen(3) RTLD_LOCAL} フラグは正常に実装されました。 +{@code RTLD_LOCAL} はデフォルトのため、 +{@code RTLD_LOCAL} を明示的に使用しない {@code dlopen(3)} への呼び出しは影響を受けます(アプリで明示的に {@code RTLD_GLOBAL} を使用している場合を除く)。 +{@code RTLD_LOCAL} では、後に +{@code dlopen(3)} への呼び出しで読み込まれたライブラリで記号は使用できません({@code DT_NEEDED} エントリによって参照された場合とは逆)。</p> +</p> + +<h2 id="behavior-apk-validation">APK の検証</h2> +<p>プラットフォームでより厳しい APK の検証が行われるようになりました。APK がマニフェスト ファイルで宣言されているにもかかわらず、APK 自体に存在しない場合、その APK は破損しているとみなされます。 +コンテンツが一部でも削除された場合は、APK の再署名が必要になります。 +</p> + +<h2 id="behavior-afw">Android for Work の変更点</h2> +<p>このプレビューには、次のような Android for Work に関する動作の変更点が含まれています。</p> +<ul> +<li><strong>個人のコンテキストでの仕事用の連絡先</strong>ユーザーが過去の通話履歴を表示したときに、Google Dialer +Call Log に仕事用の連絡先が表示されるようになりました。{@code DevicePolicyManager.setCrossProfileCallerIdDisabled()} を {@code true} に設定すると、Google Dialer Call Log に仕事用プロファイルの連絡先は表示されなくなります。 + +{@code DevicePolicyManager.setBluetoothContactSharingDisabled()} を {@code false} に設定した場合のみ、Bluetooth 経由で端末に仕事用の連絡先と個人用の連絡先を表示できます。 + +デフォルトでは、{@code true} に設定されています。 + +</li> +<li><strong>WiFi 設定の削除:</strong>プロファイル オーナーによって追加された WiFi 設定(@link android.net.wifi.WifiManager#addNetwork(android.net.wifi.WifiConfiguration) +addNetwork()} メソッドへの呼び出しなどを介して)は、その仕事用プロファイルが削除されると同時に削除されます。 + +</li> +<li><strong>WiFi 設定のロック:</strong>アクティブなデバイス オーナーによって作成された WiFi 設定は、ユーザーが修正したり削除したりできなくなりました。 +ユーザーに {@link android.os.UserManager} 定数 +{@link android.os.UserManager#DISALLOW_CONFIG_WIFI} が設定されていない限り、ユーザー自身の WiFi 設定を作成、修正することはできます。 +</li> +<li><strong>Google アカウントの追加経由での Work Policy Controller のダウンロード:</strong>Work Policy Controller(WPC)アプリ経由で管理する必要のある Google アカウントがマネージド コンテキスト外で端末に追加されると、アカウントの追加フローでユーザーに適切な WPC をインストールするよう要求します。この動作は、初期の端末のセットアップ ウィザードでの +<strong>[設定]> [アカウント]</strong> で追加されるアカウントにも適用されます。 + + +</li> +<li><strong>特定の DevicePolicyManager API の動作の変更点: </strong> +{@link android.app.admin.DevicePolicyManager#setCameraDisabled(android.content.ComponentName,boolean) setCameraDisabled()} メソッドの呼び出しは、呼び出し元のユーザーのカメラにのみ影響を与えます。マネージド プロファイルから呼び出した場合は、プライマリ ユーザーで実行しているカメラ アプリに影響はありません。 + +さらに、 +{@link android.app.admin.DevicePolicyManager#setKeyguardDisabledFeatures(android.content.ComponentName,int) setKeyguardDisabledFeatures()} メソッドは、デバイス オーナーに加えてプロファイル オーナーでも利用可能になりました。 +プロファイル オーナーは、これらのキーガード制限を設定できます: + +<ul> +<li>プロファイルの親ユーザーのキーガード設定に影響を与える {@link android.app.admin.DevicePolicyManager#KEYGUARD_DISABLE_TRUST_AGENTS} と {@link android.app.admin.DevicePolicyManager#KEYGUARD_DISABLE_FINGERPRINT}。 + +</li> +<li>マネージド プロファイルのアプリケーションで生成された通知のみに影響を与える {@link android.app.admin.DevicePolicyManager#KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS}。 +</li> +</ul> +</li> +</ul> diff --git a/docs/html-intl/intl/ja/preview/features/runtime-permissions.jd b/docs/html-intl/intl/ja/preview/features/runtime-permissions.jd new file mode 100644 index 0000000..f582756 --- /dev/null +++ b/docs/html-intl/intl/ja/preview/features/runtime-permissions.jd @@ -0,0 +1,794 @@ +page.title=パーミッション +page.tags=previewresources, androidm +page.keywords=パーミッション,実行時,プレビュー +page.image={@docRoot}preview/features/images/permissions_check.png +@jd:body + + +<div id="qv-wrapper"> + <div id="qv"> + <h2>クイックビュー</h2> + <ul> + <li>アプリのターゲットが M Preview SDK の場合、インストール時ではなく実行時に、パーミッションを付与するようユーザーに求めます。 +</li> + <li>ユーザーはいつでもアプリの [設定] 画面からパーミッションを取り消すことができます。 +</li> + <li>アプリは実行時に毎回、必要なパーミッションがあることを確認する必要があります。 +</li> + </ul> + + <h2>本書の内容</h2> + <ol> + <li><a href="#overview">概要</a></li> + <li><a href="#coding">実行時のパーミッションのコード</a></li> + <li><a href="#testing">実行時のパーミッションをテストする</a></li> + <li><a href="#best-practices">ベスト プラクティス</a></li> + </ol> + +<!-- + <h2>Related Samples</h2> + <ol> + <li></li> + </ol> +--> + +<!-- + <h2>See also</h2> + <ol> + <li></li> + </ol> +--> + </div> <!-- qv --> +</div> <!-- qv-wrapper --> + + +<p> + M Developer Preview では、アプリをインストールしてアップグレードするユーザーのプロセスを効率化する新しいアプリのパーミッション モデルが導入されました。 +M Preview で実行しているアプリで新しいパーミッション モデルがサポートされている場合、ユーザーはアプリをインストールまたはアップグレードするときにパーミッションを付与する必要はありません。その代わりに、アプリは必要になるとパーミッションを要求し、パーミッションを確認するよう求めるダイアログが表示されます。 + + + + +</p> + +<p> + アプリで新しいパーミッション モデルがサポートされている場合、以前のバージョンの Android を実行している端末で、以前のパーミッション モデルを使ってインストールして実行することもできます。 + + +</p> + +<h2 id="overview"> + 概要 +</h2> + +<p> + M Developer Preview とともに、プラットフォームでは新しいアプリのパーミッション モデルが導入されました。 +この新しいモデルの主要なコンポーネントの概要を次に示します。 +</p> + +<ul> + <li> + <strong>パーミッションを宣言する:</strong> アプリは、以前の Android プラットフォームと同様に、マニフェストで必要なすべてのパーミッションを宣言します。 + + </li> + + <li> + <strong>パーミッション グループ:</strong> パーミッションは、その機能に基づいて<em>パーミッション グループ</em>に分けられます。 +たとえば、<code>CONTACTS</code> パーミッション グループにはユーザーの連絡先とプロフィール情報を読み書きするパーミッションが含まれます。 + + + </li> + + <li> + <p><strong>インストール時に付与される制限付きのパーミッション:</strong> ユーザーがアプリをインストールまたはアップデートするとき、{@link + android.content.pm.PermissionInfo#PROTECTION_NORMAL PROTECTION_NORMAL} に該当する、アプリが要求するすべてのパーミッションがアプリに付与されます。 + + + たとえば、目覚まし時計とインターネットのパーミッションは {@link + android.content.pm.PermissionInfo#PROTECTION_NORMAL PROTECTION_NORMAL} に該当するため、インストール時に自動的にそれらのパーミッションが付与されます。 + + </p> + + <p>システムは、<a href="#system-apps">システムアプリと署名のパーミッション</a>に記載のとおり、アプリの署名とシステムのパーミッションも付与することがあります。 + +ユーザーは、インストール時にパーミッションを付与するように促すメッセージは表示<em>されません</em>。 +</p> + </li> + + <li> + <strong>実行時にユーザーがパーミッションを付与する:</strong> アプリがパーミッションを要求すると、ユーザーにダイアログが表示されます。その後、アプリのコールバック関数を呼び出して、パーミッションが付与されているかどうかを知らせます。 + +ユーザーがパーミッションを付与する場合、アプリ マニフェストで宣言されたパーミッションの機能領域にあるすべてのパーミッションがアプリに付与されます。 + + + </li> + +</ul> + +<p> + このパーミッション モデルにより、パーミッションを要求する機能に対するアプリの動作方法が変わります。 +このモデルに合わせるために、従う必要のある開発プラクティスの概要を次に示します。 + +</p> + +<ul> + + <li> + <strong>常にパーミッションを確認する:</strong> アプリがパーミッションを必要とするアクションを実行する必要があるとき、まずパーミッションが既にあるかどうかを確認する必要があります。 + +パーミッションがない場合、そのパーミッションを付与するよう要求します。 + + </li> + + <li> + <strong>パーミッションの不足をスムーズに処理する:</strong> アプリに適切なパーミッションが付与されていない場合、エラーが完全に処理される必要があります。 + + たとえば、追加機能に対してのみパーミッションが必要な場合、アプリはその機能を無効にできます。 +アプリが機能するためにパーミッションが必須である場合、アプリはすべての機能を無効にしてパーミッションを付与する必要があることをユーザーに知らせることがあります。 + + + </li> + + <div class="figure" style="width:220px" id="fig-perms-screen"> + <img src="{@docRoot}preview/features/images/app-permissions-screen_2x.png" srcset="{@docRoot}preview/features/images/app-permissions-screen.png 1x, {@docRoot}preview/features/images/app-permissions-screen_2x.png 2x" alt="" width="220"> + <p class="img-caption"> + <strong>図 1.</strong>アプリの [設定] のパーミッション画面。 + </p> + </div> + + <li> + <strong>パーミッションは取り消し可能:</strong> ユーザーはいつでもアプリのパーミッションを取り消すことができます。 +アプリのパーミッションをオフにすると、アプリに通知<em>されません</em>。 +アプリは制限されたアクションを実行する前に、必要なパーミッションがあることを確認する必要があります。 + + </li> +</ul> + +<p class="note"> + <strong>注:</strong> アプリのターゲットが M Developer Preview の場合、新しいパーミッション モデルを使う<em>必要があります</em>。 + +</p> + +<p> + M Developer Preview のローンチ時点では、すべての Google アプリで新しいパーミッション モデルが完全に実装されているわけではありません。 +Google はこれらのアプリを M Developer Preview 中にアップデートして、パーミッションの切り替え設定を完全に実装します。 + + +</p> + +<p class="note"> + <strong>注:</strong> アプリに独自の API サーフェスがある場合、まず呼び出し側にそのデータへのアクセスに必要なパーミッションがあることを確認しないままパーミッションをプロキシしないでください。 + + +</p> + +<h3 id="system-apps"> + システムアプリと署名のパーミッション +</h3> + +<p> + 本来、ユーザーがアプリをインストールするとき、システムはアプリに + {@link android.content.pm.PermissionInfo#PROTECTION_NORMAL + PROTECTION_NORMAL} のみを付与します。ただし、特定の環境では、アプリにより多くのパーミッションが付与されます。 + +</p> + +<ul> + <li>アプリがシステム イメージの一部である場合、そのマニフェストにリストされているすべてのパーミッションが自動的に付与されます。 + + </li> + + <li>アプリが {@link + android.content.pm.PermissionInfo#PROTECTION_SIGNATURE PROTECTION_SIGNATURE} に該当するマニフェストでパーミッションを要求し、アプリがこれらのパーミッションを宣言したアプリと同じ証明書で署名される場合、要求しているアプリに対してこれらのパーミッションがインストール時に付与されます。 + + + + </li> +</ul> + +<p> + + +どちらの場合でも、ユーザーはシステムの [<strong>設定</strong>] 画面に移動して [<strong>アプリ</strong>] > <i>[app_name]</i> > [<strong>パーミッション</strong>] を選ぶと、いつでもパーミッションを取り消すことができます。アプリは実行時にパーミッションを継続して確認し、必要に応じて要求する必要があります。 + + +</p> + +<h3 id="compatibility"> + 上方互換と下方互換 +</h3> + +<p> + アプリのターゲットが M Developer Preview 以外の場合、M Preview 端末でも以前のパーミッション モデルを引き続き使います。 +ユーザーがアプリをインストールするとき、ユーザーはアプリのマニフェストでリストされているすべてのパーミッションを付与するように要求されます。 + + +</p> + +<p class="note"> + <strong>注:</strong> M Developer Preview を実行している端末で、ユーザーはアプリの [設定] 画面から従来のアプリを含むすべてのアプリのパーミッションをオフにできます。 + +従来のアプリに対してパーミッションをオフにすると、適切な機能がサイレント状態で無効になります。 +アプリがそのパーミッションを必要とする操作を実行しようとするとき、その操作によって必ずしも例外が発生するとは限りません。 + +代わりに、空のデータセットを返す、エラーを示す、または予期しない動作を返すことがあります。 +たとえば、パーミッションなしでカレンダーを照会すると、メソッドは空のデータセットを返します。 + +</p> + +<p> + M Preview を実行していない端末で新しいパーミッション モデルを使ってアプリをインストールする場合、他のすべてのアプリと同様に扱われ、インストール時に、すべての宣言されたパーミッションを付与するようユーザーに求めます。 + + + +</p> + +<p class="note"> + <strong>注:</strong> Preview リリースの場合、M Preview SDK に SDK の最小バージョンを設定して Preview SDK でコンパイルする必要があります。 +つまり、Developer Preview 中は従来のプラットフォームでそのようなアプリをテストできません。 + + +</p> + +<h3 id="perms-vs-intents">パーミッションとインテント</h3> + +<p> + 多くの場合、アプリがタスクを実行するには 2 つの方法から選択できます。 +アプリ自体が操作を実行するパーミッションを要求できます。 +アプリでインテントを使うようにして、別のアプリがそのタスクを実行するようにすることもできます。 + +</p> + +<p> + たとえば、端末のカメラで写真を撮る機能がアプリに必要だとします。 +アプリは <code>android.permission.CAMERA</code> パーミッションをリクエストでき、それによりアプリが直接カメラにアクセスできるようになります。 + +そのとき、アプリはカメラの API を使ってカメラを制御し、写真を撮ります。 +このアプローチにより、アプリが写真のプロセスを完全に制御し、カメラの UI をアプリに組み込むことができます。 + + +</p> + +<p> + ただし、そのような制御が不要な場合は、{@link + android.provider.MediaStore#ACTION_IMAGE_CAPTURE ACTION_IMAGE_CAPTURE} インテントを使うだけで画像を要求できます。 +インテントを開始すると、カメラアプリ(デフォルトのカメラアプリがない場合)を選んでアプリで写真を撮るよう求めるメッセージが表示されます。 + +カメラアプリはアプリの {@link + android.app.Activity#onActivityResult onActivityResult()} メソッドに写真を返します。 +</p> + +<p> + 同様に、ユーザーの連絡先にアクセスするなどして電話をかける必要がある場合、適切なインテントを作成するか、パーミッションを要求して適切なオブジェクトに直接アクセスできます。 + +各アプローチにはメリットとデメリットがあります。 + +</p> + +<p> + パーミッションを使う場合: +</p> + +<ul> + <li>操作を実行するとき、アプリによってユーザーの操作感が完全に制御されます。 +ただし、そのような幅広い制御により、適切な UI を設計する必要があるため、タスクが複雑化します。 + + </li> + + <li>操作を初めて実行するときに、ユーザーに一度だけパーミッションの付与を求めるメッセージが表示されます。 +その後、アプリはユーザーからの介入は必要とせずに操作を実行できます。 +ただし、ユーザーがパーミッションを付与しない(または後でパーミッションを取り消す)場合、アプリは操作を一切実行できなくなります。 + + + </li> +</ul> + +<p> + インテントを使う場合: +</p> + +<ul> + <li>操作用に UI を設計する必要はありません。インテントを処理するアプリでは UI が提供されますが、これはユーザーの操作感を制御できないことを意味します。 + +ユーザーはこれまでに見たことのないアプリと相互操作することになります。 + + </li> + + <li>操作に対してデフォルトのアプリを持たないユーザーの場合、ユーザーにアプリの選択を求めるメッセージが表示されます。ユーザーがデフォルトのハンドラを指定しない場合、操作のたびに別のダイアログで指定する必要があることがあります。 + + + + </li> +</ul> + +<h2 id="coding">実行時のパーミッションのコード</h2> + +<p> + アプリのターゲットが新しい M Developer Preview の場合、新しいパーミッション モデルを使う必要があります。 +つまり、マニフェストで必要なパーミッションを宣言する他に、実行時にパーミッションがあることを確認し、まだパーミッションがない場合にはパーミッションを要求します。 + + + +</p> + +<h3 id="enabling"> + 新しいパーミッション モデルを有効にする +</h3> + +<p> + 新しい M Developer Preview パーミッション モデルを有効にするには、アプリの <code>targetSdkVersion</code> 属性を <code>"MNC"</code> に、<code>compileSdkVersion</code> を <code>"android-MNC"</code> に設定します。 + +このように設定することで、新しいパーミッション機能すべてが有効になります。 + +</p> + +<p> + Preview リリースの場合、<code>minSdkVersion</code> を <code>"MNC"</code> に設定して Preview SDK でコンパイルする必要があります。 + +</p> + +<h3 id="m-only-perm"> + M Preview のみに対するパーミッションの設計 +</h3> + +<p> + アプリ マニフェストで新しい <code><uses-permission-sdk-m></code> 要素を使って、M Developer Preview のみで必要なパーミッションを表示できます。 +このようにしてパーミッションを宣言すると、アプリを以前の端末にインストールする場合はユーザーにメッセージが表示されないか、アプリにパーミッションが付与されません。<code><uses-permission-sdk-m></code> 要素を使うと、新しいパーミッションを追加してインストールをアップデートするときにパーミッションの付与を強制せずにアプリのバージョンがアップデートされます。 + + + + + + +</p> + +<p> + M Developer Preview を使ってアプリが端末で実行されている場合、<code><uses-permission-sdk-m></code> は <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> と同じように動作します。 + + + アプリをインストールするとき、パーミッションの付与を求めるメッセージは表示されず、アプリは必要なときにパーミッションを要求します。 + +</p> + +<h3 id="prompting"> + パーミッションについてのダイアログを表示する +</h3> + +<p> + アプリで新しい M Developer Preview パーミッション モデルが使われている場合、M Preview を実行している端末でアプリを初めて起動するとき、すべての権限を付与する必要はありません。 + +その代わりに、アプリは必要なときにパーミッションを要求します。 +アプリがパーミッションを要求すると、ユーザーにダイアログが表示されます。 + +</p> + +<p> + SDK 22 以降がインストールされた端末でアプリを実行する場合、アプリでは以前のパーミッション モデルが使われます。 +ユーザーがアプリをインストールすると、アプリがそのマニフェストで要求するすべてのパーミッションの付与を求めるメッセージが表示されます。ただし、<code><uses-permission-sdk-m></code> というラベルの付いたパーミッションは例外です。 + + +</p> + +<h4 id="check-platform">アプリが実行されているプラットフォームを確認する</h4> + +<p> + このパーミッション モデルは、M Developer Preview を実行している端末でのみサポートされます。 +これらのメソッドのいずれかを呼び出す前に、アプリは {@link android.os.Build.VERSION#CODENAME + Build.VERSION.CODENAME} の値を確認してどのプラットフォーム上で実行されているのかを確認する必要があります。 + +端末で M Developer Preview が実行されている場合、{@link android.os.Build.VERSION#CODENAME CODENAME} は <code>"MNC"</code> です。 + +</p> + +<h4 id="check-for-permission">アプリに必要なパーミッションがあるかどうかを確認する</h4> + +<p>ユーザーがパーミッションを要求する動作を行うと、アプリは現在この操作を実行するためのパーミッションがあるかどうかを確認します。 + + +確認するために、アプリは <code>Context.checkSelfPermission(<i>permission_name</i>)</code> を呼び出します。ユーザーが既にパーミッションを付与していることをアプリが認識している場合でも、ユーザーはいつでもアプリのパーミッションを取り消すことができるため、この確認が行われます。 + + +たとえば、ユーザーがアプリを使って写真を撮る場合、アプリは <code>Context.checkSelfPermission(Manifest.permission.CAMERA)</code> を呼び出します。 + +</p> + +<p class="table-caption" id="permission-groups"> + <strong>表 1.</strong>パーミッションとパーミッション グループ。</p> +<table> + <tr> + <th scope="col">パーミッション グループ</th> + <th scope="col">パーミッション</th> + </tr> + + <tr> + <td><code>android.permission-group.CALENDAR</code></td> + <td> + <ul> + <li> + <code>android.permission.READ_CALENDAR</code> + </li> + </ul> + <ul> + <li> + <code>android.permission.WRITE_CALENDAR</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.CAMERA</code></td> + <td> + <ul> + <li> + <code>android.permission.CAMERA</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.CONTACTS</code></td> + <td> + <ul> + <li> + <code>android.permission.READ_CONTACTS</code> + </li> + <li> + <code>android.permission.WRITE_CONTACTS</code> + </li> + <li> + <code>android.permission.READ_PROFILE</code> + </li> + <li> + <code>android.permission.WRITE_PROFILE</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.LOCATION</code></td> + <td> + <ul> + <li> + <code>android.permission.ACCESS_FINE_LOCATION</code> + </li> + <li> + <code>android.permission.ACCESS_COARSE_LOCATION</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.MICROPHONE</code></td> + <td> + <ul> + <li> + <code>android.permission.RECORD_AUDIO</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.PHONE</code></td> + <td> + <ul> + <li> + <code>android.permission.READ_PHONE_STATE</code> + </li> + <li> + <code>android.permission.CALL_PHONE</code> + </li> + <li> + <code>android.permission.READ_CALL_LOG</code> + </li> + <li> + <code>android.permission.WRITE_CALL_LOG</code> + </li> + <li> + <code>com.android.voicemail.permission.ADD_VOICEMAIL</code> + </li> + <li> + <code>android.permission.USE_SIP</code> + </li> + <li> + <code>android.permission.PROCESS_OUTGOING_CALLS</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.SENSORS</code></td> + <td> + <ul> + <li> + <code>android.permission.BODY_SENSORS</code> + </li> + </ul> + <ul> + <li> + <code>android.permission.USE_FINGERPRINT</code> + </li> + </ul> + </td> + </tr> + + <tr> + <td><code>android.permission-group.SMS</code></td> + <td> + <ul> + <li> + <code>android.permission.SEND_SMS</code> + </li> + <li> + <code>android.permission.RECEIVE_SMS</code> + </li> + <li> + <code>android.permission.READ_SMS</code> + </li> + <li> + <code>android.permission.RECEIVE_WAP_PUSH</code> + </li> + <li> + <code>android.permission.RECEIVE_MMS</code> + </li> + <li> + <code>android.permission.READ_CELL_BROADCASTS</code> + </li> + </ul> + </td> + </tr> + +</table> + +<h4 id="request-permissions">必要に応じてパーミッションを要求する</h4> + +<p>アプリに必要なパーミッションがない場合、アプリは <code>Activity.requestPermissions(String[], int)</code> メソッドを呼び出して適切なパーミッションを要求します。 + +アプリは必要なパーミッションと整数の「要求コード」を渡します。 + + このメソッドは非同期に機能します。このメソッドはすぐに返され、ユーザーがダイアログ ボックスに応答した後、システムはその結果と一緒にアプリのコールバック メソッドを呼び出し、アプリが <code>requestPermissions()</code> に渡すのと同じ「要求コード」を渡します。 + + +</p> + + <p>次のコードは、ユーザーの連絡先を読み込むパーミッションがアプリにあることを確認し、必要に応じてパーミッションを要求します。 +</p> + +<pre> +if (checkSelfPermission(Manifest.permission.READ_CONTACTS) + != PackageManager.PERMISSION_GRANTED) { + requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, + MY_PERMISSIONS_REQUEST_READ_CONTACTS); + + // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an + // app-defined int constant + + return; +} +</pre> + +<h4 id="handle-response">パーミッションの要求への応答を処理する</h4> + +<p> + アプリがパーミッションを要求すると、システムによってダイアログ ボックスが表示されます。 +ユーザーが応答すると、システムはアプリの <code>Activity.onRequestPermissionsResult(int, String[], int[])</code> を呼び出し、ユーザーの応答を渡します。 + +アプリはそのメソッドをオーバーライドする必要があります。コールバックには開発者が <code>requestPermissions()</code> に渡したのと同じ要求コードが渡されます。 + +たとえばアプリが <code>READ_CONTACTS</code> アクセスを要求する場合、次のコールバック メソッドが含まれる可能性があります。 + + +</p> + +<pre> +@Override +public void onRequestPermissionsResult(int requestCode, + String permissions[], int[] grantResults) { + switch (requestCode) { + case MY_PERMISSIONS_REQUEST_READ_CONTACTS: { + if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { + + // permission was granted, yay! do the + // calendar task you need to do. + + } else { + + // permission denied, boo! Disable the + // functionality that depends on this permission. + } + return; + } + + // other 'switch' lines to check for other + // permissions this app might request + } +} +</pre> + + <p>ユーザーがパーミッションを付与すると、システムは、機能領域のアプリ マニフェストがリストするすべてのパーミッションを付与します。 +ユーザーが要求を拒否する場合は、適切なアクションを取ってください。 +たとえば、このパーミッションに応じて、すべてのメニュー アクションを無効にできます。 + + </li> +</p> + +<p> + ユーザーにパーミッションの付与を確認するとき、ユーザーにそのパーミッションについて再度確認しないようにするオプションがあります。 +この場合、アプリが <code>requestPermissions()</code> を使ってパーミッションを確認すると、システムはその要求をすぐに拒否します。 + +この場合、システムはユーザーが要求を再度明示的に拒否する場合と同様に <code>onRequestPermissionsResult()</code> を呼び出します。 + +このため、アプリではユーザーとの直接的なやり取りが発生することが想定されません。 + +</p> + +<h2 id="testing">実行時のパーミッションをテストする</h2> + + +<p> + アプリのターゲットが M Developer Preview の場合、パーミッションが正しく処理されることをテストする必要があります。 +アプリ起動時に特定のパーミッションがアプリにあることは想定できません。 +アプリが初めて起動されるとき、パーミッションがない可能性が高く、ユーザーはいつでもパーミッションを取り消すまたは復元できます。 + + +</p> + +<p> + アプリがすべてのパーミッションの状況下で確実に正しく動作することをテストしてください。 +M Preview SDK とともに、新しい <a href="{@docRoot}tools/help/adb.html">Android デバッグ ブリッジ(adb)</a>コマンドが導入され、試す必要のあるあらゆるパーミッション設定でアプリをテストできます。 + + + +</p> + +<h3> + 新しい adb コマンドとオプション +</h3> + +<p> + M Preview SDK Platform-tools では、アプリがパーミッションをどう処理するかをテストするための、いくつかの新しいコマンドが導入されました + +</p> + +<h4> + パーミッション付きでインストールする +</h4> + +<p> + <a href="{@docRoot}tools/help/adb.html#move"><code>adb + install</code></a> コマンドの新しい <code>-g</code> オプションを使ってアプリをインストールし、そのマニフェストにリストされるすべてのパーミッションを付与できます。 + +</p> + +<pre class="no-pretty-print"> +$ adb install -g <path_to_apk> +</pre> + +<h4> + パーミッションの付与と取り消し +</h4> + +<p> + 新しい ADB <a href="{@docRoot}tools/help/adb.html#pm">Package Manager(pm)</a>コマンドを使って、インストールされているアプリにパーミッションを付与したり取り消したりできます。この機能は自動化されたテストに役立ちます。 + + +</p> + +<p> + パーミッションを付与するには、Package Manager の <code>grant</code> コマンドを使います。 +</p> + +<pre class="no-pretty-print"> +$ adb pm grant <package_name> <permission_name> +</pre> + +<p> + たとえば、com.example.myapp パッケージ パーミッションを付与してオーディオを録音するには、このコマンドを使います。 + +</p> + +<pre class="no-pretty-print"> +$ adb pm grant com.example.myapp android.permission.RECORD_AUDIO +</pre> + +<p> + パーミッションを取り消すには、Package Manager の <code>revoke</code> コマンドを使います。 +</p> + +<pre class="no-pretty-print"> +$ adb pm revoke <package_name> <permission_name> +</pre> + +<h2 id="best-practices">ベスト プラクティス</h2> + +<p> + 新しいパーミッション モデルにより、ユーザーはよりスムーズな操作感を得られ、アプリを簡単にインストールできるようになり、アプリが実行している内容に満足します。 + +新しいモデルを最大限に活用するために、次のベスト プラクティスをお勧めします。 + +</p> + + +<h3 id="bp-what-you-need">必要なパーミッションのみを要求する</h3> + +<p> + パーミッションを要求するたびに、ユーザーに決定するよう強制します。 + ユーザーが要求を却下すると、アプリの機能が低下します。 + これらの要求回数は最小限にしてください。 +</p> + +<p> + たとえば、アプリがパーミッションを要求する代わりに、<a href="{@docRoot}guide/components/intents-filters.html">インテント</a>を使って必要な機能を取得できる場合がよくあります。 + +アプリが携帯電話のカメラで写真を撮る必要がある場合、そのアプリでは {@link + android.provider.MediaStore#ACTION_IMAGE_CAPTURE + MediaStore.ACTION_IMAGE_CAPTURE} インテントを使用できます。 +アプリがインテントを実行すると、写真を撮るためのインストール済みのカメラアプリを選ぶようユーザーに促します。 + + +</p> + +<h3 id="bp-dont-overwhelm"> + ユーザーを疲れさせない +</h3> + +<p> + ユーザーにパーミッションをたくさん要求すると、ユーザーを疲れさせてしまい、アプリが終了される原因になります。代わりに、ユーザーには必要なパーミッションのみを要求してください。 + + +</p> + +<p> + アプリ対して 1 つ以上のパーミッションが必須である場合もあります。その場合は、アプリの起動後すぐに、すべてのパーミッションを要求することが合理的である場合があります。 + +たとえば、カメラアプリを作成する場合、アプリは端末のカメラにアクセスする必要があります。 +アプリを初めて起動するときにカメラの使用についてのパーミッションを求められても驚かないはずです。 + +ただし、同じアプリにユーザーの連絡先と写真を共有する機能もある場合は、最初の起動時にパーミッションを要求<em>しない</em>方が無難です。 + +その代わりに、ユーザーが「共有」機能を使うまで待ち、そのときにパーミッションを要求します。 + +</p> + +<p> + アプリにチュートリアルが含まれる場合は、チュートリアルのシーケンスの最後で、アプリに必須のパーミッションを要求する方が合理的です。 + +</p> + +<h3 id="bp-explain"> + パーミッションが必要な理由を説明する +</h3> + +<p> + <code>requestPermissions()</code> を呼び出すとき、システムによって表示されるパーミッション ダイアログにはアプリが必要としているパーミッションは表示されますが、理由は表示されません。 + +これによりユーザーが困惑する場合もあります。 + <code>requestPermissions()</code> を呼び出す前に、アプリがパーミッションを必要としている理由をユーザーに説明するのはよい方法です。 + +</p> + +<p> + たとえば、カメラアプリでは、位置情報サービスを使って写真に位置情報タグを付けられるようにする場合があります。 +通常のユーザーは、写真に位置情報が含まれる場合があることを認識していない可能性があり、なぜカメラアプリで位置情報が必要なのか困惑する可能性があります。 + +この場合、アプリが <code>requestPermissions()</code> を呼び出す<em>前</em>に、この機能についてユーザーに知らせることをお勧めします。 + + +</p> + +<p> + その方法として、これらの要求をアプリのチュートリアルに組み込むこともできます。チュートリアルでは、アプリの各機能を順番に表示できるので、必要なパーミッションを説明できます。 + +たとえば、カメラアプリのチュートリアルでは、「連絡先と写真を共有する」機能について説明し、ユーザーの連絡先を参照するためにアプリにパーミッションが必要であることをユーザーに知らせることができます。 + + +その後、アプリは <code>requestPermissions()</code> を呼び出して、ユーザーにそのアクセスを求めることができます。 +もちろん、すべてのユーザーがチュートリアルに従うわけではないため、アプリの通常操作中にパーミッションを確認して要求することも必要です。 + + +</p> diff --git a/docs/html-intl/intl/ja/preview/overview.jd b/docs/html-intl/intl/ja/preview/overview.jd new file mode 100644 index 0000000..4cefdd1 --- /dev/null +++ b/docs/html-intl/intl/ja/preview/overview.jd @@ -0,0 +1,362 @@ +page.title=プログラム概要 +page.metaDescription=Android M Developer Preview では、Android の次のバージョンでアプリをテストして最適化するためのすべてを備えています。 +page.image=images/cards/card-preview_16-9_2x.png +page.tags="preview", "developer", "android" + +@jd:body + +<p> + <strong>Android M Developer Preview</strong> では、Android の次のバージョンでアプリをテストして最適化するためのすべてを備えています。 + +M Developer Preview ツールをダウンロードするだけで、無料ですぐにご利用いただけます。 + +</p> + +<div style="background-color:#eceff1;padding:1em;"> +<div class="wrap"> + <div class="cols"> + <div class="col-4of12"> + <h5> + ハードウェアとエミュレータのシステム イメージ + </h5> + + <p> + Nexus 5、6、9、Nexus Player(TV 向け)やエミュレータでアプリをテストしましょう。 + + </p> + </div> + + <div class="col-4of12"> + <h5> + 最新プラットフォーム コード + </h5> + + <p> + プレビューで複数のアップデートが提供されますので、最新プラットフォームの変更に応じてテストできます。 + + </p> + </div> + + <div class="col-4of12"> + <h5> + OTA でのアップデート + </h5> + + <p> + デバイスに初期プレビューをコピーしたら、無線経由でアップデートを入手できます。 + + </p> + </div> + </div> + + <div class="cols"> + + + <div class="col-4of12"> + <h5> + 新しい動作と機能 + </h5> + + <p> + 新しい実行時パーミッション モデルや省電力機能など、新しいプラットフォームの動作をあらかじめサポートする + + </p> + </div> + + <div class="col-4of12"> + <h5> + 開発者が報告した問題に対する優先度ウィンドウ + </h5> + + <p> + 最初の数週間で開発者から報告のあった問題について優先度を設定し、可能な限り早くテストを行いフィードバックを提供できるようにします。 + + </p> + </div> + + <div class="col-4of12"> + <h5> + フィードバックとサポート + </h5> + + <p> + <a href="https://code.google.com/p/android-developer-preview/">Issue Tracker</a> で問題を報告し、フィードバックをお送りください。 + <a href="http://g.co/dev/AndroidMDevPreview">M Developer コミュニティ</a> で他の開発者とつながりましょう。 + + </p> + </div> + </div> +</div> +</div> + +<!-- +<p> + With the M Developer Preview, you'll get an early start on testing your apps, + with enough time to make adjustments before the public platform release later + in the year. We'll provide several updates to the Preview tools in the weeks + ahead, so you can keep in sync with the latest changes as the platform moves + toward launch. +</p> +<img src="{@docRoot}preview/images/m-preview-timeline.png" alt= +"Preview program timeline" id="timeline"> +<p> + You can help us improve the platform by <a href= + "https://code.google.com/p/android-developer-preview/">reporting issues</a> + through our feedback channels. This is especially + critical in the first month of the preview, when we’ll be giving priority to + developer-reported issues and feedback. +</p> --> + + +<h2 id="timeline"> + タイムラインとアップデート +</h2> +<img src="{@docRoot}preview/images/m-preview-timeline-crop.png" alt="Preview program timeline" id="timeline"> +<p> + M Developer Preview は 5 月 28 日から最終の Android M SDK まで実行されます。Android M SDK はまもなく、2015 年第三四半期に予定されている正式公開の前にリリースされます。 + + +</p> + +<p> + 開発の主なマイルストーンごとにテスト端末へアップデートを配信する予定としています。 + 暫定マイルストーンは以下のとおりです。 +</p> + +<ul> + <li> + <strong>Preview 1</strong>(初期プレビュー リリース、5 月下旬) + </li> + + <li> + <strong>Preview 2</strong>(6 月下旬/7 月上旬) + </li> + + <li> + <strong>Preview 3</strong>(最終近く、7 月下旬) + </li> +</ul> + +<p> + アップデートは第三四半期後半に予定されている<strong>最終 SDK</strong> で終了します。最終版では新しい Android に対する正式な API や最終的なシステム動作や機能が提供されます。 + + +</p> + +<p> + Android M でのテストや開発に際しては、Preview アップデートがリリースされるたびに<strong>開発環境を最新に保つ</strong>ことを強くお勧めします。 + + プロセスをより容易にするため、既に Preview ビルドがインストールされた端末に<strong>無線経由でアップデート(OTA)</strong>を配信します。また手動でダウンロードして展開できるシステム イメージもご提供します。 + + +</p> +<p class="note"> + <strong>注:</strong> 最終 SDK とシステム イメージは OTA では配信できません。代わりにテスト端末に<strong>手動でコピー</strong>する必要があります。</strong> + + +</p> + +<p> + Preview アップデートをご利用いただけるようになった際は <a href="http://android-developers.blogspot.com/">Android デベロッパー ブログ</a>、このサイト、<a href="http://g.co/dev/AndroidMDevPreview">Android M デベロッパー コミュニティ</a>でお知らせします。 + + +</p> + +<h2 id="preview_tools"> + Preview の内容 +</h2> + +<p> + M Developer Preview では、ご利用のアプリをさまざまな画面サイズ、ネットワーク、テクノロジー、CPU や GPU チップセット、ハードウェア設計でテストするために必要なあらゆるものを備えています。 + + +</p> + +<h4> + SDK ツール +</h4> + +<p> + 各コンポーネントは <a href="{@docRoot}sdk/installing/adding-packages.html">Android Studio</a> の SDK Manager でダウンロードできます。 +</p> + +<ul> + <li>M Developer Preview <strong>SDK ツール</strong> + </li> + + <li>M Developer Preview <strong>エミュレータ システム イメージ</strong>(32 ビット版と 64 ビット版) + + </li> + + <li>M Developer Preview <strong>Android TV 版エミュレータ システム イメージ</strong>(32 ビット版) + + </li> +</ul> + +<h4> + ハードウェアのシステム イメージ +</h4> + +<p> + Nexus 端末向けハードウェア システム イメージは、<a href="download.html">ダウンロード ページ</a>からダウンロードできます。 + +</p> + +<ul> + <li> + <strong>Nexus 5</strong>(GSM と LTE)“hammerhead” 端末システム イメージ + </li> + + <li> + <strong>Nexus 6</strong> “shamu” 端末システム イメージ + </li> + + <li> + <strong>Nexus 9</strong>(Wi-Fi)“volantis” 端末システム イメージ + </li> + + <li> + <strong>Nexus Player</strong>(AndroidTV)“fugu” 端末システム イメージ + </li> +</ul> + +<h4> + ドキュメントとサンプル コード +</h4> + +<p> + 次のドキュメント リソースで Preview についての詳細をご確認いただけます。 +</p> + +<ul> + <li> + <a href="setup-sdk.html">SDK のセットアップ</a>では、はじめの手順をステップ バイ ステップでご説明しています。 + + </li> + + <li> + <a href="{@docRoot}preview/testing/guide.html">Testing Guide</a> と <a href="behavior-changes.html">Behavior Changes</a> では、テストでカバーされる主な分野について示しています。 + </li> + + <li>新しい API のドキュメントである <a href="api-overview.html">API 概要</a>、ダウンロード可能な <a href="{@docRoot}preview/download.html#docs">API リファレンス</a>や、主な機能のデベロッパー ガイドである<a href="{@docRoot}preview/features/runtime-permissions.html">パーミッション</a>、<a href="{@docRoot}preview/backup/index.html">アプリのバックアップ</a>などをご提供しています。 + + + + + </li> + + <li> + パーミッションや他の新しい機能をサポートする方法について、<a href="{@docRoot}preview/samples.html">サンプル コード</a>でお試しいただけます。 + + </li> + + <li> + 現行バージョンの<a href="{@docRoot}preview/support.html#release-notes">リリース ノート</a>で M Developer Preview の変更メモや差分レポートなどをご覧いただけます。 + + </li> +</ul> + +<h4> + サポート リソース +</h4> + +<p> + M Developer Preview でのテストや開発について、次のサポート リソースをご確認いただけます。 + +</p> + +<ul> + <li><a href="https://code.google.com/p/android-developer-preview/">M Developer Preview Issue Tracker</a> は、<strong>主なフィードバック チャンネル</strong>としてご利用になれます。 + +バグやパフォーマンスの問題、一般的なフィードバックなど Issue Tracker からご連絡いただけます。 +また、<a href="https://code.google.com/p/android-developer-preview/wiki/KnownIssues">既知の問題</a> +やその回避策をご確認いただけます。 + </li> + + <li><a href="http://g.co/dev/AndroidMDevPreview">Android M Developer コミュニティ</a>は Google+ のコミュニティで、Android M を使っている<strong>他のデベロッパーとつながる</strong>ことができます。Android M に関する現象や考えを共有したり、疑問点を解消したりできます。 + + + + </li> +</ul> + + +<h2 id="preview_apis_and_publishing"> + 対象、プレビュー API、公開 +</h2> + +<p> + Android M Developer Preview は開発リリースのみであり、<strong>標準 API レベルはありません</strong>。 +アプリのテストで互換性の問題は除外する場合(強く推奨します)、アプリの<code><a href= + "/guide/topics/manifest/uses-sdk-element.html">targetSdkVersion</a></code> を <code>“MNC”</code> に設定することで M Developer Preview を対象にできます。 + + + +</p> + +<p> + Android M Developer Preview では<strong>プレビュー API</strong> を配信しています。現在 2015 年度第三四半期に予定されている最終 SDK がリリースされるまで、API は正式版ではありません。 + +つまり、時間がたつにつれて <strong>API の細かな変更</strong>が見込まれます(特にプログラムの最初の数週間)。 + +Android M Developer Preview でアップデートがあればその都度変更の概要をご提供します。 + +</p> + +<p class="note"> + プレビュー API は変更される可能性がありますが、実行時パーミッションや省電力機能などのシステムの基幹にかかわる機能には変更はありませんので、すぐにテストしていただけます。 + + +</p> + +<p> + 公開に関して、Google Play では <strong>M Developer Preview 対象アプリは公開できません</strong>。 +Android M 最終 SDK が利用可能になれば正式な Android M API レベルを対象にして、Google Play でアプリを公開できるようになります。 + +それまでは、Android M 対象のアプリをテスターに配布する場合は電子メールで送付したりご自分のサイトから直接ダウンロードしてもらったりしてください。 + + +</p> + +<h2 id="get_started"> + 開始するには +</h2> + +<p> + アプリのテストをはじめるには: +</p> + +<ol> + <li><a href="{@docRoot}preview/api-overview.html">API 概要</a>や <a href="{@docRoot}preview/behavior-changes.html">Behavior Changes</a> で新しい機能やご自分のアプリへの影響についてご確認ください。 + +特に、<a href="{@docRoot}preview/features/runtime-permissions.html">実行時パーミッション</a> モデルや省電力機能、自動バックアップ機能についてお確かめください。 + + + </li> + + <li><a href="{@docRoot}preview/setup-sdk.html">Setting up the Preview SDK</a> の手順に従い、ご利用の環境をセットアップしてテスト端末を構成してください。 + + + </li> + + <li><a href="https://developers.google.com/android/nexus/images">コピー手順</a>に従い、最新の M Developer Preview システム イメージを Nexus 5、6、9、Nexus Player にコピーします。 + +1 度開発端末に Preview 環境をコピーすると、アップデートが無線経由(OTA)で配信されます。</a> + + </li> + + <li><a href="{@docRoot}preview/download.html#docs">M Preview API リファレンス</a>や<a href="{@docRoot}preview/samples.html">M Preview サンプル</a>をダウンロードして、新しい API の機能についてさらに学び、ご自分のアプリで活用する方法についてご確認ください。 + + + + </li> + + <li><a href="http://g.co/dev/AndroidMDevPreview">Android M Developer コミュニティ</a>に参加して最新のニュースを入手し、Preview に取り組んでいる他のデベロッパーとつながってください。 + + + </li> +</ol> + +<p> + Android M Developer Preview プログラムへのご参加ありがとうございます。 +</p> |