主题
证书、打包与实人认证(一)
本页对应 证书、打包与实人认证,共 7 段视频,约 43 分钟。
学习目标
- 能够独立安装 JRE 8,并通过命令行执行
java -version验证安装结果。 - 能够配置
JAVA_HOME与Path环境变量,并通过命令行验证配置生效。 - 能够使用
keytool生成自有 Android 证书,完成证书格式迁移,并正确记录别名、密码与证书路径。 - 能够使用自有证书在 HBuilderX 中完成云打包,并正确填写包名、证书别名、密码及证书文件。
- 能够基于证书 SHA1、应用包名等信息申请高德地图 Key,并在模块配置中完成地图 Key 配置后重新打包验证。
- 能够使用 DCloud 云端证书完成应用打包,并区分云端证书与本地自有证书的配置方式。
知识点
安卓证书是什么,为什么必须有
安卓证书是一种数字签名技术。安卓系统要求安装到系统上的 App 必须使用证书进行签名。签名相当于 App 的“身份证书”,用来证明这个 App 的归属者和合法性:它是京东的,还是淘宝的;是你公司的,还是别人的。
为什么需要它?因为只把 App 打包到自己手机上玩一玩可以,但真正上线到应用商店,或者使用地图、人脸识别等高级功能时,没有证书或使用公共证书都会受限。转写稿里反复强调一句话:凡是开发 App,无论安卓还是 iOS,都必须有证书;没有证书,App 不能正常进行签名和发布。安卓证书由 Google 规定生成规则,开发者自助生成且免费;iOS 则涉及付费开发者证书和发布证书,常见是 99 美元/年,还要有苹果设备,所以本课以安卓为主。
怎么想?不要一直用 HBuilderX/uni-app 提供的公共证书。公共证书意味着很多开发者用同一份证书,不适合企业项目;合理的方式是一个 App 使用自己独立的证书。易错点:不要把“能打包安装”当成“能正式上架”;也不要把公共证书当成企业自有证书。
先装 JRE 环境:证书工具需要 Java 运行环境
生成本地证书需要 Java 环境。转写稿里说的“GRE”是口误/同音识别,实际是 JRE。JRE 是 Java 运行环境,可以把它理解成一个软件;证书生成工具需要它。推荐使用 JRE 8。
怎么做?双击安装包,点击安装,按下一步等待进度条完成。安装时不要自己改目录,使用默认安装目录,这样后面配置环境变量时路径统一,和大家操作一致。



易错点:不要随意改安装目录;如果改了,后面 Path 里的路径也要跟着改。安装完成后不要以为就结束了,还要配置环境变量并验证。
配置 JRE 环境变量:让操作系统找到 java
为什么需要环境变量?变量有变量名和变量值;环境变量是给操作系统使用的变量。系统执行命令时会读取这些变量,从而找到对应程序。JRE 装好后,需要把它的 bin 目录告诉系统,否则命令行找不到 Java 相关命令。
怎么想?我们改的是 Path,不是随便新建一个变量。转写稿强调:选中 Path 后点编辑,再点新建,把 JRE 的 bin 目录加进去。笔记注:默认安装到 C:\Program Files\Java\jre-1.8\bin,因此环境变量添加的路径也是该目录对应的路径。
怎么做?Win 键搜索“编辑系统环境变量”,打开环境变量窗口,找到 Path,编辑,新建一行,填入:
C:\Program Files\Java\jre-1.8\bin




