第28章:发布与分发:Google Play控制台配置、TV应用签名与发布清单

到了这一步,你的TV应用基本开发完了。但说实话,很多人在最后这关栽跟头——发布环节。我自己就见过好几个项目,开发时跑得挺好,一上架就闪退,最后发现是签名配置或者清单文件漏了东西。

这一章,咱们就把Google Play控制台的配置、应用签名、还有TV应用的发布清单,一次性讲清楚。

28.1 为什么TV应用发布比手机应用更严格?

你想想看,TV设备不像手机那么开放。用户不能随便从浏览器下载APK安装。绝大多数用户只能通过Google Play安装应用。所以Google对TV应用的要求,比手机应用要严格得多。

我遇到过最坑的一次:有个同事把手机版APK直接改了个包名就提交TV版,结果被Google Play驳回,理由是「缺少TV启动器支持」。嗯,这个坑咱们得避开。

核心要点:TV应用必须声明自己是TV应用,否则Google Play根本不会把它展示给TV用户。

28.2 Google Play控制台配置

先说说控制台里跟TV相关的几个关键配置项。

28.2.1 创建应用时选择TV设备

在Google Play控制台创建新应用时,有个步骤是选择设备类型。很多人会忽略这个,直接默认选手机。结果应用发布后,TV用户搜不到。

正确的做法是:

  • 在「商店发布」→「设备目录」中,勾选「Android TV」
  • 如果你的应用同时支持手机和TV,两个都勾上
  • 但要注意:如果只勾TV,手机用户就看不到你的应用

我的习惯:如果应用是纯TV版,我一般只勾TV。这样商店列表更干净,用户也不会因为手机版和TV版混淆而给差评。

28.2.2 TV应用的截图与描述要求

Google对TV应用的截图有特殊要求:

项目 要求
TV截图 至少2张,分辨率1920x1080,JPEG或PNG
TV图标 512x512,圆角矩形,背景透明
TV横幅 1280x720,用于首页推荐位
TV宣传语 最多80个字符,简短有力

我记得有一次,客户提供的截图是1920x1080但内容被裁切了,因为TV的safe zone跟手机不一样。TV屏幕边缘有5%的过扫描区域,所以重要内容要放在中心90%区域内。

28.3 TV应用签名

签名这块,说简单也简单,说复杂也复杂。我直接说重点。

28.3.1 签名方式选择

Google Play现在推荐两种签名方式:

  • 应用签名密钥由Google管理(推荐):你上传一个签名用的上传密钥,Google用它的密钥重新签名。好处是密钥丢了可以找Google恢复。
  • 自己管理签名密钥:所有签名自己搞定。密钥丢了就完了,没法更新应用。

我个人建议选第一种。为什么呢?因为我在项目里见过太多次密钥丢失的悲剧。有个团队把签名密钥存在一个U盘里,结果U盘坏了,整个应用只能下架重发。

警告:无论选哪种方式,上传密钥一定要备份!建议存到密码管理器+离线硬盘+团队共享三个地方。

28.3.2 生成签名密钥

用Android Studio生成签名密钥很简单:

# 在Android Studio中
Build → Generate Signed Bundle/APK → 
选择Android App Bundle或APK →
Create New → 填写密钥信息

# 或者用命令行
keytool -genkey -v -keystore my-release-key.jks \
  -keyalg RSA -keysize 2048 -validity 10000 \
  -alias my-key-alias

这里有个细节:密钥的有效期。我建议设10000天以上,大概27年。别设太短,否则几年后应用更新时密钥过期了,那可就麻烦了。

28.3.3 TV应用的特殊签名要求

TV应用跟手机应用在签名上没什么本质区别。但有一个坑:如果你的应用同时支持手机和TV,两个版本的签名必须一致。否则用户从手机版升级到TV版时,系统会认为这是两个不同的应用。

