50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

绕开 Android 应用开发的那些“坑”

  • 2013-06-03
  • 本文字数:1870 字

    阅读完需:约 6 分钟

自从推出“豌豆洗白白”之后,我们也在不断听取用户和开发者的意见来改进产品。不过,部分开发者提出的奇怪的场景,也会让我们感到疑惑:比如突然更换了签名文件,或者包名与别的应用撞车造成的误洗等。这些事故,很多情况下是可以避免的,所以我们也在本文中总结一下 Android 开发中容易被忽视的一些注意事项吧:

一、谨慎选择包名

包名 (Package Name) 就相当于一款应用在户口本上登记的名字,是系统用来区分不同应用的字段。重复的包名会被认为是同一款应用,不能同时安装在一个系统里。一般来说,包名建议使用域名反序。比如豌豆荚的网站域名是 www.wandoujia.com,那么豌豆荚的一系列 Android 应用的包名就是 com.wandoujia.***。这种约定俗成的办法可以最大程度地避免“撞名”的事故。

案例一

某个手机 ERP 客户端的开发者,在开发应用时使用了 Adobe 的工具,同时也参考了 Adobe 的官方教程,从而将应用命名为 air.Main 这样的通用包名,跟另一个游戏重名了。于是,在升级和洗白白的过程中就都产生了混乱……所以取名要慎重啊!

案例二

还有个开发者,不知为何给几个不同的应用都使用了同一个包名。于是“com.hexin.qs.app.android”这个包名,对应了“申国万银证券”、“中信建投手机证券”、“联讯证券手机炒股”等好几个完全不同的应用。带来的后果就是,用户不能在手机上同时安装这几个应用,而且在升级过程中也容易从一个应用升级到另一个应用上。所以,不能给好几个孩子取同一个名字啊!

二、一款应用只应该有一个签名

签名文件就相当于开发者的“身份证”,我们平时生活中应该只有一张身份证,那么在手机里也一样,签名也应该是唯一的。而且因为签名的加密机制,使复制和伪造签名变得几乎不可能,所以“豌豆洗白白”也是将签名作为判断是否官方版的最主要标准之一。

如果一个应用使用了不同的签名,那么对于用户来说,可能会造成应用无法升级,因为 Android 系统会在升级应用的过程中比对签名,不同的签名无法升级。如果用户选择强制升级的话,因为签名不同,所以需要先卸载旧版再安装新版,那么之前存在本地的应用数据、游戏记录等也会直接丢失。

案例一

就好像我们会不小心弄丢身份证,开发者也会不小心弄丢签名文件。我们曾遇到过四五例类似的例子,开发者找上门来说要求更换签名,原来是因为工程师离职把签名文件带走了,老板要不回来了,只好把原来的签名也全都改一遍。所以签名文件要保管好啊!

案例二

我们曾经统计过,网游“我叫 MT”在各大市场上一共有 48 种不同的签名。据“我叫 MT”的开发者说,他们是通过不同的签名来区分不同的渠道的,而一共放出过多少种签名难以统计。这么多个不同的签名文件,除了自己管理起来非常麻烦之外,也给用户的升级过程带来了困扰,一不小心升级到了不同签名的版本上,游戏记录就全部丢失了。

Android 签名机制的目的是为了检验应用是否被人更改过,而不是为了让你区分渠道的。那么正常来说应该用什么方法来区分渠道呢?请看下一条。

三、使用 xml 配置文件来区分渠道

一般来说,我们在 Android manifest 文件中使用 meta-data 来区分渠道。例如:

复制代码
<meta-data android:name="CHANNEL" android:value="wandoujia"/>

每次正式打包完成后,修改 android:value,再重新打包即可生成一个新的渠道包,所以:

不要再用签名来区分渠道了!

四、正确填写版本号

在 Android 应用中,有两个参数与版本号相关。其中,version Name 表示版本名称,是字符串,version Code 表示版本号,是整型数字。

一般来说,用户直观看到的是 version Name,所以这里应该填写形似“4.15.1”这样的版本号。而真正用来判断新版本旧版本的参数是 version Code。在应用发布第一个版本的时候,version Code 应该填 1,然后每次发布的时候都递增,这样才是以规范的格式告诉各大市场你的应用的更新程度。

