<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.twa.myapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data
android:name="asset_statements"
android:resource="@string/asset_statements" />
<activity>
</activity>
</application>
</manifest>
现在,我们已建立 Android 应用与网站之间的关联。在创建网站到应用验证之前,调试这部分关系会很有帮助。
如需在开发设备上进行测试,请按以下步骤操作:
启用调试模式
在开发设备上打开 Chrome,前往 chrome://flags,搜索名为在非已取得 root 权限的设备上启用命令行的项目,将其更改为 ENABLED,然后重启浏览器。
接下来,在操作系统的终端应用中,使用 Android 调试桥(随 Android Studio 安装),然后运行以下命令:
adb shell "echo '_ --disable-digital-asset-link-verification-for-url=\"https://airhorner.com\"' > /data/local/tmp/chrome-command-line"
关闭 Chrome,然后从 Android Studio 重新启动应用。现在,应用应以全屏模式显示。
建立从网站到应用的关联
开发者需要从应用中收集 2 项信息才能创建关联:
软件包名称:第一个信息是应用的软件包名称。这与创建应用时生成的软件包名称相同。您也可以在模块 build.gradle 内找到该名称,具体路径为 Gradle Scripts > build.gradle (Module: app),它是 applicationId 属性的值。
SHA-256 指纹:Android 应用必须经过签名,才能上传到 Play 商店。系统会使用相同的签名通过上传密钥的 SHA-256 指纹在网站和应用之间建立连接。
Android 文档详细介绍了如何使用 Android Studio 生成密钥。
请务必记下密钥库的路径、别名和密码,因为您将在下一步中用到它们。
使用以下命令通过 keytool 提取 SHA-256 指纹:
keytool -list -v -keystore [path] -alias [alias] -storepass [password] -keypass [password]
SHA-256 指纹的值会显示在证书指纹部分下。以下是输出示例:
keytool -list -v -keystore ./mykeystore.ks -alias test -storepass password -keypass password
Alias name: key0
Creation date: 28 Jan 2019
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Test Test, OU=Test, O=Test, L=London, ST=London, C=GB
Issuer: CN=Test Test, OU=Test, O=Test, L=London, ST=London, C=GB
Serial number: ea67d3d
Valid from: Mon Jan 28 14:58:00 GMT 2019 until: Fri Jan 22 14:58:00 GMT 2044
Certificate fingerprints:
SHA1: 38:03:D6:95:91:7C:9C:EE:4A:A0:58:43:A7:43:A5:D2:76:52:EF:9B
SHA256: F5:08:9F:8A:D4:C8:4A:15:6D:0A:B1:3F:61:96:BE:C7:87:8C:DE:05:59:92:B2:A3:2D:05:05:A5:62:A5:2F:34
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3
准备好这两项信息后,前往 assetlinks 生成器,填写相应字段,然后点击生成声明。复制生成的声明,并通过网址 /.well-known/assetlinks.json 从您的网域提供该声明。
Android Studio 创建新项目时,会附带一个默认图标。作为开发者,您需要创建自己的图标,并在 Android 启动器中将您的应用与其他应用区分开来。
Android Studio 包含 Image Asset Studio,该工具提供了创建适用于应用所需的每种分辨率和形状的正确图标所需的工具。
在 Android Studio 中,前往 File > New > Image Asset,选择 Launcher Icons (Adaptative and Legacy),然后按照向导中的步骤为应用创建自定义图标。
生成已签名的 APK
在网域中放置 assetlinks 文件并在 Android 应用中配置 asset_statements 标记后,下一步是生成已签名的应用。再次提醒一下,有关此过程的步骤已广泛记录。
您可以使用 adb 将输出 APK 安装到测试设备中:
adb install app-release.apk
如果验证步骤失败,您可以通过 Android 调试桥,在操作系统的终端中检查是否有错误消息,并连接测试设备。
adb logcat | grep -e OriginVerifier -e digital_asset_links
生成上传 APK 后,您现在可以将应用上传到 Play 商店了。
添加启动画面
从 Chrome 75 开始,Trusted Web Activity 支持启动画面。
您可以通过向项目中添加一些新的图片文件和配置来设置启动画面。
请务必更新到 Chrome 75 或更高版本,并使用最新版可信 Web 活动支持库。
为启动画面生成图片
Android 设备可以具有不同的屏幕尺寸和像素密度。为了确保启动画面在所有设备上都能正常呈现,您需要为每种像素密度生成图片。
本文无法详细介绍与显示屏无关的像素 (dp 或 dip),但举个例子来说,如果创建一个 320x320dp 的图片,则表示在任何密度的设备屏幕上,该图片都代表一个 2x2 英寸的方形,并且在 mdpi 密度下相当于 320x320 像素。
然后,我们可以推导出适用于其他像素密度的尺寸。下表列出了像素密度、应用于基准尺寸 (320x320dp) 的乘数、生成的像素尺寸,以及应在 Android Studio 项目中添加图片的位置。
生成启动画面图片后,接下来需要向项目添加必要的配置。
首先,将 content-provider 添加到 Android 清单 (AndroidManifest.xml)。
<application>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.example.twa.myapplication.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
</application>
然后,添加 res/xml/filepaths.xml 资源,并指定 twa 启动画面的路径:
<paths>
<files-path path="twa_splash/" name="twa_splash" />
</paths>
最后,将 meta-tags 添加到 Android 清单中,以自定义 LauncherActivity:
<activity android:name="com.google.androidbrowserhelper.trusted.LauncherActivity">
<meta-data android:name="android.support.customtabs.trusted.SPLASH_IMAGE_DRAWABLE"
android:resource="@drawable/splash"/>
<meta-data android:name="android.support.customtabs.trusted.SPLASH_SCREEN_BACKGROUND_COLOR"
android:resource="@color/colorPrimary"/>
<meta-data android:name="android.support.customtabs.trusted.SPLASH_SCREEN_FADE_OUT_DURATION"
android:value="300"/>
<meta-data android:name="android.support.customtabs.trusted.FILE_PROVIDER_AUTHORITY"
android:value="com.example.twa.myapplication.fileprovider"/>
</activity>
确保 android.support.customtabs.trusted.FILE_PROVIDER_AUTHORITY 标记的值与 provider 标记内 android:authorities 属性的定义值相匹配。
使 LauncherActivity 透明
此外,请为 LauncherActivity 设置半透明主题,以确保 LauncherActivity 是透明的,从而避免在启动画面之前显示白屏:
<application>
<activity android:name="com.google.androidbrowserhelper.trusted.LauncherActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar">
</activity>
</application>
我们期待看到开发者使用 Trusted Web Activity 构建出什么样的应用。如需提供任何反馈,请通过 @ChromiumDev 与我们联系。
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2020-02-04。
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2020-02-04。"],[],[]]