欢迎加入小米电视应用商店应用开发,与我们一起创造客厅娱乐的未来。在着手开发或者适配前,请确保您已经认真阅读《电视应用审核规范》和《电视应用特殊行业类资质要求与指引》,如果不符合上述条款中的任何内容,将会导致您的应用无法通过审核上架,或者被我们进行下线处理。
一、开发者应用接入基本流程
1、注册开发者账号,http://dev.xiaomi.com
2、在系统内正式提交上架申请之前,请邮件联系 小米电视应用商店商务 进行前置沟通
小米电视应用商店商务联系方式:蒲贝贝(pubeibei@xiaomi.com)、黄丹(huangdan6@xiaomi.com)
邮件格式如下:
- 邮件标题:【应用商店上架申请】XXX公司-XXX应用(若为多款,则写数量)
- 公司介绍:背景、团队;
应用介绍:应用列表(若为多款)、概述、资质、版权来源、合作的牌照方;
产品体验包(云盘链接)
3、登录小米电视开放平台,在系统内提交应用。
- 提交应用过程中,如果遇到无法上传的情况,请参考《应用上传常见问题》;
4、应用审核:
- 应用审核流程包含商务,监管部门,运营,小米测试部四个环节,整体流程较长,辛苦您耐心等待;
- 开发者如果需要自行对应用进行适配测试,可联系商务同事获取《小米电视应用商店开发者测试规范》文件以及申请驻场测试;
5、应用上架,应用审核完毕后,后台会出现【已通过】,开发者可在商店内查看应用。
6、应用下架,开发者需要事先联系商务,之后在系统内提交下架申请,审核通过后会将会进行应用下架。
二、电视应用包名指南
1、什么是包名 (Package Name)?
小米电视应用商店按照符合Android标准的原则进行设计,使用包名(Package Name)作为应用的唯一标识。即:包名必须唯一,一个包名代表一个应用,不允许两个应用使用同样的包名。包名主要用于系统识别应用,几乎不会被最终用户看到。
2、包名的命名规则
- 可以包含大写字母(A到Z)、小写字母(a到z)、数字和下划线,可以用点(英文句号)分隔,隔开的每一段都必须以字母开头。
- 应用包名应避免与其他开发者在架应用重复或相近。
- 应用包名不得随意添加如:".xiaomi"、".mijia"、".miui"等小米旗下品牌标识,如果参与应用联运合作,其包名中不得添加其他厂商名称,如:huawei、oppo、vivo等。
3、避免包名冲突
如果和手机应用的包名一致,有两个选择,申请从小米手机应用商店删除手机应用(当然也会从小米手机应用商店下架),或者修改电视应用包名(推荐)。 因为包名是唯一标识,为了避免与其他应用的包名重复,产生冲突,您可以这样命名:
- 将您的域名反转过来作为前缀,比如如果您的域名是zan.com,那么包名可以用com.zan开头,这样可以有效的避免重复;
- 在后面增加描述产品名称的字符,比如您的应用是音乐应用,可以命名为com.zan.music;
- 如果您没有域名,可以使用自己的邮箱作为前缀,比如 com.163.WoDeYouXiang。
请注意,应用发布后,请不要随意修改包名,一旦您修改了包名,就会被当作一个新的应用,旧版用户无法收到应用商店的升级提醒。
三、电视应用签名指南
1、什么是签名?
签名一词来源于生活中常用的术语,还记得刷信用卡会要求客户签名吗?这个签名的作用是确认这笔消费是本人经手的。计算机中所说的签名和生活中所说的签名在本质上是一样的,它所起到的作用也是一致的!为App签名的本质是说明这个App是我开发的,不是别人。用官方的话说,就是在应用和开发者之间建立可信任的关联。
2、为什么要给Android应用程序签名?
这样做的根本原因是Android系统需要一个机制,保证以下几点:
- 拿到一个应用的安装包,能够知道作者是谁。
- 当应用更新时,能够检测是不是作者本人提交的。
- 应用中的部分文件遭到修改时,能够检测到是否为作者本人做出的修改 为了实现上述目的,Android就引入了签名这种比较成熟的方法。
3、签名与应用商店有什么关系?
通过签名的检测和对比,应用商店能够从中识别到开发者的信息,在下面的几个场景中我们会依赖签名:
- 应用的认领。
- 每次应用提交更新,确保是作者本人提交。
- 当有人试图冒充作者提交应用时,应用商店能够阻止该行为。
- 通过签名黑名单,阻止恶意软件作者提交应用。
- 关于签名,我需要注意什么?
- 所有应用程序必须签名,未经过签名的程序不允许在模拟器或者设备上运行。
- 测试和开发阶段,开发工具会自动生成一个debug key来为应用签名。
- 当应用准备发布时,你需要创建自己的release key来为应用签名,所需要的工具都包含在SDK tools中。
- Android只在应用安装阶段检测签名是否过期,如果签名在应用安装后过期,应用仍可以继续正常使用。
- 你可以使用标准工具——keytool 和 jarsigner/apksigner来生成秘钥和为apk签名。
- 签名前,我们建议你使用zipalign工具来优化apk包。
4、如何签名?
- 准备工作 keytool:生成数字证书,即密钥,也就是上面说到的扩展名为.keystore的那类文件。 jarsigner:jdk 自带的签名工具,可以对 jar 进行签名。使用 keystore 文件进行签名。生成的签名文件默认使用 keystore 的别名命名。 apksigner:Android sdk 提供的专门用于 Android 应用的签名工具,与jarsigner工具不同的是,jarsigner只支持v1签名;而apksigner支持v1、v2和v3签名,更多关于Android签名的原理,请参看Android关于签名的官方文档。 zipalign:对签名后的apk进行优化,提高与Android系统交互的效率。
- 用keytool生成证书 命令:keytool -genkey -v -keystore liufeng.keystore -alias liufeng.keystore -keyalg RSA -validity 20000。 解释:-genkey意味着执行的是生成数字证书操作,-v表示将生成证书的详细信息打印出来,显示在dos窗口中;-keystore liufeng.keystore 表示生成的数字证书的文件名为“liufeng.keystore”;-alias liufeng.keystore 表示证书的别名为“liufeng.keystore”,当然可以不和上面的文件名一样;-keyalg RSA 表示生成密钥文件所采用的算法为RSA;-validity 20000 表示该数字证书的有效期为20000天,意味着20000天之后该证书将失效。
- 使用jarsigner工具为Android应用v1签名 命令:jarsigner -verbose -keystore liufeng.keystore -signedjar notepad_signed.apk notepad.apk liufeng.keystore。 解释:jarsigner是工具名称,-verbose表示将签名过程中的详细信息打印出来,显示在dos窗口中;-keystore liufeng.keystore 表示签名所使用的数字证书所在位置,这里没有写路径,表示在当前目录下;-signedjar notepad_signed.apk notepad.apk 表示给notepad.apk文件签名,签名后的文件名称为notepad_signed.apk;-liufeng.keystore(最后面的)表示证书的别名,对应于生成数字证书时-alias参数后面的名称。
- 使用apksigner工具为Android应用v1、v2或v3签名(apksigner和jarsigner只要使用其中一种签名工具就可以了,推荐使用apksigner为应用签名) 命令:apksigner sign --v1-signing-enabled true --v2-signing-enabled true --v3-signing-enabled true --ks liufeng.keystore unsigned.apk。 解释:apksigner是工具名称,--v1-signing-enabled true表示添加v1签名,本次命令同时添加v1、v2和v3签名,均使用liufeng.keystore证书。
- 使用zipalign字节优化工具优化apk(非必须但建议这么做) 命令:zipalign -v 4 signed.apk signed_aligned.apk 说明。 解释:zipalign是工具名称,-v表示在DOS窗口打印出详细的优化信息; signed.apk signed_aligned.apk 表示对已签名文件signed.apk进行优化,优化后的文件名为signed_aligned.apk。 需要注意的是,如果使用jarsigner工具,可以在签名后使用zipalign工具优化;如果使用apksigner工具进行签名,签名完成不得使用zipalign工具优化,这是其签名原理决定的,需要字节优化的话可以提前到签名前进行。
5、注意事项
- 签名方案与安卓版本 为了最大限度地提高兼容性,请按照 v1、v2、v3 的先后顺序采用所有方案对应用进行签名。与只通过 v1 方案签名的应用相比,还通过 v2+ 方案签名的应用能够更快速地安装到 Android 7.0 及更高版本的设备上。更低版本的 Android 平台会忽略 v2+ 签名,这就需要应用包含 v1 签名,目前具体的限制有: Android 7 (sdk version 24)以下必须有v1签名,如果没有,apksigner验证签名失败; Android11(sdk version 30)及以上必须有v2签名,如果只有v1签名,apksigner验证签名通过,但是设备装不上apk。
- 关于v3签名方案 Android 9 支持APK密钥轮替,这使应用能够在APK更新过程中更改其签名密钥。为了实现轮替,APK必须指示新旧签名密钥之间的信任级别。需要注意的是,如果使用轮替签名,那么对于同一个apk,如果想在设备上正常更新的话,必须满足新版本apk的轮替签名证书和历史签名证书完全涵盖了历史版本apk的所有签名证书。简而言之,针对原始签名的apk,如果使用不同的证书生成不同的轮替签名的apk,那么他们之间将不能覆盖更新。
四、电视应用版本号与版本名称指南
1、版本号(VersionCode)和版本名称(VersionName)简介
- VersionCode:对消费者不可见,仅用于应用市场、程序内部识别版本,判断新旧等用途。
- VersionName:展示给消费者,消费者会通过它认知自己安装的版本,下文提到的版本号都是说VersionName。
2、常见问题及解决方案
- 同一个版本号,对应了多个VersionCode怎么办?
- 解决方案:版本号应该和VersionCode一起涨,而且一旦发布新版本,就在所有渠道上架新版;
- 发布了一个VersionCode错误的版本怎么办
- 解决方案:因为VersionCode对最终用户是不可见的,增加即可;
- 发出去的应用有Bug要换回旧版,怎么操作?
- 解决方案:不建议回滚,最好赶紧修复Bug发个新版本(记得加VersionCode),如果Bug比较棘手,建议把旧版本的VersionCode改大一些后,提交新版本,这样可以保证所有用户都能下载/升级到一个相对可靠的版本;
五、支付服务
由于电视应用商店已上线米币支付系统,不允许使用任何第三方支付平台以及虚拟货币,支付接入请联系相关商务:黄丹(huangdan6@xiaomi.com)签署合作协议获得相关支付SDK接口文档。
六、其它常见问题
目前小米电视应用商店运行在MiBox和MiTV两大类设备上,目前主要型号包括MiBox1、MiBox Mini、MiBox3、MiBox4和MiTV1-4。主流的设备配置参数详见《小米电视&盒子设备规格参数》及http://www.mi.com 电视盒子分类
1、选择目标设备
您可以自行选择您的应用所面向发行的小米电视平台设备种类,当然面向的设备种类越多,就意味着更高的潜在下载量。当您面向多种设备发行时,一个应用要同时支持您选择的所有目标设备,一定要确保您的应用可以在目标设备上正常显示,且所有目标设备上的显示保持一致,关于如何开发适配多种显示尺寸的应用请参考屏幕兼容性概览。发布多个相同内容的应用分别支持不同目标设备的行为是不允许的,将导致您的应用无法通过审核。
如果您的应用是从安卓手机应用移植而来,我们强烈建议您参照大屏设备应用质量 重新优化应用的UI已使其充分利用大尺寸显示的空间,给用户带来适合大屏设备的观看体验。如果您的应用已经适配了安卓平板电脑且符合谷歌的设计指导,它将更容易适配到小米电视平台。
特别注意事项
- 您的应用必须在manifest中使用<uses-feature>将其定义为电视应用,这样才能在应用上传时被系统分类为电视应用,从而进入正确的审核流程,定义方法如下:
<uses-feature
android:name="android.hardware.type.television" android:required="true" >
</uses-feature>
参考:http://developer.android.com/guide/topics/manifest/uses-feature-element.html
2、适配小米遥控器
小米电视平台标配的人机交互方式为小米遥控器,所有应用必须适配小米遥控器,也就是说使用小米遥控器可以浏览应用的所有内容,实现应用的所有功能。小米遥控器为小米电视平台设备通用,也就是说一个遥控器可以支持所有小米电视平台设备。除了小米遥控器之外,有线或无线的游戏手柄,鼠标,键盘等其他外设也是支持的,在适配小米遥控器的基础上,开发者可以自愿添加对于其他附件的支持,在此不予详述。下面是小米遥控器的键值。
按键 | 键值 | 说明 |
Power | KeyEvent.KEYCODE_POWER | 在任意画面按下后设备休眠,当前应用在前台暂停运行;设备唤醒后(依然通过power键),应用恢复运行,或者保持暂停状态由用户选择是否恢复(如播放器)。 |
Home | KeyEvent.KEYCODE_HOME | MiTV:功能与安卓标准Home键一致。在任意画面按下后切换到系统主页,当前应用切换到后台暂停运行,再次点击应用图标恢复运行;或者当前应用自动关闭。 MiBox1和MiBox1S:在任意画面按下后切换到系统主页,同时系统将当前应用自动关闭。 |
Back | KeyEvent.KEYCODE_BACK | 功能与安卓标准Back键一致。在应用主页按下后不得直接退出应用,应该给用户适当提示,由用户确认是否退出。 |
Menu | KeyEvent.KEYCODE_MENU | 功能与安卓标准Menu键一致。 |
Volume Down | KeyEvent.KEYCODE_VOLUME_DOWN | MiBox1的标配遥控器无此按键,在MiBox1上有声应用需要自行实现应用音量调节,无法实现的有声应用不能在MiBox1上发行。 |
Volume Up | KeyEvent.KEYCODE_VOLUME_UP | MiBox1的标配遥控器无此按键,在MiBox1上有声应用需要自行实现应用音量调节,无法实现的有声应用不能在MiBox1上发行。 |
Left | KeyEvent.KEYCODE_DPAD_LEFT | |
Right | KeyEvent.KEYCODE_DPAD_RIGHT | |
Up | KeyEvent.KEYCODE_DPAD_UP | |
Down | KeyEvent.KEYCODE_DPAD_DOWN | |
OK/Center | KeyEvent.KEYCODE_DPAD_CENTER/KeyEvent.KEYCODE_ENTER | 两个键值都要支持,以满足未来系统需求。 |
3、广告要求
可以使用页内广告,广告内容必须与应用本身相关,禁止发布与应用无关的第三方广告。不要使用非页内广告。
4、应用安装与调试
通过外部存储设备安装:将存放有目标apk的U盘或移动硬盘与小米电视或小米盒子连接(小米盒子可能需要OTG线),使用最新系统自带的高清播放器即可访问存储设备,安装apk;
通过adb命令安装调试(小米电视/盒子默认支持网络adb调试,打开adb方式同手机:设置 – 关于 – 产品型号,连续按键);
5、版本号规范
版本号不能超过10位,建议版本号主要使用数字和“.”。除此规范之外您还要确保在所涉及的各方面应用所显示的版本号都是一致的,例如应用说明,应用内信以及android manifest.xml内。
6、应用图标规范
- 180*180图标直角,符合规范并打包进apk res文件夹下的xhdpi文件夹。
- 512*512图标直角,该图标将在商店相关界面展示,不用打包进apk,上传开发者后台即可。
请注意,以上两个图标均需要直角,系统会自动截取圆角。
7、技术类问题