易错点:不要删除 Path 里原有的值,只新建一行;路径要能在资源管理器里打开验证;不同电脑原有 Path 内容可能不同,不用管已有值,只追加自己的 JRE 路径。
验证 JRE 是否安装成功
为什么要验证?因为“装了软件”和“命令行能用”是两件事,只有命令行能输出版本号,才说明环境变量配置生效。
怎么做?打开命令行,输入:
bash
java -version只要出现版本号,就说明 JRE 环境可用。转写稿提到版本是 8 即可,不必纠结具体小版本。易错点:命令是 java -version,不是 java -v;配置完最好新开命令行;如果提示“不是内部或外部命令”,优先检查 Path 路径是否写对。
生成本地证书:别名、文件名、有效期和密码都要记住
环境就绪后,按 HBuilderX/uni-app 官方说明生成证书。关键信息有:证书别名(如 test 或自己起的名字,必须记住);证书文件名(如 test.keystore,可改成自己的名字);有效期 365*100 表示 100 年,也可以改成 10 年;密码必须记住。填写姓名、单位、组织、城市、省份、国家后确认,再输一次密码。
证书生成在命令行当前所在目录:在桌面执行就去桌面找。生成后若出现格式迁移警告,按提示复制自己证书名对应的命令执行,会得到新格式文件;最终使用不带 old 的新证书。易错点:别名和密码忘掉后打包会失败;不要照抄别人的证书名;不要用 old 文件;证书不用每次打包都重新生成,一个证书可以持续复用。
用自有证书打包,并用 SHA1 申请高德 Key
打包时进入“发行”,填写包名,选择“自有证书”,填写别名、密码和证书路径,选择传统打包上传证书。包名一旦确定不要随便改。申请高德 Key 时,需要包名和 SHA1:执行 keytool -list -v -keystore 你的证书文件,输入密码,在输出信息里找到 SHA1,复制到高德平台,填好包名提交即可得到 Key。之后在 manifest 的模块设置里选择高德地图并填入 Key,重新云打包测试。易错点:包名与打包、Key 申请不一致;SHA1 复制错;没勾选地图模块会提示基座未配置。
如果不想配本地 JRE,也可以在 DCloud 开发者后台创建云端证书,打包时选“云端证书”。云端证书详情里同样有 SHA1、MD5、SHA256 和时效信息;所有者显示为编码不影响使用。本地证书和云端证书二选一即可,包名仍然不能随便变。
证书与云打包的关系
为什么需要:uni-app 打包 APK 时必须有证书。公共证书大家都能用,适合练习;但上线应用商店、使用地图/人脸识别等能力时,公共证书会受限,也不能证明 APP 属于你。
怎么想:把证书理解成“给 APP 盖章”。章上写着谁,APP 就证明是谁开发的;正式项目应使用自己的证书。
怎么做:先生成自有证书,再在 HBuilderX 的发行/云打包流程中选择“自有证书”,填写别名、密码和证书文件路径。
易错点:证书别名和密码必须记住;证书文件不要每打一次包就重新生成,一份证书可长期复用。转写稿里说的“GRE”应理解为 JRE,“LOS”应理解为 iOS。
安装 JRE 与配置环境变量
为什么需要:本地生成证书依赖 Java 运行环境,官方推荐 JRE 8。没有 JRE,后续生成证书命令无法执行。
怎么想:JRE 可先当成一个必须安装的软件;安装后还要让操作系统能找到它,所以要配置环境变量。
怎么做:双击安装 JRE,保持默认目录,不要随意改路径;在 Windows 中搜索“编辑系统环境变量”,新建 JAVA_HOME,再把 JRE 的 bin 或安装目录按文档要求加入 Path。安装后在命令行执行:
bash
java -version能显示版本号,说明环境可用。
易错点:不要改默认安装目录,否则同学之间路径不同,排错困难;环境变量改的是 Path,已有值不要删除,只新增;验证命令不是 java -v。
生成自有证书
为什么需要:正式打包和自定义调试基座都可以使用同一份证书,但证书必须属于自己。
怎么想:生成证书时要确定几个关键信息:证书别名、证书文件名、有效期、密码、组织/姓名等信息。别名和密码后面打包要用。
怎么做:按 HBuilderX 官方文档复制生成证书命令,只修改别名、文件名和有效期等少量内容;在哪个目录执行命令,证书就生成在哪个目录。命令执行中会要求输入密码和姓名、单位、城市、国家等信息,最后确认。若工具提示旧格式,可按提示再执行迁移命令,最终使用不带 old 的新证书。
易错点:别名不要和同学完全一样;密码建议练习时简单、正式项目复杂且保管好;执行命令前先确认当前目录,否则会找不到证书;最终打包选新格式证书,不选 old 文件。转写稿中“傻值”实际是申请平台时用到的 SHA1 信息。
自定义基座与正式打包
为什么需要:自定义调试基座用于开发环境,方便真机调试;正式包用于上线到安卓应用商店,如 360、小米、华为等。
怎么想:两者不是“证书不同”,而是用途不同;生成好的证书既可用于正式 APK,也可用于自定义调试基座。
怎么做:在 HBuilderX 中选择发行/云打包,填写包名,选择“自有证书”,填写证书别名、密码,选择证书文件;需要调试就打自定义基座,需要上线就打正式包,打包类型按界面选择传统包。
易错点:正式包与自定义调试基座的包名要一致!包名一旦确定不要反复改;证书路径要选对;云打包时按提示关联云空间并等待排队。


