Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3c6c05fc authored by David Friedman's avatar David Friedman Committed by Android Git Automerger
Browse files

am 4e1d42f9: Merge "Docs: L10N of remaining M Preview pages for zh-cn" into mnc-preview-docs

* commit '4e1d42f9':
  Docs: L10N of remaining M Preview pages for zh-cn
parents 3f83aa3f 4e1d42f9
Loading
Loading
Loading
Loading
+327 −0
Original line number Diff line number Diff line
page.title=自动备份应用
page.tags=备份, 预览版资源, androidm
page.keywords=备份, 自动备份, 预览版
page.image=images/cards/card-auto-backup_2x.png
@jd:body

<div id="qv-wrapper">
  <div id="qv">
    <h2>本文内容</h2>
      <ol>
        <li><a href="#overview">概览</a></li>
        <li><a href="#configuring">配置数据备份</a></li>
        <li><a href="#testing">测试备份配置</a></li>
        <li><a href="#issues">已知问题</a></li>
      </ol>
  </div>
</div>

<p>
  通常,用户需要投入大量的时间和精力在应用内创建数据和设置首选项。
如果用户更换破损设备或升级至新设备,则保留用户数据对于确保提供卓越的用户体验至关重要。
在这些情况下,运行 Android M 预览版系统的设备可以通过将应用数据自动备份到 Google Drive,帮助确保提供卓越的用户体验。

这样,即使用户更换或升级设备,应用数据也可自动恢复。

</p>

<p>
  对于运行 Android M 预览版的设备中所有已安装的应用,均可启用自动备份。无需额外提供应用代码。
该系统允许用户选择禁止自动数据备份。
此外,您还可以选择限制要备份应用中的哪些数据。
</p>

<p>
  本文介绍了新系统行为,阐述了如何指定要为应用备份哪些数据。

</p>

<h2 id="overview">概览</h2>

<p>
  自动备份功能可以通过将应用在用户设备中创建的数据上传到用户的 Google Drive 帐户并进行加密,来保留这些数据。
您或用户无需为数据存储付费,且保存的数据不计入用户个人的 Drive 配额。
在 M 预览版运行期间,用户可针对每个 Android 应用存储多达 25MB 的数据。

</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>
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.my.appexample"&gt;
    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
    &lt;app ...
<strong>        android:fullBackupContent="&#64;xml/mybackupscheme"&gt;</strong>
    &lt;/app&gt;
    ...
&lt;/manifest&gt;
</pre>

<p>
  在此示例代码中,<code>android:fullBackupContent</code> 属性指定了一个 XML 文件。该文件名为 
<code>mybackupscheme.xml</code>,位于应用开发项目的 <code>res/xml/</code> 目录中。
此配置文件包括关于要备份哪些文件的规则。
下列示例代码显示了将某一特定文件排除在备份之外的配置文件:

</p>

<pre>
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;full-backup-content&gt;
    &lt;exclude domain="database" path="device_info.db"/&gt;
&lt;/full-backup-content&gt;
</pre>

<p>
  此示例备份配置仅将一个特定数据库文件排除在备份之外。
  所有其他文件均予以备份。
</p>

<h4>备份配置语法</h4>

<p>
  您可以通过备份服务配置指定备份中要包括或排除哪些文件。
数据备份配置 xml 文件的语法如下:
</p>

<pre>
&lt;full-backup-content&gt;
    &lt;include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
    &lt;exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
&lt;/full-backup-content&gt;
</pre>

<p>
  您可以使用下列元素和属性指定备份中要包括或排除哪些文件:

</p>

<ul>
  <li>
  <code>&lt;include&gt;</code>。如果您想指定一组要备份的资源,而不是默认由系统备份应用中的所有数据,请使用此元素。
如果您指定了 <code>&lt;include&gt;</code> 标记,系统将仅备份使用此元素指定的资源。<em></em>


  </li>

  <li>
  <code>&lt;exclude&gt;</code>。使用此元素指定一组要排除在备份之外的资源。