嗯,这个坑我踩过。当时我们手机版和TV版用了不同的签名密钥,结果用户反馈TV版安装后数据不共享。查了半天才发现是签名不一致的问题。

28.4 发布清单:AndroidManifest.xml的TV配置

这是TV应用发布最核心的部分。清单文件里少一个标签,Google Play就可能拒绝你的应用。

28.4.1 必须声明的TV支持

<application>标签内,必须添加:

<!-- 声明支持TV -->
<uses-feature
    android:name="android.hardware.touchscreen"
    android:required="false" />
<uses-feature
    android:name="android.software.leanback"
    android:required="true" />

第一行是说:我的应用不需要触摸屏。因为TV没有触摸屏。如果不加这行,Google Play会认为你的应用需要触摸屏,然后TV用户就搜不到了。

第二行是说:我需要Leanback库支持。这是TV应用的核心库,必须声明为true。

28.4.2 TV启动器Activity

TV应用必须有一个Activity作为启动入口,并且要声明为Leanback风格的启动器:

<activity
    android:name=".MainActivity"
    android:banner="@drawable/tv_banner"
    android:exported="true">
    
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
    </intent-filter>
</activity>

注意这里的categoryLEANBACK_LAUNCHER,不是手机用的LAUNCHER。我见过有人写错这个,结果应用在TV上能安装但打不开。

避坑指南:我曾经把一个手机应用改成TV版,忘了改category,结果在TV模拟器上测试没问题(因为模拟器装了所有启动器),但真机上一片空白。后来查了两天才发现是这个问题。

28.4.3 其他必须配置

还有一些配置项,虽然不是强制性的,但我建议加上:

<!-- 声明支持游戏手柄 -->
<uses-feature
    android:name="android.hardware.gamepad"
    android:required="false" />

<!-- 声明支持键盘 -->
<uses-feature
    android:name="android.hardware.keyboard"
    android:required="false" />

<!-- TV应用建议使用沉浸模式 -->
<application
    android:theme="@style/Theme.Leanback"
    ...>

游戏手柄和键盘虽然不是必须的,但加上后,用户如果有外设就能获得更好的体验。我自己的经验是,很多TV用户会配蓝牙手柄玩游戏,所以加上这个声明没坏处。

28.5 发布前的最终检查清单

每次发布前,我都会过一遍这个清单。你可以直接拿来用:

  1. 清单文件检查:确认有LEANBACK_LAUNCHERtouchscreen required=false
  2. 签名检查:确认签名密钥已备份,有效期足够长
  3. 截图检查:确认TV截图尺寸正确,内容在safe zone内
  4. 版本号检查:确认versionCode比上一个版本大
  5. 权限检查:确认没有多余的权限声明(TV应用尽量少要权限)
  6. 测试检查:在真机或模拟器上完整跑一遍流程

我的习惯:发布前我会在Google Play控制台的「测试」标签页里,先发布到内部测试轨道。让团队里几个人安装测试一下,没问题再推正式版。这一步能避免很多低级错误。

28.6 知识体系总览

下面这张图把TV应用发布的整个流程串起来了。你可以保存下来,每次发布前对照着看:

TV应用发布流程总览 1. 清单配置 LEANBACK_LAUNCHER touchscreen required=false leanback required=true 2. 应用签名 选择签名方式 生成上传密钥 备份密钥文件 3. 控制台配置 勾选Android TV设备 上传TV截图/图标 填写TV宣传语 4. 发布到Google Play

这张图把发布流程分成了三个阶段:清单配置、应用签名、控制台配置。每个阶段都有具体的检查项。你按照这个顺序走,基本不会漏东西。

28.7 最后说两句

发布TV应用其实不难,但细节确实多。我刚开始做TV开发时,光是清单文件就改了好几版。后来总结出这套流程,每次发布前过一遍,再也没出过问题。

嗯,这一章的内容就到这里。记住:清单文件是TV应用的身份证,签名是它的钥匙,控制台配置是它的展示柜。三个环节缺一不可。