云端证书与打包选择
为什么需要:如果本地 JRE 环境配置困难,可以使用 DCloud 提供的云端证书,省去本地命令。
怎么想:云端证书和本地证书本质都是给 APP 盖章,区别只是生成位置不同。
怎么做:登录开发者后台,在应用下创建云端证书,查看证书详情中的 SHA1、MD5、有效期等信息;打包时不再选“自有证书”,而选“云端证书”,包名仍保持不变。
易错点:云端证书的所有者信息可能以编码形式显示,但不影响使用;无论本地还是云端证书,包名都要固定。申请高德 Key 时要用包名和证书 SHA1,若地图打包后不可用,先检查是否勾选了地图模块并正确填写 Key。

正式包与自定义调试基座的区别在于:自定义调试基座用于开发环境,正式包用于上线到安卓应用商店。再次强调:正式包与自定义调试基座的包名要一致!
地图服务选型:先看兼容性,再决定用谁
为什么需要:uni-app 一套代码可发 App、H5、小程序,但地图服务商对三端支持并不一致。若不先选型,容易出现“H5 能显示、App 打包后地图不可用”的问题。本节笔记给出兼容性表:
| 地图服务商 | App | H5 | 小程序 |
|---|---|---|---|
| 高德 | √ | √ | |
| 仅nvue页面 | √ | ||
| 腾讯 | √ | √ |
怎么想:H5 和小程序平台我们选择的是腾讯地图服务平台,App 我们选择高德地图服务平台。也就是按平台分工:H5/小程序走腾讯,App 走高德。Google 在 App 端仅 nvue 页面可用,不作为本节主路线。
怎么做:先注册高德地图开发者账号并创建应用;H5/小程序侧按腾讯地图平台申请对应 Key。App 端后续在 manifest.json 的模块设置里启用 Maps,并选择高德、填入高德 Key。
易错点:不要以为“一个 Key 三端通吃”;不要把 H5 的腾讯 Key 填到 App 的高德模块里;Google 的“仅 nvue 页面”限制要看清。
创建高德应用与 Key:PackageName 和 SHA1 是关键
为什么需要:App 使用高德地图时,高德需要确认“这个 Key 是给哪个应用、哪个证书用的”,所以创建 Key 时要填包名和证书摘要 SHA1。转写稿里反复强调:App 打包、上架、使用地图等高级功能,需要自己的证书;公共证书不适合正式项目。
怎么想:先有应用,再有 Key。应用名可自拟,Key 名称推荐“应用名+场景”。平台选 Android,因为我们以 Android 打包为主。PackageName 是在自定义调试基座和正式包时定义的包名;它一旦确定就不要随意改。SHA1 不是包名,而是证书的摘要信息,必须从证书里读出来。
怎么做:进入高德控制台,创建应用;在应用下添加 Key,选择 Android,填写 Key 名称、PackageName、SHA1,勾选阅读协议后提交,得到 Key。创建应用页面如下:

SHA1 值的获取方式如下所示。转写稿中的思路是:在证书所在目录打开命令行,执行 keytool 命令查看证书详情,输入证书密码后复制 SHA1:
bash
keytool -list -v -keystore 你的证书文件易错点:包名不要一会儿写 abc.bcd.def、一会儿又换;证书密码要记住,查 SHA1 和打包都要用;复制 SHA1 时不要多带空格或漏字符;高德 Key 提交后要保存好。
把 Key 配进 App:模块设置后重新云打包
为什么需要:只申请 Key 不够,App 内还要告诉 uni-app:“地图模块使用高德,并使用这个 Key”。否则打包后地图仍可能报错。
怎么想:Key 是平台侧凭证,模块设置是项目侧开关,两边必须对上:高德 Key 对应 Android 包名和证书 SHA1;项目打包时也要使用同一套包名和证书。
怎么做:打开 manifest.json,进入“模块设置”,找到 Maps,选择高德,把高德 Key 填进去。转写稿提到 iOS 侧若暂不打包可留空;若提示不能为空,可再按 iOS 流程申请一个 Key。配置后重新进行云打包,安装到手机测试地图。若未勾选地图模块或未填 Key,可能提示“当前基座没有配置……”之类错误,地图不可用。
易错点:改完 Key 必须重新打包,不能只改代码;打包时选择自有证书,别名、密码、证书文件要对应;证书文件优先选新生成的标准格式文件,不要选带 old 的旧文件;测试时重点看地图能否正常加载。
补充:证书可用本地生成,也可用云端证书
为什么需要:转写稿用大量时间讲证书,是因为 SHA1、包名、打包都绕不开证书。没有自己的证书,后续地图 Key 和正式打包都不稳。
怎么想:本地生成需要安装 JRE、配置环境变量、执行 keytool 生成证书;若不想折腾本地环境,也可用 DCloud 云端证书。两种方式目的相同:得到可用的证书信息,并在打包时选用。
怎么做:本地方式按转写稿步骤安装 JRE、配置环境变量、生成证书并查看 SHA1;云端方式在开发者后台创建云端证书,打包时选择“云端证书”,包名仍保持不变。验证 JRE 可用可执行 java -version。
易错点:同音字要纠正——是 JRE 不是“GRE”,是 SHA1 不是“傻值”,是包名不是“报名”,是 Key 不是“T/P”。证书别名和密码要记录;证书不必每次重新生成,但同一项目包名和证书要固定,避免 Key 对不上。
代码示例
示例一:安装 JRE 后生成安卓证书(命令行)
bash
# 1) 验证 JRE 环境是否装好(和验证 node 一个套路:node -v)
java -version
# 只要能看到版本号(我们统一装的是 1.8)就说明环境 OK,环境变量配好了
# 2) 生成证书 —— 注意:在哪个目录执行,证书就生成在哪个目录
# 我这里在“桌面”打开命令行,所以一会儿去桌面找证书
# -alias 证书别名,必须自己起一个、并且必须记住
# -validity 365 * 100 = 100 年不过期(想短点就写 3650 表示 10 年)
keytool -genkey -alias 1557 -keyalg RSA -keysize 2048 -validity 36500 -keystore 1557.keystore
# 回车后按提示依次输入:
# 输入密钥库口令: 123456
# 再次输入新口令: 123456
# 您的名字与姓氏是什么? 张三
# 您的组织单位名称是什么? 传智
# 您的组织名称是什么? 前端
# 您所在的城市或区域名称是什么? 北京
# 您所在的省/市/自治区名称是什么? 北京
# 该单位的双字母国家/地区代码是什么? CN
# 是否正确? y
# 再次输入密钥库口令: 123456
# 3) 生成后 keytool 会警告“建议迁移到 PKCS12 格式”,把提示里那条命令复制过来执行
# (每个人名字不一样,一定要复制自己那条)
keytool -importkeystore -srckeystore 1557.keystore -destkeystore 1557.keystore -deststoretype pkcs12
# 再输一次密码 123456,成功后目录里会多出 old 备份,正式用“不带 old 的新文件”
# 4) 查看证书详细信息,取出 SHA1(申请高德 Key 要用)
keytool -list -v -keystore 1557.keystore
# 输入密码 123456,输出里找 SHA1 那一行,复制下来要点与易错点:
java -version是验证 JRE 是否装好、环境变量是否配对的唯一标准,没版本号就回去检查Path里那条C:\Program Files\Java\jre-1.8\bin。-alias(证书别名)和密钥库口令(密码)是后面云打包必须原样填写的两个东西,忘了就得重新生成。- 证书生成位置 = 执行命令时的当前目录,所以打正式包时“证书文件”就按这个目录去找。
- 生成完出现
old与“不带 old”的两个文件时,用不带 old 的新文件(老的格式不标准)。 - 证书只需要生成一次,之后所有 App 都可以复用它,不用每次打包都重新造。
示例二:manifest.json 里配置包名与高德地图 Key
json
{
"name": "神灵物流",
"appid": "__UNI__XXXXXXX",
"versionName": "1.0.0",
"versionCode": "100",
"app-plus": {
"distribute": {
"android": {
"packagename": "abc.bcd.def",
"minSdkVersion": 21,
"targetSdkVersion": 30
},
"sdkConfigs": {
"maps": {
"amap": {
"appkey_android": "这里粘贴高德申请的 Android 平台 Key",
"appkey_ios": "iOS 需要 99 美元证书,可以留空"
}
}
}
}
}
}要点与易错点:
packagename一旦确定就固定死不要改:高德创建应用时填的 PackageName、云打包时填的包名,三处必须完全一致。- 地图 Key 必须放在
app-plus → sdkConfigs → maps → amap下,并且打包时要勾选高德地图模块,否则运行时会报“当前基座未配置 xxx”之类的错误。 - 本地生成的证书信息(别名、密码、证书文件)是在 HBuilderX 打包对话框里选“自有证书”填写的,不写在
manifest.json中;如果用的是 DCloud 云端证书,就选“云端证书”,包名依然不变。 - 自定义调试基座和正式包的包名要保持一致,否则地图等需要证书校验的功能会失效。
- SHA1 取自示例一第 4 步
keytool -list -v的输出,用它去高德控制台“添加 Key(Android 平台)”换回 Key,再回填到这里。
常见错误
命令行输入
java -version提示"不是内部或外部命令" 现象:明明装完了 JRE,验证命令却报错;keytool同样找不到。 原因:只安装了软件,没有把...\jre-1.8\bin加入系统变量Path;或加完没重开命令行窗口,旧窗口读的还是旧环境。 修法:Win 键搜"编辑系统环境变量"→ 选中Path→ 编辑 → 新建一行填C:\Program Files\Java\jre-1.8\bin→ 一路确定,关掉所有命令行重新打开再验证。证书生成后在本机找不到文件 现象:命令执行成功、也提示了密码输入,但桌面/项目目录里没有
.keystore。 原因:keytool把文件生成在当前命令行的工作目录,而不是"你以为是"的目录。 修法:先在目标目录里打开命令行(资源管理器地址栏输入cmd回车)再执行;或用cd /d 目标路径切换后再生成。找不到时全盘搜索文件名。打包时提示别名或密码错误 / 打出来的包签名不对 现象:填完别名、密码后打包失败;或打包成功但地图等功能异常。 原因:别名大小写或拼写记错;证书选了带
old后缀的那个旧格式文件;或误用了上一次别人/公共的证书。 修法:先keytool -list -v -keystore 你的文件输密码确认别名存在;打包时只选不带 old 的那个文件;把别名、密码、文件名三项记在项目文档里,别靠记忆。地图功能不可用,基座提示未配置相关设置 现象:真机运行时地图空白,或报"当前基座未配置 xxx"。 原因:
manifest.json的模块配置里没有勾选 Maps;或 AppKey 没填 / 填错;或改完配置后没有重新打自定义基座,手机里跑的还是旧基座。 修法:模块配置勾选地图并填入 Key → 保存 → 重新打自定义基座 → 重新安装到手机验证。高德后台提交 Key 时校验不通过 现象:填了 SHA1 和包名,提交报错或后续调用提示鉴权失败。 原因:SHA1 抄的是公共证书或别的证书的指纹;包名与
manifest.json中实际打包包名不一致(多字母、少字母、大小写不同)。 修法:用keytool -list -v从本次打包所用证书里取指纹;包名从 manifest 里复制粘贴,不要手打;核对无误再提交。改了包名后,之前能用的功能全挂了 现象:原本正常的地图、第三方 SDK 突然失效。 原因:包名是应用唯一标识,地图 Key 是"包名 + 证书指纹"的绑定关系,改包名等于换了一个应用。 修法:包名在项目初期一次定死(用公司域名倒写),此后调试基座与正式包都用同一个包名,不再变动。
练习
从零验证一次 Java 环境:写出你用的验证命令,并说明如果命令报错,你会依次检查哪两处。
生成一个证书:文件名
myapp.keystore、别名含你名字缩写、有效期 10 年。完成后回答:文件生成在哪个目录?为什么?执行后目录里为什么会出现两个文件,打包该用哪一个?用一条命令导出你证书的 SHA1 指纹,并说明这个值要填到哪个平台、和哪个字段搭配使用、两者中任一改变会有什么后果。
用自有证书分别打一次自定义调试基座和一次正式包,安装到真机后对比:包名是否一致?签名是否一致?分别用在什么场景?
分别用本地生成和云端生成各拿一份证书,比较两者在"信息可读性、环境依赖、打包时选择的证书类型"上的差异,说出你所在团队会选哪种及理由。
原视频对照
| # | 视频 | 时长 |
|---|---|---|
| 1 | 证书介绍入JRE环境安装 | 06:55 |
| 2 | 配置JRE环境变量 | 07:36 |
| 3 | 生成证书 | 08:06 |
| 4 | 使用自有证书打包 | 04:34 |
| 5 | 申请高德地图Key-1 | 03:23 |
| 6 | 申请高德地图Key-2 | 06:48 |
| 7 | DCloudio云端生成证书 | 05:37 |
小结
- 证书是 App 的身份证明,一个 App 对应一份自有证书;公共证书只适合练手,不能用于上线。
- 证书生成一次即可长期复用,务必归档备份——一旦丢失,同一应用在商店将无法覆盖升级。
- 别名、密码、证书文件三者是配套的,缺一不可;带
old的是中间产物,正式使用的是转换后的新文件。 - 环境变量是通用技能,本质是"给操作系统读的变量";配完必须重开终端才生效。
- 包名是应用唯一标识,必须一次定死;调试基座与正式包只有用途和签名场景不同,包名必须完全一致。
- 地图 Key 的本质是"证书指纹 + 包名"的绑定凭证,换证书或换包名都会让 Key 失效。
- 凡是涉及原生能力(地图、人脸识别等)的配置改动,都必须重新打基座并重装才生效,热更新无效。
- 建议把"包名、证书文件、别名、密码、SHA1、Key"统一写进项目交接文档,避免换人后全线返工。