除了使用此元素指定的资源外,系统将备份应用中的所有数据。

  </li>

  <li>
  <code>domain.</code> 您想要在备份中包括或排除的资源类型。您可为此属性指定的有效值包括:

  </li>

  <li style="list-style: none">
  <ul>
    <li>
    <code>root</code>。指定资源处于应用的根目录中
    </li>

    <li>
    <code>file</code>。与通过 
{@link android.content.Context#getFilesDir getFilesDir()} 方法返回的目录中的某个资源相对应
    </li>

    <li>
    <code>database</code>。与通过 
{@link android.content.Context#getDatabasePath getDatabasePath()} 方法或使用 
{@link android.database.sqlite.SQLiteOpenHelper} 类返回的某个数据库相对应
    </li>

    <li>
    <code>sharedpref</code>。与通过 {@link android.content.Context#getSharedPreferences getSharedPreferences()}
 方法返回的某个 {@link android.content.SharedPreferences} 对象相对应

    </li>

    <li>
    <code>external</code>。指定资源位于外部存储中,且与通过 
{@link android.content.Context#getExternalFilesDir getExternalFilesDir()} 方法返回的目录中的某个文件相对应

    </li>

    <li>
    <code>path</code>。您想要在备份中包括或排除的资源的文件路径

    </li>
  </ul>
  </li>
</ul>


<h3 id="prohibit">禁止数据备份</h3>

<p>
  通过在清单文件的应用元素中将 
<code>android:allowBackup</code> 属性设置为 <code>false</code>,您可选择阻止自动备份任何应用数据。
此设置如下列示例代码所示:
</p>

<pre>
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.my.appexample"&gt;
    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
    &lt;app ...
<strong>        android:allowBackup="false"&gt;</strong>
    &lt;/app&gt;
    ...
&lt;/manifest&gt;
</pre>


<h2 id="testing">测试备份配置</h2>

<p>
  创建备份配置后,您应立即进行测试,确保应用能够保存数据,且数据能够正确恢复。

</p>


<h4>启用备份日志记录</h4>

<p>
  要帮助确定备份功能如何解析 XML 文件,请在执行测试备份之前启用日志记录功能:

</p>

<pre class="noprettyprint">
$ adb shell setprop log.tag.BackupXmlParserLogging VERBOSE
</pre>

<h4>测试备份</h4>

<p>要手动运行备份,您首先必须通过调用下列命令初始化备份管理器:

</p>

<pre class="noprettyprint">
$ adb shell bmgr run
</pre>

<p>
  然后,使用下列命令并以 <code>&lt;PACKAGE&gt;</code> 参数指定应用的软件包名称来手动备份应用:

</p>

<pre class="noprettyprint">
$ adb shell bmgr fullbackup &lt;PACKAGE&gt;</pre>


<h4>测试恢复</h4>

<p>
  要在备份应用数据后手动启动数据恢复,请调用下列命令,并以 <code>&lt;PACKAGE&gt;</code> 参数指定应用的软件包名称:

</p>

<pre class="noprettyprint">
$ adb shell bmgr restore &lt;PACKAGE&gt;
</pre>

<p class="warning">
  <b>警告:</b>执行恢复操作之前,此操作将阻止您的应用运行并擦除其数据。

</p>

<p>
  您可以通过卸载并重新安装应用来启动数据恢复进程。应用安装完成后,系统会立即自动从云中恢复应用数据。

</p>


<h4>诊断备份问题</h4>

<p>
  如果遇到问题,可通过在<strong>设置 &gt; 备份</strong>中先关闭然后重新打开备份、将设备恢复出厂设置或者调用以下命令,来清除备份数据及关联的元数据:


</p>

<pre>$ adb shell bmgr wipe &lt;TRANSPORT&gt; &lt;PACKAGE&gt;</pre>

<p>
  <code>&lt;TRANSPORT&gt;</code> 值必须以 <code>com.google.android.gms</code> 为前缀。
  要获取传输列表,请调用下列命令:
</p>

<pre>$ adb shell bmgr list transports</pre>

<h2 id="issues">已知问题</h2>

<p>以下是自动备份服务的已知问题:</p>

<ul>
  <li><strong>Google 云消息传递</strong>:对于使用 Google 云消息传递推送通知的应用,存在一个已知问题,即:备份通过 Google 云消息传递注册所返回的注册 ID 时,可能会中断已恢复应用的推送通知。为此,应用安装到新设备后,务必查询 API,看是否具有新注册 ID,这一点至关重要。如果已备份旧注册 ID,则不会出现这种情况。




为避免这种现象,请从已备份文件集中排除注册 ID。

  </li>
</ul>
+348 −0

File added.

Preview size limit exceeded, changes collapsed.

+123 −0
Original line number Diff line number Diff line
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://&lt;domain&gt;:&lt;optional port&gt;/.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>&lt;package name&gt;</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>
&lt;activity ...&gt;
    &lt;intent-filter <strong>android:autoVerify="true"</strong>&gt;
        &lt;action android:name="android.intent.action.VIEW" /&gt;
        &lt;category android:name="android.intent.category.DEFAULT" /&gt;
        &lt;category android:name="android.intent.category.BROWSABLE" /&gt;
        &lt;data android:scheme="http" android:host="www.android.com" /&gt;
        &lt;data android:scheme="https" android:host="www.android.com" /&gt;
    &lt;/intent-filter&gt;
&lt;/activity&gt;
</pre>

<p>
  如果应用清单文件中存在 {@code android:autoVerify} 属性,平台会在安装应用时尝试验证应用链接。
如果平台无法成功验证应用链接,则不会将应用设置为处理 Web 链接的首选应用。
用户下一次打开其中一个链接时,平台将退回原有模式,向用户显示一个对话框。


</p>

<p class="note">
  <strong>注:</strong>在测试时,如果验证失败,但用户已经使用系统的“设置”应用显式允许应用在不询问用户的情况下打开受支持的链接,则可能会出现误报。在这种情况下,不会显示对话框,链接会直接指向您的应用,不过这完全是由于用户设置的缘故,并不是因为验证成功。



</p>


<h2 id="user-manage">管理应用链接设置</h2>

<p>
  用户可以更改应用链接设置,让系统按首选方式处理 URL。您可以在系统“设置”应用的<strong>设置 &gt; 应用 &gt; 应用信息 &gt; 默认打开</strong>下查看和管理应用链接。


</p>
+67 −0
Original line number Diff line number Diff line
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>
      </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>
+143 −0

File added.

Preview size limit exceeded, changes collapsed.

Loading