有的开发者在 version Code 上非常随意,这个版本发布的时候碰上结婚纪念日,于是用老婆的生日当 version Code;下个版本发布的时候运气不太好,于是用自己的幸运数字当作 version Code……这样在用户看来的结果就是,明明从官网安装了最新的 2.2.0 版本,可是各大市场却提醒“升级到 2.1.3 版本”,越升级版本号越小了。

以上四件小事,虽然都比较琐碎,而且没什么技术含量,但却是很多入门的 Android 开发者容易忽略的问题。希望本文能帮助广大开发者,在写出好应用的同时,避免这些“坑”给应用带来不必要的损失。

关于作者

“豌豆洗白白”基于豌豆荚对应用特征的深入了解,致力于帮用户找到干净无通知栏广告的官方版应用。“豌豆洗白白”团队由 8 名豌豆组成,平均年龄 27 岁。项目负责人丁吉昌是豌豆荚创始团队成员。

2013-06-03 23:174337

评论

发布
暂无评论
发现更多内容

腊鸡与猴儿

黄大路

人生 小说

高仿瑞幸小程序 04 小程序的全局数据

曾伟@喵先森

小程序 微信小程序 大前端

数据挖掘|cross_val_score交叉验证使用

黄大路

Python 数据挖掘 学习 数据分析

DevOps怎样影响开发运维人员

脚动两轮男之漂流小王子

DevOps

Java并发编程--ReentrantLock

Java收录阁

并发编程

一个 UED 团队的自我修养

oldj

团队管理 UED

面试官浅析程序员面试过程中的二三事

joe

互联网 个人成长 方法 职场 文化

Scrum精髓 - Scrum的核心到底是什么

Bob Jiang

Scrum 敏捷 Scrum精髓 敏捷精髓

如何打造个人品牌?

石云升

个人 品牌

数据库连接池的大小

Java收录阁

数据库

程序员的晚餐 | 5月9日 炖蹄髈

清远

程序员

拜托,别再问我Zookeeper如何实现分布式锁了!

不才陈某

zookeeper 分布式 后端 分布式锁

直播电商行业一些看法

黄大路

互联网 商业 商业模式 商业价值 行业资讯

使用人工智能技术改进面试机器人

陆道峰

人工智能 学习 聊天机器人

Elasticsearch原理讲透了!

Geek_0o5u34

lucene elasticsearch 倒排索引 分布式搜索引擎 数据的分片和备份

真实 Java 笔试题

旭霁

面试

游戏夜读 | 联网才能玩的单机

game1night

做程序员有未来吗

山楂大卷

程序员 个人成长 职业规划 技术人

如何快速对应用系统做一个360度画像诊断?

姜戈

Java 运维 多线程 网络 内存

产品经理中必会SQL技能,相关内容研发可不予支持

韩超

MySQL sql 产品经理

关于职能型团队管理一些总结

黄大路

项目管理 管理

以不变应万变——复杂系统回归测试新思路

刘华Kenneth

DevOps 敏捷 测试 单体系统 复杂

ROS与OpenAI结合使用教程(概览)

辣么大

读 Go Scheduler 有感:给产品经理的建议

Ya

程序员 产品经理 操作系统 OS Scheduler

Java 环境配置与编辑器使用

旭霁

Java IDEA

理解雾计算(Fog Computing)与边缘计算(Edge Computing)

老任物联网杂谈

雾计算 Fog Computing 边缘计算 Edge Computing

向上管理第一项:路径P背后的目标B

kimmking

管理

回"疫"录(11):别让善良寒了心

小天同学

疫情 回忆录 现实纪录 纪实

来了来了,2020 首场 Meetup ,可!

Apache Flink

大数据 flink 流计算 实时计算

关于查尔斯-斯特里克兰

黄大路

提升认知 小说 个人提升 认识自己

Redis 命令执行过程(上)

程序员历小冰

redis 源码分析

绕开 Android 应用开发的那些“坑”_Android/iOS_“豌豆洗白白”团队_InfoQ精选文章