作者@恺风Wei

应用本地化

如果应用支持多种语音,在res/下通过不同的目录进行适配,例如res/values-fr则是针对缺省语音为法文的系统。因此,与UI有关的字符串值,通常在res/values(-xx)/下的xml,如strings.xml中设定。

文字以及风格需要本地方适应,例如drawable,menus(不同国家可能不仅是文章问题,不同的组合,多些或少些菜单项),image,color。如果我们为不同语音设定不同的颜色,可以在xml中定义颜色,例如<color name="alert_color">#f00</color>,这样就可以分别进行适配。

应用图标

应用图标和名称是很重要的,可以看看同类的其他应用如何设计,不要和它们混淆。图标要能适配不同尺寸或像素的手机,不仅仅是尺寸缩放,有时还需要对画面进行调整。 这里需要注意,尺寸和像素是两个问题,像素表明可以提供更清晰的图像,例如我们可能在超高像素采用96×96,在高像素用72×72,在普通用48×48。在res/下目录命名后缀,尺寸分别为small, normal, large, xlarge,而像素高低则分别为ldpi, mdpi, hdpi, xhdpi, nodpi, tvdpi。而尺寸方面,往往和layout布局有关,这有关用户视图的大小。

现在大屏幕超高清为趋势,实际上我们并不需要太过担心这些问题,小尺寸屏幕的往往不是我们的目标用户,忽略了也就忽略了。

应用收费

(1)付费下载

在国内的应用商店,还没留意到哪个是提供付费下载的。Google Play支持付费下载,虽然国内用户几乎不使用Google Play。假设应用有付费和免费,有要使用同样的代码库,我们如何区分这是一个付费的还是免费的用户 。我们可以在代码中利用PackageManager来进行:

this.getPackageManager().checkSignatures( mainApppkg, keyPkg);

checkSignatures(String pkg1, String pkg2)比较两个包是否有着同样的签名,如果一样,则返回SIGNATURE_MATCH,不一样则是SIGNATURE_NO_MATCH或者SIGNATURE_UNKNOWN_PACKAGE。如果一致则允许某些权限的使用。

具体到区分免费应用和付费应用的情况,付费版和免费版的包名不同,签名也不同。当判断某个功能是否允许,则比较当前的主应用包和付费应用包的签名是否一致。如果一致,则是付费的。当然,还有很多其他方法,例如在代码中标明版本,区分付费版本和收费版本。  对于需要用户登录的应用,有服务器返回用户属性,包括免费用户还是付费用户。

(2)广告收入

网络广告,如AdMob和AdSense,在应用中使用它们的SDK。不过我挺讨厌这些网络广告的。

此外还有应用内购买等等。我们需要考虑如何在收入和用户体验取得平衡。