diff options
author | Trevor Johns <trevorjohns@google.com> | 2016-04-05 19:43:35 -0700 |
---|---|---|
committer | Trevor Johns <trevorjohns@google.com> | 2016-04-05 20:32:07 -0700 |
commit | a5060ee80dbb48bd7fc545d2aeeeb657b79893ea (patch) | |
tree | 842bb82e198dccade4bfb3ceafcc01f96083cd34 /docs/html-intl/intl/zh-tw/preview | |
parent | ebf3261aa6d80ad4ca1df0fd0509961ff7a1914e (diff) | |
parent | 9577d31b10aa654d3ba63947e7733945a358395e (diff) |
Merge branch 'mnc-mr-docs' into mnc-ub-dev
Large merge to reconnect automerger for docs branch to mainline.
Conflicts:
docs/html-intl/intl/es/index.jd
docs/html-intl/intl/es/preview/download.jd
docs/html-intl/intl/es/preview/index.jd
docs/html-intl/intl/ja/index.jd
docs/html-intl/intl/ja/preview/download.jd
docs/html-intl/intl/ja/preview/index.jd
docs/html-intl/intl/ko/index.jd
docs/html-intl/intl/ko/preview/download.jd
docs/html-intl/intl/ko/preview/index.jd
docs/html-intl/intl/pt-br/index.jd
docs/html-intl/intl/pt-br/preview/download.jd
docs/html-intl/intl/pt-br/preview/index.jd
docs/html-intl/intl/ru/index.jd
docs/html-intl/intl/ru/preview/download.jd
docs/html-intl/intl/ru/preview/index.jd
docs/html-intl/intl/zh-cn/index.jd
docs/html-intl/intl/zh-cn/preview/download.jd
docs/html-intl/intl/zh-cn/preview/index.jd
docs/html-intl/intl/zh-tw/index.jd
docs/html-intl/intl/zh-tw/preview/download.jd
docs/html-intl/intl/zh-tw/preview/index.jd
docs/html/guide/topics/manifest/compatible-screens-element.jd
docs/html/guide/topics/manifest/uses-feature-element.jd
docs/html/preview/download.jd
docs/html/preview/features/runtime-permissions.jd
docs/html/sdk/index.jd
docs/html/tools/revisions/studio.jd
docs/html/tools/sdk/eclipse-adt.jd
docs/html/tools/support-library/features.jd
telephony/java/android/telephony/TelephonyManager.java
Bug: 28000173
Change-Id: Iacab0481175f1b32e0ac3bab98cde9e994100e94
Diffstat (limited to 'docs/html-intl/intl/zh-tw/preview')
-rw-r--r-- | docs/html-intl/intl/zh-tw/preview/api-overview.jd | 521 | ||||
-rw-r--r-- | docs/html-intl/intl/zh-tw/preview/backup/index.jd | 327 | ||||
-rw-r--r-- | docs/html-intl/intl/zh-tw/preview/behavior-changes.jd | 402 | ||||
-rw-r--r-- | docs/html-intl/intl/zh-tw/preview/download.jd | 360 | ||||
-rw-r--r-- | docs/html-intl/intl/zh-tw/preview/features/app-linking.jd | 123 | ||||
-rw-r--r-- | docs/html-intl/intl/zh-tw/preview/features/runtime-permissions.jd | 794 | ||||
-rw-r--r-- | docs/html-intl/intl/zh-tw/preview/index.jd | 70 | ||||
-rw-r--r-- | docs/html-intl/intl/zh-tw/preview/license.jd | 143 | ||||
-rw-r--r-- | docs/html-intl/intl/zh-tw/preview/overview.jd | 389 | ||||
-rw-r--r-- | docs/html-intl/intl/zh-tw/preview/samples.jd | 70 | ||||
-rw-r--r-- | docs/html-intl/intl/zh-tw/preview/setup-sdk.jd | 207 | ||||
-rw-r--r-- | docs/html-intl/intl/zh-tw/preview/testing/guide.jd | 187 | ||||
-rw-r--r-- | docs/html-intl/intl/zh-tw/preview/testing/performance.jd | 656 |
13 files changed, 0 insertions, 4249 deletions
diff --git a/docs/html-intl/intl/zh-tw/preview/api-overview.jd b/docs/html-intl/intl/zh-tw/preview/api-overview.jd deleted file mode 100644 index f6c56962f77b..000000000000 --- a/docs/html-intl/intl/zh-tw/preview/api-overview.jd +++ /dev/null @@ -1,521 +0,0 @@ -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">協助 API</a></li> - <li><a href="#notifications">通知</a></li> - <li><a href="#bluetooth-stylus">藍牙手寫筆支援</a></li> - <li><a href="#ble-scanning">已改進藍牙低電量掃描</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">具備設計風格的 ColorStateList</a></li> - <li><a href="#audio">音訊功能</a></li> - <li><a href="#video">影片功能</a></li> - <li><a href="#camera">相機功能</a> - <ol> - <li><a href="#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 預覽版»</a> </li> -</ol> - -</div> -</div> - -<p>M 開發人員預覽版讓您能夠搶先查看即將發行的 Android 平台版本,這個版本將提供可供使用者和應用程式開發人員使用的新功能。 - -本文件提供最值得受到矚目的 API 簡介。</p> - -<p>M 開發人員預覽版的適用對象是<strong>早期採用的開發人員</strong>和<strong>測試者</strong>。 -如果您對於如何影響 Android 架構方向深感興趣,請<a href="{@docRoot}preview/setup-sdk.html">嘗試使用 M 開發人員預覽版</a>,然後將您的意見反應傳送給我們! - - -</p> - -<p class="caution"><strong>注意:</strong>請勿將使用 M 開發人員預覽版的應用程式發行到 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">行為變更</a>。</p> - -<h2 id="app-linking">應用程式連結</h2> -<p>這個預覽版提供功能更強大的應用程式連結來增強 Android 的意圖系統。此功能讓您能夠將應用程式關聯到您自己的 Web 網域。 -根據這個關聯,平台可以判斷要用來處理特定 Web 連結的預設應用程式,並略過提示使用者選取應用程式的程序。如要深入瞭解如何實作此功能,請參閱<a href="{@docRoot}preview/features/app-linking.html">應用程式連結</a>。 - - - - -<h2 id="backup">針對應用程式進行自動備份</h2> -<p>系統現在會針對應用程式執行自動完整資料備份與還原。預設會針對目標為 M 預覽版的應用程式啟用這個行為;您不需要新增任何其他的程式碼。 -如果使用者刪除他們的 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 工具修訂版 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> -這個預覽版提供新的語音互動 API,可與<a href="https://developers.google.com/voice-actions/" class="external-link">語音操作</a>搭配使用,讓您能夠在應用程式內建置交談式語音體驗。 - -呼叫 -{@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">協助 API</h2> -<p> -這個預覽版提供一種新方式,可透過小幫手吸引使用者來使用您的應用程式。如要使用此功能,使用者必須啟用小幫手來使用目前的內容。 -啟用之後,使用者就能夠在所有應用程式內,按住 <strong>Home</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>新的 {@code NotificationListenerService.INTERRUPTION_FILTER_ALARMS} 篩選條件級別,會對應至新的「僅允許鬧鐘」<em></em>的請勿打擾模式。 -</li> - <li>新的 {@code Notification.CATEGORY_REMINDER} 類別值,可用來分辨來自其他事件 ({@link android.app.Notification#CATEGORY_EVENT}) 與鬧鐘 ({@link android.app.Notification#CATEGORY_ALARM}) 的使用者排程提醒。 - - -</li> - <li>新的 {@code android.graphics.drawable.Icon} 類別,可以透過 {@code Notification.Builder.setSmallIcon(Icon)} 和 -{@code Notification.Builder.setLargeIcon(Icon)} 方法來附加您的通知。 -</li> - <li>新的 {@code NotificationManager.getActiveNotifications()} 方法,讓您的應用程式能夠找出它們目前有哪些通知仍處於有效狀態。 -如要查看使用此功能的應用程式實作,請參閱<a href="https://github.com/googlesamples/android-ActiveNotifications" class="external-link">使用中通知範例</a>。 -</li> -</ul> - -<h2 id="bluetooth-stylus">藍牙手寫筆支援</h2> -<p>這個預覽版提供對於使用者使用藍牙手寫筆進行輸入的改良支援。使用者可以將相容的藍芽手寫筆與他們的手機或平板電腦配對並連線。 -連線之後,來自觸控螢幕的位置資訊會與來自手寫筆的壓力和按鈕資訊結合,比起單獨使用觸控螢幕,這樣能夠提供更大範圍的表達方式。 - -您的應用程式可以藉由在您的活動中註冊新的 -{@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 預覽版的應用程式, -{@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">已改進藍牙低電量掃描</h2> -<p> -如果您的應用程式會執行藍芽低電量掃描,就可以使用新的 -{@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 版本 1 規格的支援。如要在您的應用程式中佈建無線基地台 2.0 認證,請使用 -{@link android.net.wifi.WifiEnterpriseConfig} 類別的新方法,例如 {@code setPlmn()} 和 -{@code setRealm()}。 -在 {@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">具備設計風格的 ColorStateList</h2> -<p>針對執行 M 預覽版的裝置, -{@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">閃光燈 API</h3> -<p>如果相機裝置具有閃光裝置,則您可以呼叫 {@code CameraManager.setTorchMode()} -方法,在不開啟相機裝置的情況下,開啟或關閉閃光裝置的閃光模式。應用程式不具備閃光裝置或相機裝置的獨佔擁有權。 -每當相機裝置變成無法使用時,或者,當其他相機資源讓閃光變成無法使用時,閃光模式也會關閉且變成無法使用。 - -其他應用程式也會呼叫 {@code setTorchMode()} -來關閉閃光模式。關閉最後一個開啟閃光模式的應用程式時,閃光模式即會關閉。 -</p> - -<p>您可以呼叫 -{@code CameraManager.registerTorchCallback()} 方法,來註冊回呼要收到有關閃光模式狀態的通知。第一次註冊回呼時,會立即使用所有目前已知具有閃光裝置之相機裝置的閃光模式來呼叫它。 - -如果成功開啟或關閉閃光模式,即會叫用 -{@code CameraManager.TorchCallback.onTorchModeChanged()} 方法。</p> - -<h3 id="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} 輸出影像的循環影像佇列、選取一或多個影像,然後將它們傳送到 -{@code ImageWriter} 以進行相機重新處理。</p> - -<h2 id="afw">Android for Work 功能</h2> -<p>這個預覽版包含下列適用於 Android for Work 功能的新 API:</p> -<ul> - <li><strong>已增強適用於公司擁有、單一用途裝置的控制項:</strong>裝置擁有者現在可以控制下列設定,來改進公司擁有、單一用途 (COSU) 裝置的管理: - - - <ul> - <li>使用 -{@code DevicePolicyManager.setKeyguardEnabledState()} 方法來停用或重新啟用滑動解鎖。</li> - <li>使用 -{@code DevicePolicyManager.setStatusBarEnabledState()} 方法,來停用或重新啟用狀態列 (包括快速設定、通知,以及啟動 Google 即時資訊的導覽向上滑動手勢)。 -</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 帳戶的情況下輕觸一次就能佈建 Kiosk 或其他這類裝置,這個功能非常有用。 -</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()} 來設定系統更新原則,裝置擁有者現在可以自動接受系統更新 (例如,在 Kiosk 裝置的案例中),或者延後更新,並防止使用者進行更新,最多 30 天。 - -因此,系統管理員可以設定必須取得更新的每日時間範圍 ,例如,在 Kiosk 裝置處於未使用狀態時。 -在系統更新可供使用時,系統就會檢查工作原則控制器應用程式是否已設定系統更新原則,並據以運作。 - - -</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 應用程式現在可以在 [設定] > [更多] > [VPN]<strong></strong> 中看見。此外,伴隨 VPN 使用量出現的通知是該 VPN 設定方式的特定通知。 - - -針對設定檔擁有者,通知是專門用來通知是否已針對受管理的設定檔、個人設定檔或兩者設定了 VPN。 -針對裝置擁有者,通知是專門用來通知是否已針對整個裝置設定了 VPN。 -</li> -<li><strong>工作狀態通知:</strong>每當來自受管理設定檔的應用程式在前景中有活動時,狀態列上就會出現公事包圖示。 -因此,如果直接將裝置解除鎖定至受管理設定檔中應用程式的活動,即會顯示一個快顯通知,通知使用者他們正處於工作設定檔內。 - - -</li> -</ul> - -<p class="note"> - 如需 M 開發人員預覽版中所有 API 變更的詳細檢視,請參閱 <a href="{@docRoot}preview/download.html">API 差異報告</a>。 -</p> diff --git a/docs/html-intl/intl/zh-tw/preview/backup/index.jd b/docs/html-intl/intl/zh-tw/preview/backup/index.jd deleted file mode 100644 index edb8b98fb63c..000000000000 --- a/docs/html-intl/intl/zh-tw/preview/backup/index.jd +++ /dev/null @@ -1,327 +0,0 @@ -page.title=針對應用程式進行自動備份 -page.tags=backup, previewresources, androidm -page.keywords=backup, autobackup, preview -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 預覽版系統的裝置可以協助在上述情況自動將應用程式資料備份到 Google 雲端硬碟,讓使用者獲得良好的體驗。 - -如果使用者變更或升級裝置,應用程式資料會自動儲存。 - -</p> - -<p> - 在執行 Android M 預覽版的裝置上安裝的所有應用程式,預設都會啟用自動備份。不需要任何額外的應用程式程式碼。 -系統則提供使用者不進行自動備份資料的選項。 -您也可以選擇限制要備份應用程式的哪些資料。 -</p> - -<p> - 本文件說明新的系統行為,以及如何指定備份應用程式的哪些資料。 - -</p> - -<h2 id="overview">總覽</h2> - -<p> - 自動備份功能保存應用程式資料的方法,是將使用者裝置上建立的資料上傳到使用者的 Google 雲端硬碟帳戶,然後將資料加密。 -儲存資料不會向您或使用者收費,儲存的資料也不會計入使用者個人雲端硬碟的容量配額。 -在 M 預覽版期間,使用者最多可以為每個 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 預覽版裝置上安裝的任何應用程式所建立的資料一律都會備份。 -您可以使用應用程式宣示說明中的設定,進一步限制和設定要備份應用程式的哪些資料。 - -</p> - -<h3 id="include-exclude">納入或排除資料</h3> - -<p> - 根據您的應用程式需要的資料和您儲存資料的方式,您可能需要設定特定的規則來納入或排除某些檔案或目錄。 -自動備份服務支援使用 XML 設定檔和應用程式宣示說明來設定這些備份規則。 - -在應用程式宣示說明中,您可以依照下列範例指定備份配置設定檔: - -</p> - -<pre> -<?xml version="1.0" encoding="utf-8"?> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - package="com.my.appexample"> - <uses-sdk android:minSdkVersion="MNC"/> - <uses-sdk android:targetSdkVersion="MNC"/> - <app ... -<strong> android:fullBackupContent="@xml/mybackupscheme"></strong> - </app> - ... -</manifest> -</pre> - -<p> - 在此範例程式碼中,<code>android:fullBackupContent</code> 屬性指定應用程式開發專案的 <code>res/xml/</code> 目錄中,名為 -<code>mybackupscheme.xml</code> 的 XML 檔案。 -此設定檔包含要備份哪些檔案的規則。 -下列範例程式碼顯示排除特定檔案不要進行備份的設定檔: - -</p> - -<pre> -<?xml version="1.0" encoding="utf-8"?> -<full-backup-content> - <exclude domain="database" path="device_info.db"/> -</full-backup-content> -</pre> - -<p> - 此範例備份設定只排除特定資料庫檔案不要進行備份。 - 其他所有檔案都會備份。 -</p> - -<h4>備份設定語法</h4> - -<p> - 您可以使用備份服務設定指定要將哪些檔案納入或排除備份。 -資料備份設定 XML 檔案的語法如下所示: -</p> - -<pre> -<full-backup-content> - <include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /> - <exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /> -</full-backup-content> -</pre> - -<p> - 您可以使用下列元素和屬性指定要將哪些檔案納入備份或從備份排除: - -</p> - -<ul> - <li> - <code><include></code>。如果您想要指定備份一組資源,請使用此元素,而不要讓系統預設備份應用程式的所有資料。 -當您指定 -<code><include></code> 標籤時,系統只會備份此元素「指定的資源」<em></em>。 - - </li> - - <li> - <code><exclude></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> -<?xml version="1.0" encoding="utf-8"?> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - package="com.my.appexample"> - <uses-sdk android:minSdkVersion="MNC"/> - <uses-sdk android:targetSdkVersion="MNC"/> - <app ... -<strong> android:allowBackup="false"></strong> - </app> - ... -</manifest> -</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><PACKAGE></code> 參數指定為您應用程式的套件名稱,手動備份您的應用程式: - -</p> - -<pre class="noprettyprint"> -$ adb shell bmgr fullbackup <PACKAGE></pre> - - -<h4>測試還原</h4> - -<p> - 如要在應用程式資料備份之後手動啟動還原,請呼叫下列命令,將 <code><PACKAGE></code> 參數指定為您應用程式的套件名稱: - -</p> - -<pre class="noprettyprint"> -$ adb shell bmgr restore <PACKAGE> -</pre> - -<p class="warning"> - <b>警告:</b>這個動作在執行還原作業之前會先停止您的應用程式,然後清除其中的資料。 - -</p> - -<p> - 如果解除安裝又重新安裝應用程式,就會針對應用程式啟動還原程序。應用程式安裝完成之後,就會自動從雲端還原應用程式資料。 - -</p> - - -<h4>疑難排解備份</h4> - -<p> - 如果您遇到問題,可以在 [設定] > [備份]<strong></strong> 中關閉備份再開啟、將裝置重設為出廠值,或是呼叫下列命令,清除備份資料及相關的中繼資料: - - -</p> - -<pre>$ adb shell bmgr wipe <TRANSPORT> <PACKAGE></pre> - -<p> - <code><TRANSPORT></code> 值前面必須加上 <code>com.google.android.gms</code>。 - 如要取得傳輸清單,請呼叫下列命令: -</p> - -<pre>$ adb shell bmgr list transports</pre> - -<h2 id="issues">已知問題</h2> - -<p>以下是自動備份服務的已知問題:</p> - -<ul> - <li><strong>Google 雲端通訊</strong> - 使用「Google 雲端通訊」推送通知的應用程式有一個已知問題,亦即備份由「Google 雲端通訊」註冊程序傳回的註冊 ID,會讓還原後的應用程式無法傳送推送通知。在新裝置安裝 API 之後,需要向 API 查詢新的註冊 ID,因此如果之前備份了舊的註冊 ID,就會發生問題。 - - - - -如要避免發生這個情況,請不要備份包含註冊 ID 的檔案。 - - </li> -</ul> diff --git a/docs/html-intl/intl/zh-tw/preview/behavior-changes.jd b/docs/html-intl/intl/zh-tw/preview/behavior-changes.jd deleted file mode 100644 index 405aea1e53ac..000000000000 --- a/docs/html-intl/intl/zh-tw/preview/behavior-changes.jd +++ /dev/null @@ -1,402 +0,0 @@ -page.title=行為變更 -page.keywords=預覽版,sdk,相容性 -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">休眠</a></li> - <li><a href="#behavior-app-standby">應用程式待命</a></li> - </ol> - </li> - <li><a href="#behavior-adoptable-storage">可採用的儲存裝置</a></li> - <li><a href="#behavior-apache-http-client">移除 Apache HTTP 用戶端</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 預覽版»</a> </li> -</ol> - - -<h2>另請參閱</h2> -<ol> -<li><a href="{@docRoot}preview/api-overview.html">M 開發人員預覽版 API 總覽</a> </li> -</ol> - -</div> -</div> - -<p>除了新特性和功能以外,M 開發人員預覽版還包含各種不同的系統變更和 API 行為變更。 -本文件將強調說明一些您應該知道且在您的應用程式中加以考量的重要變更。 -</p> - -<p>如果您先前曾發行過適用於 Android 的應用程式,請注意,您的應用程式可能會受到平台中的這類變更所影響。 -</p> - -<h2 id="behavior-runtime-permissions">執行階段權限</h1> -<p>這個預覽版引進了新的權限模型,使用者現在可以在執行階段直接管理應用程式權限。 -這個模型為使用者提供了改良的能見度並使其可完全控制權限,同時為應用程式開發人員提供更流暢的安裝和自動更新程序。使用者可以針對安裝的應用程式個別授與或撤銷權限。 - - </p> - -<p>在目標為 M 預覽版的應用程式中,請務必在執行階段檢查並要求權限。 -如要判斷您的應用程式是否已獲授與權限,請呼叫新的 {@code Context.checkSelfPermission()} 方法。 -如要要求權限,請呼叫新的 -{@code Activity.requestPermission()} 方法。即使您的應用程式目標不是 M,還是應該在新的權限模型下測試您的應用程式。 -</p> - -<p>如需在您的應用程式中支援新權限模型的詳細資訊,請參閱<a href="{@docRoot}preview/features/runtime-permissions.html">權限</a>開發人員預覽版頁面。 - -如需評估對您應用程式的影響的祕訣,請參閱<a href="{@docRoot}preview/testing/guide.html#runtime-permissions">測試指南</a>。 -</p> - -<h2 id="behavior-power">省電最佳化</h2> -<p>這個預覽版針對閒置的裝置和應用程式引進了新的省電最佳化功能。</p> - -<h3 id="behavior-doze">休眠</h3> -<p>如果拔除裝置電源並關閉螢幕使其保持靜止狀態一段時間,該裝置即會進入「休眠」<em></em>模式,它會嘗試讓系統保持睡眠狀態。 -在此模式中,裝置會在短期間內定期繼續執行正常操作,因此,會進行應用程式同步處理,而系統可以執行任何待處理的操作。 - -</p> - -<p>處於休眠狀態時,下列限制會套用到您的應用程式:</p> -<ul> -<li>除非您的應用程式接收到高優先順序的 Google 雲端通訊活動訊號 (Tickle),否則會停用網路存取。 -</li> -<li><a href="{@docRoot}reference/android/os/PowerManager.WakeLock.html">喚醒鎖定</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>當裝置離開休眠狀態時,就會執行所有待處理的工作和同步處理。</p> -<p>您可以測試此功能,方法是將執行 M 預覽版的裝置連接到您的開發電腦並呼叫下列命令: - -</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 雲端通訊</a>版本讓您能夠指定高優先順序的訊息。 - - -如果您的應用程式收到高優先順序的 GCM 訊息,即使裝置處於休眠狀態,系統還是會授與它短暫的網路存取權限。 - -</p> - -<p>如需如何在您的應用程式中測試休眠的祕訣,請參閱<a href="{@docRoot}preview/testing/guide.html#doze-standby">測試指南</a>。 - - </p> - -<h3 id="behavior-app-standby">應用程式待命</h3> -<p>使用這個預覽版時,系統可在應用程式處於未使用狀態時,判斷它們是否處於閒置狀態。 -除非系統偵測到以下任一個訊號,否則會在一段時間之後將應用程式視為閒置: -</p> - -<ul> -<li>使用者明確啟動應用程式。</li> -<li>應用程式目前在前景中有一個處理程序 (可能是做為活動或前景服務,也可能正由其他活動或前景服務所使用)。 -</li> -<li>應用程式產生使用者可以在鎖定螢幕或通知匣中看見的通知。 -</li> -<li>使用者透過 [設定]<strong></strong> 明確要求應用程式不需進行最佳化。 -</li> -</ul> - -<p>如果拔除了裝置電源,即會停用被視為閒置之應用程式的網路存取,並擱置它們的同步處理和工作。 -為裝置插上電源時,就允許這些應用程式進行網路存取,且可執行所有已擱置的工作和同步處理。 -如果裝置長時間處於閒置狀態,則允許閒置的應用程式進行網路存取,大約是一天一次。 -</p> - -<p>您可以測試此功能,方法是將執行 M 預覽版的裝置連接到您的開發電腦並呼叫下列命令: - -</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 雲端通訊</a> (GCM) 版本讓您能夠指定高優先順序的訊息。 - - -如果您的應用程式收到高優先順序的 GCM 訊息,即使應用程式處於閒置狀態,系統還是會授與它短暫的網路存取權限。 - -</p> - -<p>如需如何在您的應用程式中測試應用程式待命的祕訣,請參閱<a href="{@docRoot}preview/testing/guide.html#doze-standby">測試指南</a>。 - - </p> - -<h2 id="behavior-adoptable-storage">可採用的儲存裝置</h2> -<p> -使用這個預覽版時,使用者可以採用<em></em>像是 SD 卡的外部儲存裝置。採用外部儲存裝置會加密並格式化裝置,使其可如內部儲存空間般運作。 -此功能讓使用者能夠在儲存裝置之間移動應用程式和這些應用程式的私人資料。 -移動應用程式時,系統會採用宣示說明中的 <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>如要在開發人員預覽版中對此功能進行偵錯,您可以執行下列命令來採用 USB 磁碟機 (這個磁碟機是透過 USB On-The-Go (OTG) 纜線連接到 Android 裝置): -</p> - -<pre class="no-prettyprint"> -$ adb shell sm set-force-adoptable true -</pre> - -<h2 id="behavior-apache-http-client">移除 Apache HTTP 用戶端</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,請勿連結不屬於 NDK API 一部分的密碼編譯程式庫,例如 {@code libcrypto.so} 和 {@code libssl.so}。 -這些程式庫不是公用 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>當使用者在您的應用程式中選取文字時,您現在可以在<a href="http://www.google.com/design/spec/patterns/selection.html#selection-text-selection" class="external-link">浮動工具列</a>中顯示文字選取動作,例如,剪下<em></em>、複製<em></em>及貼上<em></em>。 - -使用者互動實作類似於針對內容關聯動作列所做的實作,如<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 支援程式庫</a>版本 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 預覽版之前的裝置中,只支援 {@link android.support.v7.app.ActionBar} 模式,但在執行 M 預覽版的裝置中,允許架構支援 -{@link android.support.v7.app.ActionBar} 或浮動工具列模式。 -</p> - -<h2 id="behavior-keystore">Android 金鑰存放區變更</h2> -<p>使用這個預覽版時,<a href="{@docRoot}training/articles/keystore.html">Android 金鑰存放區供應程式</a>不再支援 DSA。 - -但仍支援 ECDSA。</p> - -<p>在停用或重設安全鎖定螢幕時 (例如,由使用者或裝置管理員執行),將不再刪除其餘不需加密的金鑰。 -在這些事件期間,將會刪除其餘需要加密的金鑰。 -</p> - -<h2 id="behavior-network">Wi-Fi 和網路變更</h2> - -<p>這個預覽版引進了下列對於 Wi-Fi 和網路 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()} 方法且您想要覆寫存取檢查,請搭配已設定為 {@code true} 的輸入參數呼叫 -{@link java.lang.reflect.Constructor#setAccessible(boolean) setAccessible()} 方法。 - - - -如果您的應用程式使用 <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">公開的 Bug 6670</a>) 之間的差異,而且現在會實作依 {@code soname} 進行搜尋。 - - - -先前可運作但含有錯誤 {@code DT_NEEDED} 項目 (通常是組建電腦之檔案系統上的絕對路徑) 的應用程式可能會在載入時失敗。 -</p> - -<p>{@code dlopen(3) RTLD_LOCAL} 旗標現在會以正確的方式實作。請注意, -{@code RTLD_LOCAL} 是預設值,因此,對 {@code dlopen(3)} 的呼叫 (不會明確使用 -{@code RTLD_LOCAL}) 將會受到影響 (除非您的應用程式明確使用 {@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。 -</p> - -<h2 id="behavior-afw">Android for Work 變更</h2> -<p>這個預覽版包含下列對於 Android for Work 的行為變更:</p> -<ul> -<li><strong>個人內容中的工作聯絡人。</strong>Google 撥號程式通話記錄現在會在使用者檢視過去的通話記錄時顯示工作聯絡人。將 {@code DevicePolicyManager.setCrossProfileCallerIdDisabled()} 設定為 {@code true},可以在 Google 撥號程式通話記錄中隱藏工作設定檔聯絡人。 - - -只有在您將 {@code DevicePolicyManager.setBluetoothContactSharingDisabled()} 設定為 {@code false} 時,工作聯絡人才會透過藍牙,與個人聯絡人一起顯示於裝置上。 - -預設會設定為 {@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 帳戶新增來下載工作原則控制器:</strong>在將要求透過工作原則控制器 (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/zh-tw/preview/download.jd b/docs/html-intl/intl/zh-tw/preview/download.jd deleted file mode 100644 index 163af2c97aa4..000000000000 --- a/docs/html-intl/intl/zh-tw/preview/download.jd +++ /dev/null @@ -1,360 +0,0 @@ -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 預覽版 -SDK 的元件之前 ,您必須同意遵守下列條款和條件。</p> - - <h2 class="norule">條款和條件</h2> - - <div class="sdk-terms" onfocus="this.blur()" style="width:678px"> -這是「Android SDK 預覽版授權協議」(以下稱「授權協議」)。 - -1.簡介 - -1.1「Android SDK 預覽版」(在「授權協議」中稱為「預覽版」,包括 (如果有可用的) Android 系統檔案、經過封裝的 API 和預覽版程式庫檔案) 是在「授權協議」之條款的約束下授權給您使用。「授權協議」就您對「預覽版」的使用,構成您與 Google 間具法律約束力之合約。 - -1.2「Android」係指「Android 軟體開放原始碼專案」(http://source.android.com/) 所提供的 Android 裝置軟體堆疊 (不定期更新)。 - -1.3「Google」係指 Google Inc.,是一家在美國德拉瓦州註冊的公司,地址為 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States。 - -2.接受「授權協議」 - -2.1 必須先同意遵守「授權協議」,才能使用此「預覽版」。如果不接受「授權協議」,您就無法使用此「預覽版」。 - -2.2 按一下 [接受] 且/或使用「預覽版」,即表示您同意「授權協議」的條款。 - -2.3 如果您是美國或其他國家/地區 (包括您所居住或使用此「預覽版」的國家/地區) 的法律所禁止接收此「預覽版」的人員,就不得使用此「預覽版」及接受「授權協議」。 - -2.4 如果您將在公司或組織內部使用「預覽版」,您就要代表雇主或其他實體同意受「授權協議」約束,且您代表並保證具備完整法定權限來約束您的雇主或這類實體遵守「授權協議」。如果您不具備必要的權限,就不得代表您的雇主或其他實體接受「授權協議」或使用此「預覽版」。 - -3.Google 的預覽版授權 - -3.1 在「授權協議」之條款的約束下,Google 授權您使用此「預覽版」,此授權為買斷式、不可轉讓、非獨占性、不可轉授權、有限且可撤銷,僅在您公司或組織內部私下或內部使用。此「預覽版」僅供您用於開發在 Android 平台上執行的應用程式。 - -3.2 您同意 Google 或第三方對此「預覽版」擁有一切法定權利及權益,包括存在於此「預覽版」中的任何「智慧財產權」。「智慧財產權」係指專利法、著作權法、商業秘密法、商標法及任何和所有其他專利權下的任何及一切權利。Google 保留一切未明確授予您的權利。 - -3.3 您不得將此「預覽版」用於「授權協議」未明文許可的任何用途。除非適用的第三方授權所需,否則您不得:(a) 對此「預覽版」或其任何部分進行複製 (備份用途除外)、修改、改編、轉散佈、反向組譯、還原工程、解編或製作衍生成品;或是 (b) 將此「預覽版」的任何部分載入至行動電話或個人電腦以外的任何其他硬體裝置、將此「預覽版」的任何部分與其他軟體結合,或散佈包含此「預覽版」之任一部分的任何軟體或裝置。 - -3.4 您同意不會從事任何可能導致或造成 Android 分裂的活動,包括但不限於以任何形式散佈從此「預覽版」衍生的軟體開發套件、參其製作或宣傳。 - -3.5 對開放原始碼軟體授權下所授權之「預覽版」的使用、複製及散佈,完全受該開放原始碼軟體授權的條款管制,而不受「授權協議」管制。您同意遵守從這類開放原始碼軟體授權獲得的所有權利,並且避免採取任何可能終止、中止或侵害這類權利的行為。 - -3.6 您同意 Google 可在不事先通知您的情況下變更其所提供之「預覽版」的形式和本質,且此「預覽版」的未來版本可與在此「預覽版」的先前版本上開發的應用程式不相容。您同意 Google 通常可全權斟酌永久或暫時停止提供此「預覽版」(或此「預覽版」的任何功能) 給您或使用者,毋須事先通知。 - -3.7「授權協議」中的所有條款皆未授予您任何使用 Google 之商業名稱、商標、服務標章、標誌、網域名稱或其他明確品牌特徵的權利。 - -3.8 您同意不會移除、遮蔽或更改可能附加至或內含在此「預覽版」中的任何專利權通知 (包括著作權和商標通知)。 - -4.您對「預覽版」的使用 - -4.1 Google 同意在「授權協議」下,任何條款皆未從您 (或您的授權人) 賦予 Google 對您使用此「預覽版」開發之任何軟體應用程式的任何權利及權益,包括存在於這些應用程式中的任何智慧財產權。 - -4.2 您同意只就 (a)「授權協議」和 (b) 相關管轄權中任何適用法律、規定或是普遍獲得接受之慣例或指導方針 (包括任何有關將資料或軟體輸出或輸入美國或其他相關國家/地區的法律) 所允許的用途使用此「預覽版」及撰寫應用程式。 - -4.3 您同意如果使用此「預覽版」開發應用程式,您將保護使用者的隱私權和法定權利。如果使用者提供您使用者名稱、密碼或是其他登入資訊或個人資訊,您必須告知使用者這類資訊將提供給您的應用程式使用,並且必須為這些使用者提供法定充分的隱私權通知和保護。如果您的應用程式會儲存使用者所提供的個人或敏感資訊,它必須確保這些資訊安全無虞。如果使用者提供 Google 帳戶資訊給您,則只有在每個使用者已授權您存取其 Google 帳戶並僅限用於使用者所授權之用途的情況下,您的應用程式才能使用該資訊來存取使用者的 Google 帳戶。 - -4.4 您同意不會使用此「預覽版」從事任何不當Activity,例如開發或散佈會以未經授權的方式干擾、妨礙、損害或存取 Google 或任何第三方之伺服器、網路或是其他財產或服務的應用程式。 - -4.5 您同意對您透過 Android 裝置和 (或) Android 應用程式建立、傳輸或顯示的任何資料、內容或資源,以及上述行為造成的後果 (包括 Google 可能蒙受的任何損失或損害) 負起全責 (而 Google 對您或任何第三方就上述一切不需負任何責任)。 - -4.6 您同意對違反在此「授權協議」、任何適用之第三方合約或《服務條款》或是任何適用之法律或規定下所必須遵守的義務,以及違反相關義務造成的後果 (包括 Google 或任何第三方可能蒙受的任何損失或損害) 負起全責 (而 Google 對您或任何第三方就上述一切不需負任何責任)。 - -4.7「預覽版」目前正在開發中,因此您的測試與意見反應對開發程序非常重要。使用「預覽版」,您即認同某些功能仍處於開發階段,因此您不應期待「預覽版」擁有穩定版本的完整功能。在官方 Android SDK 發行之後,此「預覽版」不再受到支援時,您同意不使用此「預覽版」公開散佈或隨附任何應用程式。 - -5.您的開發人員認證 - -5.1 您同意負責保密 Google 可能核發給您或您自己選擇的任何開發人員認證,並且對在您開發人員認證名義下開發的所有應用程式負起全責。 - -6.隱私權和資訊 - -6.1 為了持續更新及改進此「預覽版」,Google 可能會從軟體收集某些使用狀況統計數據,包括但不限於軟體的唯一識別碼、相關 IP 位址、版本號碼,以及有關使用此「預覽版」中的哪些工具和 (或) 服務及其使用方式的相關資訊。在收集這類資訊之前,此「預覽版」會先通知您並徵求您的同意。如果您不同意,Google 將不會收集這類資訊。 - -6.2 Google 會彙總並檢查收集到的資料,據以改善此「預覽版」,並且會依據《Google 隱私權政策》(http://www.google.com/policies/privacy/) 加以妥善保存。 - -7.第三方應用程式 - -7.1 如果您使用此「預覽版」來執行第三方開發的應用程式,或是執行會存取第三方所提供之資料、內容或資源的應用程式,您同意 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 如果想終止「授權協議」,只要停止使用此「預覽版」及任何相關的開發人員憑證即可。 - -9.3 Google 可隨時通知您終止「授權協議」,無論有無原因。 - -9.4「授權協議」在先發生下列任一情況時,將自動終止而不另行通知或採取其他行動: -(A) Google 決定不再提供此「預覽版」或此「預覽版」的特定部分給您所居住或使用此服務之國家/地區的使用者;或 -(B) Google 發行最終版本的 Android SDK。 - -9.5 當「授權條款」終止時,您在「授權協議」所獲得的授權也將會一併終止,您將立即停止「預覽版」的所有使用,而第 10、11、12 和 14 項的條款將無限期持續適用。 - -10.免責聲明 - -10.1 您明確瞭解並同意完全自負使用此「預覽版」的風險,並且此「預覽版」是依「現況」和「可提供性」提供,Google 不負任何擔保責任。 - -10.2 您對使用此「預覽版」及透過此「預覽版」以下載或其他方式取得的任何內容,需自行斟酌和自負風險,而且您對因這類使用而對您的電腦系統或其他裝置所造成的任何損害或資料遺失,需負起全責。不限於前述,您瞭解此「預覽版」不是穩定的版本,可能會包含許多錯誤、瑕疵和安全性弱點而對您的電腦系統或其他裝置造成嚴重的損害,包括完全、不可回復的損失。 - -10.3 Google 進一步明確表示不提供任何形式的瑕疵擔保和條件 (不論明示或默示),包括但不限於適售性、適合特定用途及未侵權的默示擔保和條件。 - -11.責任限制 - -11.1 您明確瞭解並同意在任何歸責理論下,就可能由您引起的任何直接、間接、附隨性、特殊性、衍生性或懲罰性損害賠償 (包括任何資料遺失),不論 Google 或其代表是否已獲告知或應已瞭解發生任何這類損失的可能性,Google、其子公司和關係企業及其授權人不必對您負起任何責任。 - -12.賠償 - -12.1 在法律允許的最大範圍內,您同意為 Google、其子公司及其個別董監事、主管、員工和代理人,就任何和一切索賠、法律行動、訴訟或訴訟程序,以及因下列原因而引起的任何和一切損失、責任、損害賠償、費用及開支 (包括合理的律師費),提供辯護、賠償損失並確保其免於承擔賠償責任:(a) 您使用此「預覽版」;(b) 您使用此「預覽版」開發的應用程式侵害任何人的任何智慧財產權,或是詆毀任何人或違反其公開權或隱私權;以及 (c) 您未遵守「授權協議」。 - -13.對「授權協議」做出的變更 - -13.1 Google 可在散佈此「預覽版」的新版本時修改「授權協議」。做出這類變更後,Google 會在提供此「預覽版」的網站上提供「授權協議」的新版本。 - -14.一般法律條款 - -14.1「授權協議」構成您與 Google 之間的法律協議,用於管制您對此「預覽版」(不包括 Google 依據個別書面協議提供給您的任何服務) 的使用,並完全取代先前您與 Google 之間就此「預覽版」簽署的相關協議。 - -14.2 您同意如果 Google 未行使或執行「授權協議」所含的任何法律權利或救濟 (或在任何適用法律下對 Google 有利的權益),並不代表 Google 正式放棄權利,Google 日後仍可行使這些權利或救濟。 - -14.3 如果經任何法院 (就此事宜依管轄權決定) 裁決「授權協議」中有任何條款無效,則該條款將自「授權協議」中移除,「授權協議」的其餘部分則不受影響。「授權協議」的其餘條款將持續具有效力且可執行。 - -14.4 您瞭解並同意 Google 旗下子公司體系的每位成員都是「授權協議」的第三方受益人,而且這類其他公司有權直接執行和依據「授權協議」中對其授予權益 (或對其有利之權利) 的任何條款。除此之外的任何其他人員或公司皆非「授權協議」的第三方受益人。 - -14.5 出口限制。此「預覽版」受美國出口法規約束。您必須遵守適用於此「預覽版」的所有國內和國際出口法規。這些法律包括對目的地、使用者及最終用途的限制。 - -14.6 未事先取得 Google 事先書面核准的情況下,您不得轉讓或轉移「授權協議」,未經這類核准的任何轉讓將會失效。您不得在未事先取得 Google 書面核准的情況下,委派其「授權協議」涵蓋的責任或義務。 - -14.7「授權協議」以及您與 Google 就「授權協議」構成的關係皆受加州法律管轄,毋須理會其法律牴觸條款。您和 Google 同意服從位於加州聖塔克拉拉 (Santa Clara, California) 郡內法院的專屬管轄權,以解決由「授權協議」產生的任何法律事務。儘管如此,您同意 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">Android 6.0 SDK</a></li> - <li><a href="#docs">開發人員文件</a></li> - <li><a href="#images">硬體系統映像</a></li> - </ol> - <h2>Legacy downloads</h2> - <ol> - <li><a href="{@docRoot}preview/download_mp1.html">Developer Preview 1</a></li> - <li><a href="{@docRoot}preview/download_mp2.html">Developer Preview 2</a></li> - </ol> - </div> -</div> - - -<p> - Android M 預覽版 SDK 有開發工具、Android 系統檔案以及程式庫檔案,可以幫助測試您的應用程式和下一個平台版本隨附的新 API。 -本文件會說明如何取得可下載的預覽版元件來測試您的應用程式。 - -</p> - - -<h2 id="sdk">Android 6.0 SDK</h2> - -<p> - 預覽版 SDK 可透過 <a href="{@docRoot}tools/help/sdk-manager.html">Android SDK 管理器</a>下載取得。如需有關下載和設定預覽版 SDK 的詳細資訊,請參閱<a href="{@docRoot}preview/setup-sdk.html#downloadSdk">設定預覽版 SDK</a>。 - -</p> - - -<h2 id="docs">開發人員文件</h2> - -<p> - 開發人員文件下載套件提供詳細的 API 參考資料和預覽版的 API 差異報告。 -</p> - -<table> - <tr> - <th scope="col">Description</th> - <th scope="col">Download / Checksums</th> - </tr> - <tr id="docs-dl"> - <td>Android M Preview 3<br>Developer Docs</td> - <td><a href="#top" onclick="onDownload(this)" - >m-preview-3-developer-docs.zip</a><br> - MD5: d99b14b0c06d31c8dfecb25072654ca3<br> - SHA-1: 9cefeeda07676130da606a1796e1c00fffc667c1 - </td> - </tr> -</table> - - -<h2 id="images">硬體系統映像</h2> - -<p> - 這些系統映像可以讓您在實體裝置上安裝預覽版的平台來進行測試。 -使用其中一個映像設定裝置,您就可以安裝並測試您的應用程式,瞭解應用程式在下一個版本的平台上表現如何。 -在裝置上安裝系統映像的過程中,會「移除裝置當中所有的資料」,因此您應該在安裝系統映像之前備份您的資料。<em></em> - - -</p> - -<p class="warning"> - <b>警告:</b>下列 Android 系統映像是預覽版,可能隨時會有變更。使用這些系統映像受到「Android SDK 預覽版授權協議」的約束。 -Android 預覽版系統映像還不是穩定的版本,可能會包含許多錯誤和瑕疵而對您的電腦系統、裝置和資料造成損害。 - -預覽版的 Android 系統映像與出廠作業系統的測試不同,可能會導致您的手機和安裝的服務與應用程式停止運作。 - - -</p> - -<table> - <tr> - <th scope="col">Device</th> - <th scope="col">Download / Checksums</th> - </tr> - <tr id="hammerhead"> - <td>Nexus 5 (GSM/LTE) <br>"hammerhead"</td> - <td><a href="#top" onclick="onDownload(this)" - >hammerhead-MPA44I-preview-2ebbc049.tgz</a><br> - MD5: 91a924fb0c9f8e716e3b4c9954fd0dbb<br> - SHA-1: 2ebbc049b68c4da8baeee3e42bb94d7a965ba4a3 - </td> - </tr> - <tr id="shamu"> - <td>Nexus 6 <br>"shamu"</td> - <td><a href="#top" onclick="onDownload(this)" - >shamu-MPA44I-preview-62b9c486.tgz</a><br> - MD5: ac6e58da86125073d9c395257fd42664<br> - SHA-1: 62b9c486fd7a5020e228d53ca5acd5c1857e48ff - </td> - </tr> - <tr id="volantis"> - <td>Nexus 9 <br>"volantis"</td> - <td><a href="#top" onclick="onDownload(this)" - >volantis-MPA44I-preview-5c30a6e2.tgz</a><br> - MD5: 7f83768757913d3fea945a661020d185<br> - SHA-1: 5c30a6e2acd11a81f4105b12d23ff654f534f699 - </td> - </tr> - - <tr id="fugu"> - <td>Nexus Player <br>"fugu"</td> - <td><a href="#top" onclick="onDownload(this)" - >fugu-MPA44I-preview-2860040a.tgz</a><br> - MD5: 438da8d37da9e341a69cfb16a4001ac5<br> - SHA-1: 2860040a326582f1ff5f702bf9a1ef002717fc98 - </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>在您使用預覽版系統映像更新開發裝置之後,裝置就會透過無線 (OTA) 更新方式自動升級為下一個預覽版版本。 - -</p> - -<h3 id="revertDevice">將裝置還原成出廠規格</h3> - -<p> - 如果您要解除安裝預覽版並將裝置還原成出廠規格,請至 -<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> diff --git a/docs/html-intl/intl/zh-tw/preview/features/app-linking.jd b/docs/html-intl/intl/zh-tw/preview/features/app-linking.jd deleted file mode 100644 index 5be8a0f12c01..000000000000 --- a/docs/html-intl/intl/zh-tw/preview/features/app-linking.jd +++ /dev/null @@ -1,123 +0,0 @@ -page.title=應用程式連結 -page.image=images/cards/card-app-linking_2x.png -page.keywords=應用程式連結, 深層連結, 意圖 -@jd:body - -<div id="qv-wrapper"> - <div id="qv"> - <h2>本文件內容</h2> - <ol> - <li><a href="#web-assoc">宣告網站關聯</a></li> - <li><a href="#verfy-links">要求應用程式連結驗證</a></li> - <li><a href="#user-manage">管理應用程式連結設定</a></li> - </ol> - </div> -</div> - -<p> - Android 意圖系統是一個彈性機制,讓應用程式能夠用來處理內容和要求。 - 有許多應用程式可能會在它們的意圖篩選條件中宣告相符的 URI 模式。當使用者按一下不含預設啟動處理常式的 Web 連結時,平台可能會顯示一個對話方塊,讓使用者能夠從具備已宣告相符意圖篩選條件的應用程式清單中選取。 - - -</p> - -<p> - Android M 開發人員預覽版引進了應用程式連結的支援,這樣就能藉由允許應用程式開發人員將應用程式關聯至他們所擁有的 Web 網域,來改善現有的連結處理。 -當開發人員建立這個關聯時,平台可以自動判斷要用來處理特定 Web 連結的預設應用程式,並略過詢問使用者的程序。 - - -</p> - - -<h2 id="web-assoc">宣告網站關聯</h2> - -<p> - 網站擁有者必須宣告與應用程式的關聯,才能建立應用程式連結。站台擁有者可藉由在網域上的已知位置裝載名為 {@code statements.json} 的 JSON 檔案,來宣告與應用程式的關係: - - -</p> - -<pre>http://<domain>:<optional port>/.well-known/statements.json</pre> - -<p class="note"> - <strong>注意:</strong> - 在 M 開發人員預覽版期間,會透過 http 通訊協定來驗證 JSON 檔案。如果是平台的正式版本,就會透過加密的 https 通訊協定來驗證該檔案。 - -</p> - -<p> - 這個 JSON 檔案會指出應該在這個網域中用來做為 URL 預設處理常式的 Android 應用程式。 -它會根據下列欄位來識別應用程式: -</p> - -<ul> - <li>{@code package_name}:宣告於應用程式宣示說明中的套件名稱。</li> - - <li>{@code sha256_cert_fingerprints}:您應用程式簽署憑證的 SHA256 指紋。 - 您可以使用 Java 金鑰工具,利用下列命令來產生指紋: - <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><package name></strong>", - "sha256_cert_fingerprints": ["<strong>6C:EC:C5:0E:34:AE....EB:0C:9B</strong>"] - } -}] -</pre> - - -<h2 id="verfy-links">要求應用程式連結驗證</h2> - -<p> - 應用程式可以要求平台根據裝載於個別 Web 網域上的 {@code statements.json} 檔案,自動驗證在其意圖篩選條件的資料元素中由主機名稱所定義的任何應用程式連結。 - -如要要求應用程式連結驗證,請將 {@code android:autoVerify} - 屬性新增到宣示說明中每個所需的意圖篩選條件中,如下列宣示說明程式碼片段所示: - -</p> - -<pre> -<activity ...> - <intent-filter <strong>android:autoVerify="true"</strong>> - <action android:name="android.intent.action.VIEW" /> - <category android:name="android.intent.category.DEFAULT" /> - <category android:name="android.intent.category.BROWSABLE" /> - <data android:scheme="http" android:host="www.android.com" /> - <data android:scheme="https" android:host="www.android.com" /> - </intent-filter> -</activity> -</pre> - -<p> - 當 {@code android:autoVerify} 屬性出現在應用程式宣示說明時,平台即會在安裝該應用程式時嘗試驗證應用程式連結。 -如果平台無法成功驗證應用程式連結,就無法將該應用程式設定為偏好使用的應用程式來處理 Web 連結。 -當使用者下次開啟其中一個連結時,平台就切換回為該使用者展示一個對話方塊。 - - -</p> - -<p class="note"> - <strong>注意:</strong>在測試期間,如果驗證失敗,可能會產生誤判,但是使用者已經使用系統「設定」應用程式,明確地啟用應用程式來自動開啟支援的連結。在此案例中,不會顯示任何對話方塊,而且連結會直接連至您的應用程式,但這只是基於使用者的設定,而不是因為驗證成功所致。 - - - -</p> - - -<h2 id="user-manage">管理應用程式連結設定</h2> - -<p> - 使用者可以變更應用程式連結設定,讓他們能夠以偏好使用的方式來處理 URL。您可以在系統「設定」應用程式中,於 [設定] > [應用程式] > [應用程式資訊] > [預設開啟]<strong></strong> 下方,檢閱和管理應用程式連結。 - - -</p> diff --git a/docs/html-intl/intl/zh-tw/preview/features/runtime-permissions.jd b/docs/html-intl/intl/zh-tw/preview/features/runtime-permissions.jd deleted file mode 100644 index cf756aa5b358..000000000000 --- a/docs/html-intl/intl/zh-tw/preview/features/runtime-permissions.jd +++ /dev/null @@ -1,794 +0,0 @@ -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 預覽版 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 開發人員預覽版導入新的應用程式權限模型,簡化使用者安裝和升級應用程式的程序。 -如果 M 預覽版上執行的應用程式支援新的權限模型,使用者安裝或升級應用程式時,不需要授與任何權限。應用程式會在需要時才要求權限,而且系統會對使用者顯示要求權限的對話方塊。 - - - - -</p> - -<p> - 如果應用程式支援新的權限模型,它仍能在在執行舊版 Android 的裝置上安裝並執行 (在那些裝置上使用舊的權限模型)。 - - -</p> - -<h2 id="overview"> - 總覽 -</h2> - -<p> - 使用 M 開發人員預覽版,平台導入新的應用程式權限模型。 -以下是這個新模型的主要元件摘要: -</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 開發人員預覽版為目標,「務必要」 -<em></em>使用新的權限模型。 -</p> - -<p> - 自 M 開發人員預覽版推出起,並非所有 Google 應用程式都完全實作新的權限模型。 -Google 正透過 M 開發人員預覽版逐漸更新這些應用程式,以適當保留權限切換設定。 - - -</p> - -<p class="note"> - <strong>注意:</strong>如果您的應用程式有自己的 API 介面,務必要先確定呼叫端具備存取該資料的必要權限後,再 Proxy 權限。 - - -</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 開發人員預覽版為目標,即使在 M 預覽版裝置上,應用程式也會持續使用舊的權限模型。 -當使用者安裝應用程式時,系統會要求使用者授與應用程式的宣示說明中列出的所有權現。 - - -</p> - -<p class="note"> - <strong>注意:</strong>在執行 M 開發人員預覽版的裝置上,使用者能從應用程式的設定畫面關閉任何應用程式 (包括舊版應用程式) 的權限。 - -如果使用者關閉舊版應用程式的權限,系統會自動停用適當功能。 -當應用程式嘗試執行需要那項權限的操作時,該操作不一定會造成例外狀況。 - -而可能傳回空的資料集,通知發生錯誤,或展示未預期的行為。 -例如,如果您不具備查詢行事曆的權限,方法會傳回空的資料集。 - -</p> - -<p> - 如果您在並非執行 M 預覽版的裝置上使用新的權限模型來安裝應用程式,系統會將它和任何其他應用程式一視同仁:系統會在安裝期間要求使用者授與所有宣告的權限。 - - - -</p> - -<p class="note"> - <strong>注意:</strong>對於預覽版,您必須將 SDK 最低版本設定為 M 預覽版 SDK,才能以預覽版 SDK 編譯。 -這表示在開發人員預覽版期間,您將無法在舊版平台上測試這類應用程式。 - - -</p> - -<h3 id="perms-vs-intents">權限與意圖比較</h3> - -<p> - 在許多情況下,您可以為應用程式在兩種方法當中擇一來執行工作。 -您可以讓應用程式要求權限以自行執行操作。 -或者,您可以讓應用程式使用意圖,讓其他應用程式來執行工作。 - -</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 開發人員預覽版為目標,請務必使用新的權限模型。 -這表示除了在宣示說明中宣告所需的權限之外,您也必須在執行階段檢查是否具備權限,並在您不具備時要求權限。 - - - -</p> - -<h3 id="enabling"> - 啟用新的權限模型 -</h3> - -<p> - 如要啟用新的 M 開發人員預覽版權限模型,可將應用程式的 -<code>targetSdkVersion</code> 屬性設定為 <code>"MNC"</code>,並將 -<code>compileSdkVersion</code> 設定為 <code>"android-MNC"</code>。這樣做可啟用所有新權限功能。 - -</p> - -<p> - 對於預覽版,您必須將 <code>minSdkVersion</code> 設定為 -<code>"MNC"</code>,才能以預覽版 SDK 編譯。 -</p> - -<h3 id="m-only-perm"> - 指定只限 M 預覽版使用的權限 -</h3> - -<p> - 您可以在宣示說明中使用新的 <code><uses-permission-sdk-m></code> 元素,指出只有在 M 預覽版上才需要某權限。 -如果您以這種方式宣告權限,每當在舊版裝置上安裝應用程式時,系統都不會提示使用者或將權限授與應用程式。藉由使用 <code><uses-permission-sdk-m></code> 元素,當使用者安裝更新時,您不需要強制他們授與權限,就可以將新的權限新增至更新的應用程式版本。 - - - - - - -</p> - -<p> - 如果應用程式在使用 M 開發人員預覽版的裝置上執行, -<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 開發人員預覽版權限模型,在執行 M 預覽版的裝置上初次啟動應用程式時,不會要求使用者授與所有權限。 - -您的應用程式會在需要時才要求權限。 -應用程式要求權限時,系統會對使用者顯示對話方塊。 - -</p> - -<p> - 如果您的應用程式在 SDK 22 以下版本的裝置上執行,應用程式會使用舊的權限模型。 -當使用者安裝應用程式時,會提示他們授與應用程式在其宣示說明中要求的所有權限,但標示為 <code><uses-permission-sdk-m></code> 的那些權限除外。 - - -</p> - -<h4 id="check-platform">檢查應用程式執行所在的平台</h4> - -<p> - 只有執行 M 開發人員預覽版的裝置上才支援此權限模型。 -呼叫這些方法之前,應用程式應該檢查 {@link android.os.Build.VERSION#CODENAME - Build.VERSION.CODENAME} 的值,驗證它執行所在的平台。 - -如果裝置是執行 M 開發人員預覽版, -{@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 開發人員預覽版為目標,您必須測試它是否能適當處理權限。 -您不能假設應用程式在執行時具備任何特定權限。 -應用程式初次啟動時,很可能不具備任何權限,且使用者可隨時撤銷或還原權限。 - - -</p> - -<p> - 您應該測試應用程式,確保它在所有權限情況下都能正常運作。 -使用 M 預覽版 SDK,我們現在提供 <a href="{@docRoot}tools/help/adb.html">Android 偵錯橋 (adb)</a> 命令,不管需要嘗試哪種權限設定都能讓您測試。 - - - -</p> - -<h3> - 新的 adb 命令和選項 -</h3> - -<p> - M 預覽版 SDK 平台工具提供的數個命令可讓您測試應用程式如何處理權限。 - -</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">套件管理員 (pm)</a> 命令,對安裝的應用程式授與和撤銷權限。此功能在自動化測試時非常實用。 - - -</p> - -<p> - 如要授與權限,可使用套件管理員的 <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> - 如要撤銷權限,可使用套件管理員的 <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> - 在某些情況下,您的應用程式可能必須具備一或多個權限。在那種情況下,在應用程式啟動時立即要求所有權限是合理的舉措。 - -例如,如果您建立攝影應用程式,該應用程式會需要存取裝置相機。 -使用者初次啟動應用程式時,看到要求使用相機的權限不會被嚇到。 - -但如果相同的應用程式具有與使用者聯絡人分享相片的功能,您可能「不」<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/zh-tw/preview/index.jd b/docs/html-intl/intl/zh-tw/preview/index.jd deleted file mode 100644 index 3aaf3820b3df..000000000000 --- a/docs/html-intl/intl/zh-tw/preview/index.jd +++ /dev/null @@ -1,70 +0,0 @@ -page.title=Android M 開發人員預覽版 -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 開發人員預覽版</h1> - <p class="dac-hero-description"> - 準備使用新版 Android。在 Nexus 5、6、9 和 Player 上測試您的應用程式。 -瞭解新功能 — <strong>執行階段權限</strong>、<strong>休眠</strong>、<strong>應用程式待命</strong>等省電功能、新的<strong>輔助技術</strong>,以及其他功能。 - - - </p> - - <a class="dac-hero-cta" href="{@docRoot}preview/overview.html"> - <span class="dac-sprite dac-auto-chevron"></span> - 開始使用! -</a><br> - <a class="dac-hero-cta" href="{@docRoot}preview/support.html"> - <span class="dac-sprite dac-auto-chevron"></span> - Developer Preview 3 (final SDK)</a> - </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> - 參加 G+ 社群 -</a> - </li> - </ul> - </div> -</section> - diff --git a/docs/html-intl/intl/zh-tw/preview/license.jd b/docs/html-intl/intl/zh-tw/preview/license.jd deleted file mode 100644 index c4acb91a450c..000000000000 --- a/docs/html-intl/intl/zh-tw/preview/license.jd +++ /dev/null @@ -1,143 +0,0 @@ -page.title=授權協議 - -@jd:body - -<p> -如果想要開始使用 Android SDK 預覽版,您必須同意遵守下列條款和條件。如下方所述,請注意這是 Android SDK 預覽版,可能隨時會有變更,請您自負使用風險。 -Android SDK 預覽版還不是穩定的版本,可能會包含許多錯誤和瑕疵而對您的電腦系統、裝置和資料造成嚴重的損害。 -</p> - -<p> -這是「Android SDK 預覽版授權協議」(以下稱「授權協議」)。 -</p> -<div class="sdk-terms" style="height:auto;border:0;padding:0;width:700px"> -1.簡介 - -1.1「Android SDK 預覽版」(在「授權協議」中稱為「預覽版」,包括 (如果有可用的) Android 系統檔案、經過封裝的 API 和預覽版程式庫檔案) 是在「授權協議」之條款的約束下授權給您使用。「授權協議」就您對「預覽版」的使用,構成您與 Google 間具法律約束力之合約。 - -1.2「Android」係指「Android 軟體開放原始碼專案」(http://source.android.com/) 所提供的 Android 裝置軟體堆疊 (不定期更新)。 - -1.3「Google」係指 Google Inc.,是一家在美國德拉瓦州註冊的公司,地址為 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States。 - -2.接受「授權協議」 - -2.1 必須先同意遵守「授權協議」,才能使用此「預覽版」。如果不接受「授權協議」,您就無法使用此「預覽版」。 - -2.2 按一下 [接受] 且/或使用「預覽版」,即表示您同意「授權協議」的條款。 - -2.3 如果您是美國或其他國家/地區 (包括您所居住或使用此「預覽版」的國家/地區) 的法律所禁止接收此「預覽版」的人員,就不得使用此「預覽版」及接受「授權協議」。 - -2.4 如果您將在公司或組織內部使用「預覽版」,您就要代表雇主或其他實體同意受「授權協議」約束,且您代表並保證具備完整法定權限來約束您的雇主或這類實體遵守「授權協議」。如果您不具備必要的權限,就不得代表您的雇主或其他實體接受「授權協議」或使用此「預覽版」。 - -3.Google 的預覽版授權 - -3.1 在「授權協議」之條款的約束下,Google 授權您使用此「預覽版」,此授權為買斷式、不可轉讓、非獨占性、不可轉授權、有限且可撤銷,僅在您公司或組織內部私下或內部使用。此「預覽版」僅供您用於開發在 Android 平台上執行的應用程式。 - -3.2 您同意 Google 或第三方對此「預覽版」擁有一切法定權利及權益,包括存在於此「預覽版」中的任何「智慧財產權」。「智慧財產權」係指專利法、著作權法、商業秘密法、商標法及任何和所有其他專利權下的任何及一切權利。Google 保留一切未明確授予您的權利。 - -3.3 您不得將此「預覽版」用於「授權協議」未明文許可的任何用途。除非適用的第三方授權所需,否則您不得:(a) 對此「預覽版」或其任何部分進行複製 (備份用途除外)、修改、改編、轉散佈、反向組譯、還原工程、解編或製作衍生成品;或是 (b) 將此「預覽版」的任何部分載入至行動電話或個人電腦以外的任何其他硬體裝置、將此「預覽版」的任何部分與其他軟體結合,或散佈包含此「預覽版」之任一部分的任何軟體或裝置。 - -3.4 您同意不會從事任何可能導致或造成 Android 分裂的活動,包括但不限於以任何形式散佈從此「預覽版」衍生的軟體開發套件、參其製作或宣傳。 - -3.5 對開放原始碼軟體授權下所授權之「預覽版」的使用、複製及散佈,完全受該開放原始碼軟體授權的條款管制,而不受「授權協議」管制。您同意遵守從這類開放原始碼軟體授權獲得的所有權利,並且避免採取任何可能終止、中止或侵害這類權利的行為。 - -3.6 您同意 Google 可在不事先通知您的情況下變更其所提供之「預覽版」的形式和本質,且此「預覽版」的未來版本可與在此「預覽版」的先前版本上開發的應用程式不相容。您同意 Google 通常可全權斟酌永久或暫時停止提供此「預覽版」(或此「預覽版」的任何功能) 給您或使用者,毋須事先通知。 - -3.7「授權協議」中的所有條款皆未授予您任何使用 Google 之商業名稱、商標、服務標章、標誌、網域名稱或其他明確品牌特徵的權利。 - -3.8 您同意不會移除、遮蔽或更改可能附加至或內含在此「預覽版」中的任何專利權通知 (包括著作權和商標通知)。 - -4.您對「預覽版」的使用 - -4.1 Google 同意在「授權協議」下,任何條款皆未從您 (或您的授權人) 賦予 Google 對您使用此「預覽版」開發之任何軟體應用程式的任何權利及權益,包括存在於這些應用程式中的任何智慧財產權。 - -4.2 您同意只就 (a)「授權協議」和 (b) 相關管轄權中任何適用法律、規定或是普遍獲得接受之慣例或指導方針 (包括任何有關將資料或軟體輸出或輸入美國或其他相關國家/地區的法律) 所允許的用途使用此「預覽版」及撰寫應用程式。 - -4.3 您同意如果使用此「預覽版」開發應用程式,您將保護使用者的隱私權和法定權利。如果使用者提供您使用者名稱、密碼或是其他登入資訊或個人資訊,您必須告知使用者這類資訊將提供給您的應用程式使用,並且必須為這些使用者提供法定充分的隱私權通知和保護。如果您的應用程式會儲存使用者所提供的個人或敏感資訊,它必須確保這些資訊安全無虞。如果使用者提供 Google 帳戶資訊給您,則只有在每個使用者已授權您存取其 Google 帳戶並僅限用於使用者所授權之用途的情況下,您的應用程式才能使用該資訊來存取使用者的 Google 帳戶。 - -4.4 您同意不會使用此「預覽版」從事任何不當活動,例如開發或散佈會以未經授權的方式干擾、妨礙、損害或存取 Google 或任何第三方之伺服器、網路或是其他財產或服務的應用程式。 - -4.5 您同意對您透過 Android 裝置和 (或) Android 應用程式建立、傳輸或顯示的任何資料、內容或資源,以及上述行為造成的後果 (包括 Google 可能蒙受的任何損失或損害) 負起全責 (而 Google 對您或任何第三方就上述一切不需負任何責任)。 - -4.6 您同意對違反在此「授權協議」、任何適用之第三方合約或《服務條款》或是任何適用之法律或規定下所必須遵守的義務,以及違反相關義務造成的後果 (包括 Google 或任何第三方可能蒙受的任何損失或損害) 負起全責 (而 Google 對您或任何第三方就上述一切不需負任何責任)。 - -4.7「預覽版」目前正在開發中,因此您的測試與意見反應對開發程序非常重要。使用「預覽版」,您即認同某些功能仍處於開發階段,因此您不應期待「預覽版」擁有穩定版本的完整功能。在官方 Android SDK 發行之後,此「預覽版」不再受到支援時,您同意不使用此「預覽版」公開散佈或隨附任何應用程式。 - -5.您的開發人員認證 - -5.1 您同意負責保密 Google 可能核發給您或您自己選擇的任何開發人員認證,並且對在您開發人員認證名義下開發的所有應用程式負起全責。 - -6.隱私權和資訊 - -6.1 為了持續更新及改進此「預覽版」,Google 可能會從軟體收集某些使用狀況統計數據,包括但不限於軟體的唯一識別碼、相關 IP 位址、版本號碼,以及有關使用此「預覽版」中的哪些工具和 (或) 服務及其使用方式的相關資訊。在收集這類資訊之前,此「預覽版」會先通知您並徵求您的同意。如果您不同意,Google 將不會收集這類資訊。 - -6.2 Google 會彙總並檢查收集到的資料,據以改善此「預覽版」,並且會依據《Google 隱私權政策》(http://www.google.com/policies/privacy/) 加以妥善保存。 - -7.第三方應用程式 - -7.1 如果您使用此「預覽版」來執行第三方開發的應用程式,或是執行會存取第三方所提供之資料、內容或資源的應用程式,您同意 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 如果想終止「授權協議」,只要停止使用此「預覽版」及任何相關的開發人員憑證即可。 - -9.3 Google 可隨時通知您終止「授權協議」,無論有無原因。 - -9.4「授權協議」在先發生下列任一情況時,將自動終止而不另行通知或採取其他行動: -(A) Google 決定不再提供此「預覽版」或此「預覽版」的特定部分給您所居住或使用此服務之國家/地區的使用者;或 -(B) Google 發行最終版本的 Android SDK。 - -9.5 當「授權條款」終止時,您在「授權協議」所獲得的授權也將會一併終止,您將立即停止「預覽版」的所有使用,而第 10、11、12 和 14 項的條款將無限期持續適用。 - -10.免責聲明 - -10.1 您明確瞭解並同意完全自負使用此「預覽版」的風險,並且此「預覽版」是依「現況」和「可提供性」提供,Google 不負任何擔保責任。 - -10.2 您對使用此「預覽版」及透過此「預覽版」以下載或其他方式取得的任何內容,需自行斟酌和自負風險,而且您對因這類使用而對您的電腦系統或其他裝置所造成的任何損害或資料遺失,需負起全責。不限於前述,您瞭解此「預覽版」不是穩定的版本,可能會包含許多錯誤、瑕疵和安全性弱點而對您的電腦系統或其他裝置造成嚴重的損害,包括完全、不可回復的損失。 - -10.3 Google 進一步明確表示不提供任何形式的瑕疵擔保和條件 (不論明示或默示),包括但不限於適售性、適合特定用途及未侵權的默示擔保和條件。 - -11.責任限制 - -11.1 您明確瞭解並同意在任何歸責理論下,就可能由您引起的任何直接、間接、附隨性、特殊性、衍生性或懲罰性損害賠償 (包括任何資料遺失),不論 Google 或其代表是否已獲告知或應已瞭解發生任何這類損失的可能性,Google、其子公司和關係企業及其授權人不必對您負起任何責任。 - -12.賠償 - -12.1 在法律允許的最大範圍內,您同意為 Google、其子公司及其個別董監事、主管、員工和代理人,就任何和一切索賠、法律行動、訴訟或訴訟程序,以及因下列原因而引起的任何和一切損失、責任、損害賠償、費用及開支 (包括合理的律師費),提供辯護、賠償損失並確保其免於承擔賠償責任:(a) 您使用此「預覽版」;(b) 您使用此「預覽版」開發的應用程式侵害任何人的任何智慧財產權,或是詆毀任何人或違反其公開權或隱私權;以及 (c) 您未遵守「授權協議」。 - -13.對「授權協議」做出的變更 - -13.1 Google 可在散佈此「預覽版」的新版本時修改「授權協議」。做出這類變更後,Google 會在提供此「預覽版」的網站上提供「授權協議」的新版本。 - -14.一般法律條款 - -14.1「授權協議」構成您與 Google 之間的法律協議,用於管制您對此「預覽版」(不包括 Google 依據個別書面協議提供給您的任何服務) 的使用,並完全取代先前您與 Google 之間就此「預覽版」簽署的相關協議。 - -14.2 您同意如果 Google 未行使或執行「授權協議」所含的任何法律權利或救濟 (或在任何適用法律下對 Google 有利的權益),並不代表 Google 正式放棄權利,Google 日後仍可行使這些權利或救濟。 - -14.3 如果經任何法院 (就此事宜依管轄權決定) 裁決「授權協議」中有任何條款無效,則該條款將自「授權協議」中移除,「授權協議」的其餘部分則不受影響。「授權協議」的其餘條款將持續具有效力且可執行。 - -14.4 您瞭解並同意 Google 旗下子公司體系的每位成員都是「授權協議」的第三方受益人,而且這類其他公司有權直接執行和依據「授權協議」中對其授予權益 (或對其有利之權利) 的任何條款。除此之外的任何其他人員或公司皆非「授權協議」的第三方受益人。 - -14.5 出口限制。此「預覽版」受美國出口法規約束。您必須遵守適用於此「預覽版」的所有國內和國際出口法規。這些法律包括對目的地、使用者及最終用途的限制。 - -14.6 未事先取得 Google 事先書面核准的情況下,您不得轉讓或轉移「授權協議」,未經這類核准的任何轉讓將會失效。您不得在未事先取得 Google 書面核准的情況下,委派其「授權協議」涵蓋的責任或義務。 - -14.7「授權協議」以及您與 Google 就「授權協議」構成的關係皆受加州法律管轄,毋須理會其法律牴觸條款。您和 Google 同意服從位於加州聖塔克拉拉 (Santa Clara, California) 郡內法院的專屬管轄權,以解決由「授權協議」產生的任何法律事務。儘管如此,您同意 Google 仍可在任何管轄權中申請禁制令救濟 (或同等類型的緊急法定救濟)。 - - -</div>
\ No newline at end of file diff --git a/docs/html-intl/intl/zh-tw/preview/overview.jd b/docs/html-intl/intl/zh-tw/preview/overview.jd deleted file mode 100644 index 9693eec670f1..000000000000 --- a/docs/html-intl/intl/zh-tw/preview/overview.jd +++ /dev/null @@ -1,389 +0,0 @@ -page.title=程式總覽 -page.metaDescription=歡迎使用 Android M 開發人員預覽版,本程式提供為新版 Android 測試和最佳化您應用程式所需的一切。 -page.image=images/cards/card-preview_16-9_2x.png -page.tags="preview", "developer", "android" - -@jd:body - -<div class="cols" style= -"background-color:#ffebc3; padding: 5px 0;margin-bottom:1em; text-align:center;"> -<h3> - Developer Preview 2 is now available - </h3> - - <ul class="dac-section-links"> - <li class="dac-section-link"> - <a href="{@docRoot}preview/support.html#preview2-notes"> - <span class="dac-sprite dac-auto-chevron"></span> - Read the Notes</a> - </li> - - <li class="dac-section-link"> - <a href="{@docRoot}preview/support.html#preview2-get"> - <span class="dac-sprite dac-auto-chevron"></span> - Get the Update</a> - </li> - - <li class="dac-section-link"> - <a href="https://code.google.com/p/android-developer-preview/"> - <span class="dac-sprite dac-auto-chevron"></span> - Report Issues</a> - </li> - </ul> -</div> - -<p> - 歡迎使用「Android M 開發人員預覽版」<strong></strong>,本程式提供為新版 Android 測試和最佳化您應用程式所需的一切。 - -免費使用,您只要下載 M 開發人員預覽版工具,就能立即開始使用。 - -</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 和 Player (適用於電視) ,以及模擬器上執行和測試您的應用程式。 - - </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/">問題追蹤器</a>回報問題並提供意見反應。 - 與 <a href="http://g.co/dev/AndroidMDevPreview">M 開發人員社群</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 開發人員預覽版可從 5 月 28 日開始執行,直到我們將在 2015 年第 3 季正式發行之前發行的最終版 Android M SDK。 - - -</p> - -<p> - 我們將在主要的開發里程碑為您的測試裝置提供更新。 - 里程碑暫定如下 -</p> - -<ul> - <li> - <strong>預覽版 1</strong> (初始預覽版,五月下旬)、 - </li> - - <li> - <strong>預覽版 2</strong> (六月下旬/七月上旬) 及 - </li> - - <li> - <strong>預覽版 3</strong> (接近最終版,七月下旬) - </li> -</ul> - -<p> - 這些更新最終會成為「最終版 SDK」<strong></strong> (稍後於第 3 季),為新版 Android 提供正式的 API,以及最終的系統行為和功能。 - - -</p> - -<p> - 當您在 Android M 上測試和開發時,強烈建議您在預覽版更新發行時立即更新,讓「您的開發環境保持在最新狀態」<strong></strong>。 - - 為了讓程序更簡單,我們將對更新為預覽版建置的裝置<strong>以無線 (OTA) 方式提供更新</strong>,還會提供您能手動下載和更新的系統映像。 - - -</p> -<p class="note"> - <strong>注意:</strong>最終版 SDK 與系統映像無法以 OTA 方式提供,將必須<strong>以手動方式更新</strong>至您的測試裝置。</strong> - - -</p> - -<p> - 我們將透過 <a href="http://android-developers.blogspot.com/">Android 開發人員部落格</a>,還有本網站與 <a href="http://g.co/dev/AndroidMDevPreview">Android M 開發人員社群</a>來通知您有可用的預覽版更新。 - - -</p> - -<h2 id="preview_tools"> - 預覽版新增功能 -</h2> - -<p> - M 開發人員預覽版包含您針對各種不同螢幕大小、網路技術、 CPU/GPU 晶片組及硬體架構,測試現有應用程式所需的一切。 - - -</p> - -<h4> - SDK 工具 -</h4> - -<p> - 您可以透過 <a href="{@docRoot}sdk/installing/adding-packages.html">Android Studio</a> 中的「SDK 管理器」下載以下元件: -</p> - -<ul> - <li>M 開發人員預覽版 <strong>SDK 工具</strong> - </li> - - <li>M 開發人員預覽版<strong>模擬器系統映像</strong> (32 位元和 64 位元) - - </li> - - <li>M 開發人員預覽版<strong>模擬器系統映像 (適用於 Android TV)</strong> (32 位元) - - </li> -</ul> - -<h4> - 硬體系統映像 -</h4> - -<p> - 您可以從<a href="download.html">下載頁面</a>下載適用於 Nexus 裝置的以下硬體系統映像: - -</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> (Android TV)“fugu”裝置系統映像 - </li> -</ul> - -<h4> - 文件和範例程式碼 -</h4> - -<p> - 這些文件資源可協助您瞭解預覽版: -</p> - -<ul> - <li> - <a href="setup-sdk.html">設定 SDK</a> 涵蓋開始使用的逐步指示。 - - </li> - - <li> - <a href="{@docRoot}preview/testing/guide.html">測試指南</a>與<a href="behavior-changes.html">行為變更</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> - 適用於目前 M 開發人員預覽版的<a href="{@docRoot}preview/support.html#release-notes">版本資訊</a>,包括變更資訊與差異報告。 - - </li> -</ul> - -<h4> - 支援資源 -</h4> - -<p> - 在 M 開發人員預覽版上測試和開發時,請使用以下支援資源: - -</p> - -<ul> - <li><a href="https://code.google.com/p/android-developer-preview/">M 開發人員預覽版問題追蹤器</a>是您的<strong>主要意見反應</strong>管道。 - -您可以透過問題追蹤器來回報錯誤、效能問題及一般意見反應。 -您也可以檢查<a href="https://code.google.com/p/android-developer-preview/wiki/KnownIssues">已知問題</a> -和尋找因應方式步驟。 - </li> - - <li><a href="http://g.co/dev/AndroidMDevPreview">Android M 開發人員社群</a>是您能<strong>與其他 Android M 開發人員聯絡</strong>的 Google+ 社群。您可以分享有關 Android M 的觀察或想法,或尋找解答。 - - - - </li> -</ul> - - -<h2 id="preview_apis_and_publishing"> - 目標設定、預覽版 API 及發行 -</h2> - -<p> - Android M 開發人員預覽版是開發專用的版本,而且<strong>沒有標準的 API 層級</strong>。 -如果您想要選擇退出相容性行為以測試您的應用程式 (強烈建議),您可以將應用程式的 <code><a href= - "/guide/topics/manifest/uses-sdk-element.html">targetSdkVersion</a></code> 設定為 <code>“MNC”</code>,就能以 M 開發人員預覽版為目標。 - - - -</p> - -<p> - Android M 開發人員預覽版提供<strong>預覽版 API</strong> — 在最終版 SDK (目前規劃在 2015 年第三季) 發行之前的都不是正式 API。 - -這表示您可以預期 API 會隨時間而有些許變更,特別是程式一開始的幾週。<strong></strong> - -我們會將 Android M 開發人員預覽版每次更新的變更摘要提供給您。 - -</p> - -<p class="note"> - 請注意,雖然預覽版 API 可能會改變,但例如執行階段權限和省電功能等基本系統行為,均已穩定且能夠立即測試。 - - -</p> - -<p> - 在發行方面,Google Play 會<strong>禁止您發行以 M 開發人員預覽版為目標的應用程式</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">行為變更</a>,以瞭解新增功能,還有它會如何影響您的應用程式。 - -特別是瞭解新的<a href="{@docRoot}preview/features/runtime-permissions.html">執行階段權限</a>模型、省電功能以及自動化備份。 - - - </li> - - <li>依照<a href="{@docRoot}preview/setup-sdk.html">設定預覽版 SDK</a> 的指示來設定您的環境,並設定測試裝置。 - - - </li> - - <li>依照<a href="https://developers.google.com/android/nexus/images">刷新指示</a>,針對 Nexus 5、6、9 及 Player 刷新最新的 M 開發人員預覽版系統映像。 - -在您刷新開發裝置之後,預覽版更新將以無線 (OTA) 更新</a>的方式提供。 - - </li> - - <li>下載 <a href="{@docRoot}preview/download.html#docs">M 預覽版 API 參考資料</a>與 <a href="{@docRoot}preview/samples.html">M 預覽版範例</a>,以深入瞭解新的 API 功能以及如何在您的應用程式中運用。 - - - - </li> - - <li>加入 <a href="http://g.co/dev/AndroidMDevPreview">Android M 開發人員社群</a>以取得最新消息,並與其他使用新平台的開發人員聯絡。 - - - </li> -</ol> - -<p> - 感謝您參與 Android M 開發人員預覽版程式! -</p> diff --git a/docs/html-intl/intl/zh-tw/preview/samples.jd b/docs/html-intl/intl/zh-tw/preview/samples.jd deleted file mode 100644 index 2ef9a60b5129..000000000000 --- a/docs/html-intl/intl/zh-tw/preview/samples.jd +++ /dev/null @@ -1,70 +0,0 @@ -page.title=範例 -page.image=images/cards/samples-new_2x.png -@jd:body - -<p> - 下列提供 M 開發人員預覽版的程式碼範例。如要下載 Android Studio 的範例,請選取 [File] (檔案) > [Import Samples] (匯入範例) 選單選項。 -<b></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">相機 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> diff --git a/docs/html-intl/intl/zh-tw/preview/setup-sdk.jd b/docs/html-intl/intl/zh-tw/preview/setup-sdk.jd deleted file mode 100644 index 1769f74dcfd7..000000000000 --- a/docs/html-intl/intl/zh-tw/preview/setup-sdk.jd +++ /dev/null @@ -1,207 +0,0 @@ -page.title=設定預覽版 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">取得預覽版 SDK</a></li> - <li><a href="#create-update">建立或更新專案</a></li> - <li><a href="#setup-test">設定以進行測試</a></li> - </ol> - </div> -</div> - -<p>M 開發人員預覽版 SDK 可以從 Android SDK Manager 取得。本文件假設您熟悉 Android 應用程式開發工作,例如使用 Android SDK Manager 和建立專案。 - -如果您是 Android 的新手,請先參閱<a href="{@docRoot}training/basics/firstapp/index.html">建置您的第一個應用程式</a>訓練課程。 -</a> -</p> - -<h2 id="get-as13">取得 Android Studio 1.3</h2> - -<p>開發人員預覽版最適合與處於預覽版狀態的 Android Studio 1.3 一起使用。 -強烈建議您安裝 Android Studio 1.3 預覽版與開發人員預覽版一起使用。 -</p> - -<p class="caution"><strong>注意:</strong>Android Studio 1.3 的測試預覽版仍在持續開發中。 -如果您使用主要開發電腦來測試開發人員預覽版,可以建立第二個 Android Studio 安裝以用於測試。 - -</p> - -<p>如要安裝 Android Studio 1.3 預覽版:</p> - -<ol> - <li>下載並啟動 <a href="{@docRoot}tools/studio/index.html">Android Studio</a>。 - - </li> - - <li>開啟 [Settings] (設定) 視窗 (在 Windows 上,您可以選擇 [檔案] > [設定] 來執行此動作)。<strong> -</strong><strong></strong>選擇 [Appearance & Behavior] (外觀和行為) > [System Settings] (系統設定) > [Updates] (更新) 面板。<strong></strong> - - - - <p class="aside">在 OSX 上,您可以在 Android Studio 的「Preferences」(偏好設定) 視窗中,找到 [Appearance & Behavior] (外觀和行為) 面板。<strong></strong><strong></strong> - -</p> - </li> - - <li> 在「Updates」(更新) 面板上,選擇以下選項:[Automatically check updates for: (自動檢查以下的可用更新:) -<strong></strong><strong>Canary Channel] (測試版管道)。</strong> - </li> - - <li>在「Updates」(更新) 面板上,選取 [Check Now] (立即檢查) 以檢查是否有可用的最新測試版建置。<strong></strong><strong></strong> -版本請在系統提示您時,下載並安裝該版本。 - - </li> -</ol> - -<h2 id="get-sdk">取得預覽版 SDK</h2> - -<p>如要將預覽版 SDK 元件新增至您的開發環境:</p> - -<ol> - <li>啟動 Android Studio 1.3 預覽版。 - </li> - - <li>開啟 [Settings] (設定) 視窗 (在 Windows 上,您可以選擇 [檔案] > [設定] 來執行此動作)。<strong></strong><strong></strong> -選擇 [Appearance & Behavior] (外觀和行為) > [System Settings] (系統設定) > [Updates] (更新) 面板。<strong></strong> - - - - <p class="aside">在 OSX 上,您可以在 Android Studio 的「Preferences」(偏好設定) 視窗中,找到 [Appearance & Behavior] (外觀和行為) 面板。<strong></strong><strong></strong> - -</p> - </li> - - <li>在「Updates」(更新) 面板上,選擇以下選項:[Automatically check updates for: (自動檢查以下的可用更新:) -<strong></strong><strong></strong>Canary Channel] (測試版管道) 以及 [Automatically check updates for Android SDK: (自動檢查 Android SDK 的可用更新:)<strong> -Preview Channel] (預覽版管道)。</strong> - </li> - - <li>啟動 <strong>Android Studio Manager</strong>。(使用 Android Studio 1.3,SDK Manager 會與 Android Studio 整合,而不是獨立的應用程式。) - - - </li> - - <li>在「Platforms」(平台) 區段下,選取 [Android MNC Preview] (Android MNC 預覽版)。<strong></strong><strong></strong> - - </li> - - <li>在「Tools」(工具) 區段中,選擇最新的 Android SDK 工具、平台工具以及建置工具。<strong></strong><strong></strong><strong></strong><strong></strong> - - - </li> - - <li>按一下 [Install packages] (安裝套件) 並接受所有套件的授權合約。<strong></strong> - - </li> - - <li>開啟 [Settings] (設定) 視窗,然後選擇 [Appearance & Behavior] (外觀和行為) > [System Settings] (系統設定) > [Android SDK] 面板,來驗證已安裝 M 開發人員預覽版。<strong></strong><strong></strong> - -</li> - - <li>在「Android SDK」面板上,選擇 [SDK Platforms] (SDK 平台) 索引標籤。<strong></strong><strong></strong> -「Android MNC Preview」(Android MNC 預覽版) 應該會列在「Installed」(已安裝)。<strong></strong><em></em> -此外,開啟 [SDK Tools] (SDK 工具) 索引標籤以確認已經安裝最新的工具。<strong></strong> - - - </li> -</ol> -<p>完成這些步驟之後,就能在您的開發環境中使用預覽版元件。 - </p> - - -<h2 id="create-update">建立或更新專案</h2> - -<p> - 為了使用預覽版 API,您必須建立或更新開發專案,才能使用預覽版元件。 - -</p> - - -<h3 id="create">建立新專案</h3> - -<p> - 建議您使用 Android Studio 搭配預覽版來建立專案。依照<a href="{@docRoot}sdk/installing/create-project.html">建立專案</a>中所述的步驟執行,直到您到達專案精靈中的「大小」畫面。 - -<em></em>接著,執行下列步驟以建立為預覽版設定的專案。 - -</p> - -<ul> - <li>核取 [Phone and Tablet] (手機與平板電腦)。<strong></strong></li> - <li>選取 [MNC:<strong></strong>Android M (Preview)] (Android M (預覽版)),它位於 [Minimum SDK] (SDK 最低版本)。<strong></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> - 利用預覽版測試應用程式,需要您將裝置或虛擬裝置設定為使用平台的預覽版本。 -如果您有相容的裝置,您可以安裝預覽版平台以用於測試。 -否則,您可以設定虛擬裝置以用於測試。 -</p> - -<h3 id="setup-device">設定實體裝置</h3> - -<p> - 如果您有 Nexus 5、Nexus 6、Nexus 9 或 Android 電視,您可以在這些裝置上安裝預覽版系統映像,以測試您的應用程式。您可以使用 Android Virtual Device Manager (Android 虛擬裝置管理員) 工具,從 Android Studio 內設定使用平台預覽版本的虛擬裝置。 - - - -</p> - -<p class="caution"> - <strong>重要說明:</strong>在裝置上安裝預覽版映像,會「移除當中的所有資料」,因此您應該在安裝預覽版映像之前備份任何資料。<em></em> - -</p> - -<h3 id="setupAVD">設定虛擬裝置</h3> - -<p> - 您可以使用 Android Virtual Device Manager (Android 虛擬裝置管理員) 工具,從 Android Studio 內設定使用平台預覽版本的虛擬裝置。 - -</p> - -<p>如要使用 AVD Manager 來建立 AVD:</p> - -<ol> - <li>請在您的開發環境中安裝預覽版 SDK,如<a href="{@docRoot}preview/setup-sdk.html">設定預覽版 SDK</a> 中所述。 - -</li> - <li>依照<a href="{@docRoot}tools/devices/managing-avds.html">使用 AVD Manager 來管理 AVD</a>中的步驟執行。 - -使用下列設定: - <ul> - <li><strong>裝置:</strong>Nexus 5、Nexus 6、Nexus 9 或 Android 電視</li> - <li><strong>目標:</strong> - Android M (預覽版) - API 級別 M</li> - <li><strong>ABI:</strong> x86</li> - </ul> - </li> -</ol> - -<p> - 如需建立虛擬裝置以用於測試的詳細資訊,請參閱<a href="{@docRoot}tools/devices/index.html">管理虛擬裝置</a>。 -</p> diff --git a/docs/html-intl/intl/zh-tw/preview/testing/guide.jd b/docs/html-intl/intl/zh-tw/preview/testing/guide.jd deleted file mode 100644 index 879ec02cd5f5..000000000000 --- a/docs/html-intl/intl/zh-tw/preview/testing/guide.jd +++ /dev/null @@ -1,187 +0,0 @@ -page.title=測試指南 -page.image=images/cards/card-build_16x9_2x.png -page.keywords=previewresources,androidm,testing,permissions - -@jd:body - -<div id="qv-wrapper"> - <div id="qv"> - <h2>本文件內容</h2> - <ol> - <li><a href="#runtime-permissions">測試權限</a></li> - <li><a href="#doze-standby">測試休眠與應用程式待命</a></li> - <li><a href="#ids">自動備份與裝置識別碼</a></li> - </ol> - </div> -</div> - -<p> - Android M 開發人員預覽版能夠讓您有機會確保您的應用程式能搭配下一個版本的平台運作。 -此預覽版包含許多 API 和足以影響應用程式的行為變更,如 <a href="{@docRoot}preview/api-overview.html">API 總覽</a>和<a href="{@docRoot}preview/behavior-changes.html">行為變更</a>中所述。 - -使用預覽版測試應用程式時,您必須著重在許多特定的系統變更,以確保使用者都能擁有良好的體驗。 - - -</p> - -<p> - 本指南說明對應用程式測試預覽功能的內容與方法。您應優先測試這些特定的預覽功能,因為這些功能可能會對您的應用程式行為有非常大的影響: - - -</p> - -<ul> - <li><a href="#runtime-permissions">權限</a> - </li> - <li><a href="#doze-standby">休眠與應用程式待命</a> - </li> - <li><a href="#ids">自動備份與裝置識別碼</a></li> -</ul> - -<p> - 如需有關如何設定使用預覽版系統映像的裝置或虛擬裝置以進行測試的詳細資訊,請參閱<a href="{@docRoot}preview/setup-sdk.html">設定預覽版 SDK</a>。 - -</p> - - -<h2 id="runtime-permissions">測試權限</h2> - -<p> - 新的<a href="{@docRoot}preview/features/runtime-permissions.html">權限</a>模型改變使用者對您的應用程式分配權限的方式。 -以前在安裝過程中會授與所有權限,現在您的應用程式則必須在執行階段向使用者要求個別的權限。 - -對於使用者而言,這個行為能夠對每個應用程式的Activity提供更細膩的控制,而且也能更瞭解應用程式為何要要求特定權限。 -使用者可以隨時個別對應用程式授與或撤銷權限。 -預覽版的這個功能最有可能影響到您應用程式的行為,而且可能會導致應用程式某些功能無法正常運作,或者這些功能會以降級的狀態運作。 - - -</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>使用下列語法授與或撤銷一或多個權限:<br> - <pre>adb shell pm [grant|revoke] <permission.name> ...</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#">設定預覽版 SDK</a>。 - -</p> - -<p> - 測試各種撤銷/加入權限的組合,著重在依據這些權限的使用者流程。 -如果相依性不明顯或邏輯不清楚時,您可以考慮重新分解或劃分流程以消除相依性,或是更清楚為何需要某個權限。 - - -</p> - -<p> - 如需有關執行階段權限行為、測試和建議做法的詳細資訊,請參閱 <a href="{@docRoot}preview/features/runtime-permissions.html">權限</a>開發人員預覽版頁面。 - - -</p> - - -<h2 id="doze-standby">測試休眠與應用程式待命</h2> - -<p> - 當裝置處於閒置狀態,或者當您的應用程式不在使用中時,「休眠」與「應用程式待命」的省電功能會限制應用程式可以執行的背景處理量。 -系統可能加諸在應用程式的限制,包括網路受到限制或沒有網路、背景工作暫停、通知暫停、喚醒要求被略過,以及警示被略過。 - -如要確保您的應用程式能正確運作,而且這些省電功能也達到最好的效益,您應該透過模擬這些低電量狀態,測試您的應用程式。 - - -</p> - -<h4 id="doze">搭配休眠測試應用程式</h4> - -<p>對您的應用程式測試休眠:</p> - -<ol> -<li>設定 M 預覽版系統映像的硬體裝置或虛擬裝置。</li> -<li>將裝置連線到您的開發電腦並安裝您的應用程式。</li> -<li>執行您的應用程式並讓應用程式保持使用中。</li> -<li>執行下列命令,模擬裝置進入「休眠」模式: - -<pre> -$ adb shell dumpsys battery unplug -$ adb shell dumpsys deviceidle step -$ adb shell dumpsys deviceidle -h -</pre> - - </li> - <li>觀察當裝置重新啟動時的應用程式行為。當裝置結束「休眠」時,確定應用程式順利回復。 -</li> -</ol> - - -<h4 id="standby">搭配應用程式待命測試應用程式</h4> - -<p>對您的應用程式測試應用程式待命模式:</p> - -<ol> - <li>設定 M 預覽版系統映像的硬體裝置或虛擬裝置。</li> - <li>將裝置連線到您的開發電腦並安裝您的應用程式。</li> - <li>執行您的應用程式並讓應用程式保持使用中。</li> - <li>執行下列命令,模擬應用程式進入待命模式: - -<pre> -$ adb shell am broadcast -a android.os.action.DISCHARGING -$ adb shell am set-idle <packageName> true -</pre> - - </li> - <li>使用下列命令,模擬喚醒應用程式: - <pre>$ adb shell am set-idle <packageName> false</pre> - </li> - <li>觀察當應用程式被喚醒時的行為。確定應用程式順利從待命模式回復。 -您尤其要檢查應用程式通知與背景工作是否有如預期般繼續運作 -。</li> -</ol> - -<h2 id="ids">針對應用程式進行自動備份與裝置特定識別碼</h2> - -<p>如果您的應用程式在內部儲存空間存有任何裝置特定識別碼,例如 Google -雲端通訊註冊 ID,請確認按照建議做法排除這些儲存位置不要進行自動備份,如<a href="{@docRoot}preview/backup/index.html">針對應用程式進行自動備份</a>中所述。 - - - </p> diff --git a/docs/html-intl/intl/zh-tw/preview/testing/performance.jd b/docs/html-intl/intl/zh-tw/preview/testing/performance.jd deleted file mode 100644 index 5437e9da6bfa..000000000000 --- a/docs/html-intl/intl/zh-tw/preview/testing/performance.jd +++ /dev/null @@ -1,656 +0,0 @@ -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> - 使用者介面效能測試可確保您的應用程式不只符合功能需求,與使用者與應用程式的互動也無比順暢,執行時每秒一致有 60 個畫面 (<a href="https://www.youtube.com/watch?v=CaMTIgxCSqU&index=25&list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE">為什麼 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> -> adb shell dumpsys gfxinfo <PACKAGE_NAME> -</pre> - -<p> - 此命令會產生多種不同的畫面計時資料。 -</p> - -<h3 id="aggregate">彙總畫面統計資料</h3> - -<p> - 使用 M 預覽版,命令會在程序的生命週期全程收集畫面資料,並將彙總的分析列印到 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 預覽版隨附新的命令 gfxinfo,而 <em>framestats</em> 可從最近的畫面提供相當詳細的畫面計時資訊,讓您可以追蹤並更準確進行除錯。 - - -</p> - -<pre> ->adb shell dumpsys gfxinfo <PACKAGE_NAME> framestats -</pre> - -<p> - 此命令會從應用程式所產生至少 120 個畫面當中,加上奈秒時間戳記印出畫面計時資訊。以下範例是 adb dumpsys gfxinfo <PACKAGE_NAME> 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> - 這裡的每一行輸出都代表應用程式產生的一個畫面。每行都有固定的資料欄編號,描述畫面產生管道的各階段所花費的時間。 -下一節會詳細說明此格式,包括各資料欄代表的意義。 - -</p> - - -<h4 id="fs-data-format">Framestats 資料格式</h4> - -<p> - 由於資料區塊是以 CSV 格式輸出,所以可以直接將它貼到選擇的試算表工具,或使用指令碼來收集和剖析。 -下表說明輸出資料欄的格式。 -所有時間戳記都以奈秒為單位。 -</p> - -<ul> - <li>FLAGS - <ul> - <li>FLAGS 資料欄的資料列均為 0,從 FRAME_COMPLETED 資料欄減去 INTENDED_VSYNC 資料欄可計算得出總畫面時間。 - - </li> - - <li>如果這個值非零,應該略過該資料列,因為從正常效能來判斷,畫面已是極端值,版面配置與繪製預期都要花費 16ms 以上的時間。 - -以下是發生這種情況的幾個原因: - <ul> - <li>視窗版面配置改變 (例如應用程式的第一個畫面或經過旋轉) - - </li> - - <li>也可能是略過畫面,在這種情況下,某些值會含有記憶體回收的時間戳記。 -例如,如果畫面速度超過 60fps,或如果螢幕上空無一物,最後卻有所改變,就可能會略過畫面,這不一定是應用程式發生問題的徵兆。 - - - </li> - </ul> - </li> - </ul> - </li> - - <li>INTENDED_VSYNC - <ul> - <li>預期的畫面起始點。如果這個值和VSYNC 不同,表示 UI 執行緒中發生的工作使它無法即時回應 vsync 訊號。 - - - </li> - </ul> - </li> - - <li>VSYNC - <ul> - <li>用於所有 vsync 接聽器和繪製畫面的時間值 (Choreographer 畫面回呼、動畫、View.getDrawingTime() 等等) - - </li> - - <li>如要深入瞭解有關 VSYNC 和它如何影響您的應用程式,請參閱<a href="https://www.youtube.com/watch?v=1iaHxmfZGGc&list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&index=23">瞭解 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>如果這個數字很高 (>2ms),這表示應用程式花費在處理輸入事件(例如 View.onTouchEvent()) 的時間過長,指出需要將這項工作最佳化,或卸載交由其他執行緒處理。 - -請注意,還有一些情況本就預期且可接受這個數字較大,例如會啟動新活動或類似工作的點擊事件。 - - - </li> - </ul> - </li> - - <li>ANIMATION_START - <ul> - <li>向 Choreographer 註冊的動畫執行時的時間戳記。 - </li> - - <li>查看這個值與 PERFORM_TRANVERSALS_START 之間的時間,即可判斷它花費多久的時間評估所有執行中的動畫器 (常見的有 ObjectAnimator、ViewPropertyAnimator 及 Transitions)。 - - - </li> - - <li>如果這個數字很高 (>2ms),可查看您的應用程式是否撰寫任何自訂動畫器,或 ObjectAnimators 正進行動畫處理的資料欄,並確定它們都適用於動畫。 - - - </li> - - <li>如要深入瞭解 Choreographer,請參閱<a href="https://developers.google.com/events/io/sessions/325418001">順滑流暢與否</a>影片。 - - </li> - </ul> - </li> - - <li>PERFORM_TRAVERSALS_START - <ul> - <li>如果您從這個值中減去 DRAW_START,就可以得知版面配置和測量階段花費多久的時間完成。(請注意,在捲動或動畫期間,您會希望這個值趨近於零。) - - - </li> - - <li>如要深入瞭解轉譯管道的測量與版面配置階段,請參閱<a href="https://www.youtube.com/watch?v=we6poP0kw6E&list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&index=27">無效判定、版面配置及效能</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">硬體加速</a>或<a href="https://www.youtube.com/watch?v=we6poP0kw6E&list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&index=27">無效判定、版面配置及效能</a>影片。 - - - </li> - </ul> - </li> - - <li>SYNC_START - <ul> - <li>繪製的同步階段開始的時間。 - </li> - - <li>如果這個值與 ISSUE_DRAW_COMMANDS_START 之間的時間相當長 (約為 >0.4ms ),通常代表已繪製許多必須上傳至 GPU 的新點陣圖。 - - - </li> - - <li>如要深入瞭解同步階段,請參閱<a href="https://www.youtube.com/watch?v=VzYkVL1n4M8&index=24&list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu">設定檔 GPU 轉譯</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> - 您能以不同的方式使用這項資料。顯示不同延遲貯體中畫面時間分布的長條圖就是一種簡單但實用的方式,請見下圖。 - -本圖可一目瞭然地告訴我們,大部分畫面都低於 16ms 的上限 (紅色除外),但只有幾個畫面明顯超過上限。 - -我們可以查看此長條圖一段時間的變化,觀察出現的大規模位移或產生新的極端值。 -您也能根據資料中的許多時間戳記將輸入延遲、花費在版面配置的時間或其他類似的有趣度量指標繪成圖表。 - - -</p> - -<img src="{@docRoot}preview/images/perf-test-framestats.png"> - - -<h3 id="timing-dump">簡易畫面計時傾印</h3> - -<p> - 如果 [開發人員選項] 中的 [設定檔 GPU 轉譯]<strong></strong> 設定為 [In adb shell dumpsys gfxinfo]<strong></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> - 每個直條都代表動畫的一個畫面,其高度代表計算該畫面所花費的毫秒數。 -長條的每個色塊都代表轉譯管道的不同階段,好讓您看出應用程式的哪部分可能產生瓶頸。 - -如需瞭解繪製管道以及如何最佳化的詳細資訊,請參閱硬體加速或<a href="https://www.youtube.com/watch?v=we6poP0kw6E&index=27&list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE">無效判定、版面配置及效能</a>影片。 - - -</p> - - -<h3 id="collection-window">控制統計資料收集時間</h3> - -<p> - framestats 與簡單的畫面計時都會收集極短時間內的資料 – 轉譯約需兩秒。 -為了精確控制這段時間,例如只限特定動畫的資料,您可以重設所有計數器,然後彙總收集的統計資料。 - - -</p> - -<pre> ->adb shell dumpsys gfxinfo <PACKAGE_NAME> reset -</pre> - -<p> - 這也能和傾印命令本身結合使用,定期收集和重設,持續擷取兩秒時間內的畫面。 - - -</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>轉譯效能 101 - </li> - <li>為什麼 60fps? - </li> - <li>Android UI 和 GPU - </li> - <li>無效判定、版面配置及效能 - </li> - <li>利用 Systrace 分析 UI 效能 - </li> -</ul> - - -<h2 id="automate">自動化 UI 效能測試</h2> - -<p> - UI 效能測試的方法之一就是讓測試人員對目標應用程式執行一組使用者操作,並以肉眼查看,或花費很長一段時間使用工具導向的方法,尋找閃避現象。 - -但這種靠人工的方式充滿危險,人類對畫面率變化的感知能力因人而異,而且這種方法也很費時、繁瑣且容易出錯。 - - -</p> - -<p> - 較有效率的方法是從自動化的 UI 測試中記錄和分析重要效能度量指標。 -Android M 開發人員預覽版包含新的記錄功能,能夠輕鬆判斷應用程式動畫中閃避現象的數量與嚴重程度,還能用來建置嚴謹的程序,判斷目前的效能並追蹤未來的效能目標。 - - - -</p> - -<p> - 本文會逐步說明建議用來使用資料以自動化效能測試的方法。 - -</p> - -<p> - 這種方法大多分成兩個主要動作。首先,識別您要測試的項目,以及測試的方法。其次是設定和維護自動化測試環境。 - - -</p> - - -<h3 id="ui-tests">設定 UI 測試</h3> - -<p> - 在您開始進行自動化測試之前,務必要決定幾個高階決策,才能適當瞭解您的測試空間與可能會有的需求。 - -</p> - -<h4> - 識別要測試的主要動畫 / 流程 -</h4> - -<p> - 請記住,流暢的動畫有所中斷時,就是使用者最容易看見效能低落的時候。 -因此,識別要測試哪種類型的 UI 動作時,最好著重在使用者最常看見或對他們的體驗最重要的主要動畫。 - -例如,以下是一些可能有利於識別的常見情況: -</p> - -<ul> - <li>捲動主要的 ListView 或 RecyclerView - </li> - - <li>非同步等待週期內的動畫 - </li> - - <li>當中會載入 / 操縱點陣圖的任何動畫 - </li> - - <li>包含 Alpha 透明混色的動畫 - </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 測試,還有可從單一測試收集資料的管道後,下一個重要步驟是利用可多次執行該項測試的架構,然後彙總產生的效能資料,以供您的開發團隊進一步分析。 - - - -</p> - -<h4> - 測試自動化的架構 -</h4> - -<p> - 直接在目標裝置/模擬器上執行的 UI 測試架構 (例如 <a href="{@docRoot}training/testing/ui-testing/uiautomator-testing.html">UI Automator</a>) 毫無價值。 -因為效能收集資訊是由主控機器透過 ADB 傳送命令驅動 <em>dumpsys gfxinfo</em> 來完成。 -<a href="{@docRoot}tools/help/monkeyrunner_concepts.html">MonkeyRunner</a> 架構是為了協助橋接這些個別實體開發。在主控機器上執行的指令碼處理系統可對一組連接的裝置發出命令,也能接收來自這些裝置的資料。 - - - -</p> - -<p> - 建置一組指令碼以適當自動化 UI 效能測試,至少應能利用 monkeyRunner 來完成下列工作: - -</p> - -<ul> - <li>對目標裝置或模擬器載入和啟動所需的 APK。 - </li> - - <li>啟動並允許執行 UI Automator UI 測試 - </li> - - <li>透過 dumpsys gfxinfo 收集效能資訊。<em></em><em></em> - </li> - - <li>彙總資訊並以對開發人員有用的方式顯示。 - </li> -</ul> - - -<h3 id="triage">分類和修正觀察到的問題</h3> - -<p> - 在辨識出問題模式與回復之後,下一個步驟是辨識和套用修正。 -如果您的自動化測試架構會為畫面保留精確的計時分類細項,可幫助您詳細審察目前可疑的程式碼/版面配置變化 (在回復的情況下),或在您切換為靠人工探究時縮小要分析的系統部分。 - - -如需靠人工探究時,<a href="{@docRoot}tools/help/systrace.html">systrace</a> 是開始進行的好地方,顯示轉譯管道各階段、系統中每個執行緒與核心,還有您所定義任何自訂事件標記的精確計時資訊。 - - -</p> - -<h4> - 適當分析暫時的計時 -</h4> - -<p> - 請務必注意,從轉譯效能中取得和測量計時的困難度。 -這些數字不具決定性且通常受系統狀態、可用記憶體數目、溫度調節,還有上次太陽閃焰何時衝擊您所在地區影響。 - -重點是您執行相同的測試兩次,而每次得到的數字都有些微不同,數字很接近但不會完全相同。 - - -</p> - -<p> - 以這種方式適當收集和分析資料,表示執行相同的測試多次,並累積結果取平均值或中間值。(為了簡單起見,我們稱之為「批次」) 這可讓您粗略計算測試的效能,而不需要精確的計時。 - - - -</p> - -<p> - 在變更的程式碼之間使用批次,可看出那些變更對效能的影響。 -如果前次變更批次的平均畫面率大於後來變更批次,您通常會有那項特定變更的整體 win wrt 效能。 - - -</p> - -<p> - 這表示您執行的任何自動化 UI 測試都應將此概念列入考量,同時考量可能會在測試期間發生的任何異常情況。 -例如,您的應用程式效能若因為某些裝置問題而突然下降 (並非由您的應用程式引起),您可能會想要重新執行批次,以讓取得的計時較不混亂。 - - - -</p> - -<p> - 應該執行多少次測試才能獲得有意義的測量結果呢?最少應執行 10 次,若執行更多次 (像是 50 或 100 次) 可以產生更準確的結果 (當然您現在是以時間換取準確度)。 - - -</p> |