写点什么

绕开 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:174376

评论

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

DeepSeek Function Calling调用实践

AI时代的一滴水

Python LLM模型 Function Calling DeepSeek v3

macOS Big Sur 11(macOS11系统)v11.7.10正式版

Rose

高级数学及符号运算 Wolfram Mathematica for Mac 中文激活教程

Rose

Kube-Proxy 可观测性最佳实践

观测云

Kubernetes

VM虚拟机Mac版安装下载 VMware Fusion Pro 13 密钥分享

Rose

Mac数据恢复软件 Magoshare Data Recovery v4.5

Rose

AI智上 | 财务数智化乘风启航,企业转型建设正当时!

用友智能财务

AI 财务 数智化

全栈开发者硬核实测:明基 RD280U 编程显示器能否重塑编码体验?

程序员洲洲

音乐创作工具 Ableton Live 12许可证

Rose

如何使用通义灵码辅助开发微信小游戏

阿里巴巴云原生

如何在 IntelliJ IDEA 中安装通义灵码 - AI编程助手提升开发效率

阿里云云效

从开发者视角解读 Google Cloud Next 25

RTE开发者社区

《Operating System Concepts》阅读笔记:p667-p699

codists

操作系统

哈尔滨等保:保护企业终端数据

黑龙江陆陆信息测评部

阿里云 AI 搜索开放平台新功能发布:大模型联网能力上线

阿里云大数据AI技术

大数据 阿里云 大模型 LLM AI搜索

2025上海国际半导体产业博览会

AIOTE智博会

半导体展 半导体展会 半导体展览会

与AI深度融合的Go开发框架sponge,解决使用cursor、trae等AI辅助编程工具开发项目时的部分痛点

vison

golang 代码生成 AI助手

功能齐全的Mac用户必备FTP客户端:ForkLift

Rose

如何使用通义灵码辅助开发微信小游戏

阿里云云效

复杂权限管理系统开发难?看AI如何生成RBAC完整代码

飞算JavaAI开发助手

没有专业IT团队?灯塔低代码平台让中小企业自己当"开发者"

中烟创新

Premiere Pro 2025(PR2025)激活补丁及安装教程

Rose

AI人像修饰的革命性工具Aperty for mac

Rose

数据库管理开发工具Navicat for MySQL汉化版

Rose

sublime text 4如何汉化?sublime text 中文设置教程

Rose

Spring Boot整合难点?AI一键生成全流程解决方案

飞算JavaAI开发助手

JVM 调优不再难:AI 工具自动生成内存优化方案

飞算JavaAI开发助手

电商系统开发:基于飞算JavaAI的分布式事务解决方案自动化实践

飞算JavaAI开发助手

前端热更新:无声革新浪潮重塑中国互联网格局

xuyinyin

如何在 IntelliJ IDEA 中安装通义灵码 - AI编程助手提升开发效率

阿里巴巴云原生

在 Visual Studio Code 中安装通义灵码 - 智能编码助手

阿里巴巴云原生

vscode

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