说明
本博文只是简单记录使用流程
操作时间是2023.1.12日,后续查看该博文,可能会发现因为Google Play Console版本升级带来操作使用上的差异
google play官方指导
https://support.google.com/googleplay/android-developer/answer/9859152?hl=zh-Hans]
1.注册开发者账户
浏览器登录google账户后,如果没有开发者账户,则需要注册开发者账户,如果有则跳过该步骤
1.1 打开 https://play.google.com/console 会直接重定向到https://play.google.com/console/signup
提示需要注册开发者账户,个人还是单位?
选择个人
有三项是必填
改成单位开发者账户
1.2 换一个google账户后,打开 https://play.google.com/console 也会直接重定向到https://play.google.com/console/signup,但是页面不一样,需要开启两步验证
输入密码后,点击下一步
输入手机号,下一步
输入验证码,下一步
开启
手动关闭该页面,输入https://play.google.com/console,还是会跳到https://play.google.com/console/signup页面
填写各种开发者(个人或者单位)信息后
再次进入Google Play控制台 https://play.google.com/console
成功进入Play控制台
2.创建应用
点击创建应用
点击创建应用
3.应用创建后的信息中心
总共分成三大块
立即开始测试
设置应用
发布应用
3.1 立即开始测试
点击 “创建新版本”
点击“创建新的发布版本”
如果使用自建签名,则需要更改应用签名密钥
点击“更改应用签名密钥”,会弹框提示
选择使用其他密钥
有四个选项
此处选择“从 Java 密钥库导出并上传密钥”
1.下载 Play Encrypt Private Key (PEPK) 工具。下载源代码
2.使用下面的命令运行该工具,导出您的私钥并将其加密。然后替换相应参数,在看到提示时分别输入密钥库和密钥的密码。
$ java -jar pepk.jar --keystore=foo.keystore --alias=foo --output=output.zip --include-cert --encryptionkey=eb10fe8f7c7c9df715022017b00c6471f8ba8170b13049a11e6c09ffe3056a104a3bbe4ac5a955f4ba4fe93fc8cef27558a3eb9d2a529a2092761fb833b656cd48b9de6a
按照流程把apk打包使用的密钥文件xxx.jks替换名称foo.keystore,alias也换成xxx.jks中的keyAlias
3.上传生成的zip文件
4.为了提高安全性,请创建新的上传密钥(可选)。
隐藏说明
expand_less
创建新的上传密钥,然后使用该密钥为应用的每个版本签名,而不使用应用签名密钥来签名。如果您丢失了上传密钥或者密钥被盗,可以重置上传密钥,然后开始使用新密钥。
生成新的上传密钥。了解详情
使用下方的命令以 PEM 文件格式导出上传密钥证书。请替换以粗体显示的参数。
$ keytool -export -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem
此处暂时没有创建所谓的“上传密钥”了,点击保存后,回到主页
自己上传的密钥生效了
上传app bundle,注意这里只能上传aab文件,不支持上传apk?????
这里需要重新打包aab
aab打包
不是上述路径,而是
注意这里“Export encrypted key for enrolling published apps in Google Play App Signing”,默认勾选,暂时没有用到
成功生成了aab
aab转apks
aab转apks
命令格式参考如下:
java -jar <bundletool.jar的路径> build-apks --bundle=<.aab文件的路径>
--output=<输出.apks的路径> --ks=<打包使用的证书文件的路径> --ks-pass=pass:<证书密码> --ks-key-alias=<证书别名> --key-pass=pass:<证书别名密码,通常与证书密码一致>
但是本机运行报错
[BT:1.13.2] Error: Error while loading private key and certificates from the keystore.
com.android.tools.build.bundletool.model.exceptions.CommandExecutionException: Error while loading private key and certificates from the keystore.
at com.android.tools.build.bundletool.model.exceptions.InternalExceptionBuilder.build(InternalExceptionBuilder.java:57)
at com.android.tools.build.bundletool.model.SignerConfig.extractFromKeystore(SignerConfig.java:180)
at com.android.tools.build.bundletool.commands.BuildApksCommand.populateSigningConfigurationFromFlags(BuildApksCommand.java:1685)
at com.android.tools.build.bundletool.commands.BuildApksCommand.fromFlags(BuildApksCommand.java:777)
at com.android.tools.build.bundletool.commands.BuildApksCommand.fromFlags(BuildApksCommand.java:743)
at com.android.tools.build.bundletool.BundleToolMain.main(BundleToolMain.java:82)
at com.android.tools.build.bundletool.BundleToolMain.main(BundleToolMain.java:54)
Caused by: java.io.IOException: Invalid keystore format
at sun.security.provider.JavaKeyStore.engineLoad(Unknown Source)
at sun.security.provider.JavaKeyStore$JKS.engineLoad(Unknown Source)
at sun.security.provider.KeyStoreDelegator.engineLoad(Unknown Source)
at sun.security.provider.JavaKeyStore$DualFormatJKS.engineLoad(Unknown Source)
at java.security.KeyStore.load(Unknown Source)
at com.android.tools.build.bundletool.model.SignerConfig.extractFromKeystore(SignerConfig.java:133)
... 5 more
原因竟然是我使用的jar包是最新版bundletool-all-1.13.2.jar,估计是jdk11编译的,所以运行也需要jdk11,而报错是因为默认使用的jdk版本是java 8(之前系统配置了java 8环境变量),可惜,这个报错提示不友好,郁闷很久!!!!有的jar包运行会提示版本不兼容
设备安装apks
命令格式参考如下:
java -jar <bundletool.jar的路径> install-apks --apks=<上一步中生成的.apks文件路径>
本机因为bundletool-all-1.13.2.jar 所以还是需要使用jdk11启动jvm
本机运行后提示信息如下
The APKs have been extracted in the directory: C:\Users\Administrator\AppData\Local\Temp\9626548363570726817
安装成功
问题
如果是面向海外的app,优先使用Google Play市场发布应用,所以aab是首选,但是怎么方便机器测试aab呢?每次都要主动运行这个jar程序两次??
参考
https://copyfuture.com/blogs-details/202207120550060058
https://baijiahao.baidu.com/s?id=1739494345616322323&wfr=spider&for=pc
上传aab到Google Play
上传上一步生成的aab文件到Google Play Console
提示我aab使用的target api level为30,低于31了,需要修改为至少31
解决方案就是修改项目的compileSdkVersion版本为31,但是项目里的compileSdkVersion还是保持30,会不会有问题呢?待后续研究,重点!!!
重新编译后上传,还是上传失败
多了一个问题,提到了android;exported=false
官方指南 https://developer.android.com/about/versions/12/behavior-changes-12#exported
修改后,继续上传,还是报错
尝试在GooglePlay应用商店去寻找这个包名的应用,没找到,经查询可能是已经下架的app曾经占用过这个包名
于是针对在GooglePlay市场发布的版本专门去更改包名
重新打包后上传,不报错了
点击右下角“检查发布内部测试”,有提示报错
错误1:您的应用所用的 APK(版本代码:1)会请求以下权限:android.permission.CAMERA, android.permission.RECORD_AUDIO, android.permission.READ_PHONE_STATE。对于在 APK 中使用这些权限的应用,您必须设置隐私权政策。
怎么设置隐私权政策?
入口在
需要有自己的网页!
错误2:此版本含有尚未在 Play 管理中心内声明的权限。请转到“敏感的应用权限”,更新您的权限声明
尝试选择第一个
google play控制台然后会检测apk,针对当前apk,分析具体apk的敏感权限,结果。。。
这时候回到“当前应用”内部测试“-》”检查并发布版本“-》还是选择第二个错误 转到”敏感的应用权限“,点击
所有文件访问权限(不具有普适性,针对具体apk)
点击”开始“
这个所有文件访问权限其实是android.permission.MANAGE_EXTERNAL_STORAGE,api level30上新增的
而项目AndroidManifest.xml中的确有声明
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
解决方案:貌似这个权限针对该项目没什么特别作用,先删除看看
软件包安装请求权限(不具有普适性,针对具体apk)
REQUEST_INSTALL_PACKAGES 是api level 23 新增的
而项目AndroidManifest.xml中的确有声明
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
解决方案:貌似这个权限针对该项目没什么特别作用,先删除看看
两个问题都解决后,上传报错直接提示需要提供隐私权政策
回到之前的隐私权政策页面,输入app隐私权政策对应网址保存,然后继续重新上传包,成功
内部测试版本下载
控制台首页选择该应用,右侧选择“内部测试”,目前处于尚未审核状态(后续公开发布需要填写app所有信息并且审核通过才行),并且会有一个临时应用名称unreviewed,但是有相关测试人员提供的下载链接
下载链接需要切换到tab页面“测试用户数量”查看,输入相关测试人员的邮箱后,底部有提供下载链接,点击复制即可,此下载链接会跳转到google play商店,如果商店登录google账户不是测试人员邮箱对应的google账户,则无法下载???
如点击链接后,跳转
点击download,跳转到google play商店下载
3.2 设置应用(如果只是百人内测,后续步骤即使不做也可以,但是如果要公开发布,从这里就要开始做,目标为了应用审核通过,不然包名始终是unreviewed)
设置隐私权政策
已设置过,跳过
应用访问权限
已设置过,跳过
广告
选择否
内容分级
点击"开始填写"
点击“下一步”
点击“保存”、“下一步”
直接点击“提交”
目标受众群体
点击“保存”
新闻应用
新冠肺炎 (COVID-19) 接触者追踪应用和感染状况应用
数据安全(这是技术需要关注的重点!!!)
因为之前就看到过app有申请
camera 拍照权限
record audio 录音权限
read phone state 读取设备状态权限
而这些权限都是google play定义的需要说明的权限
这里只选择了“拍照”、“录音”,点击“下一步”
拍照权限说明
点击“保存”
录音权限说明
点击“保存”
点击“提交”
政府应用
选择应用类别并提供详细联系信息
填写完所有信息后点击“保存”
设置商品详情
上传完应用图标、置顶大图、效果图(手机、平板1.0寸、平板10.0寸)后,点击“保存”
至此,静静等待审核吧~
3.3.当然在发布正式版之前,需要看下发布前测试报告(因为之前有发布过内部测试版本,默认发布完内部测试版本后,google play自动会进行测试并生成发布前测试报告)
可以看出问题挺多
这7台机器是谁测试的?play商店自动测试????
答:的确是play商店自己安排的测试
官网链接 https://support.google.com/googleplay/android-developer/answer/9842757?hl=zh-Hans
先挑错误看
明确一点:这里的错误不是app本身运行报错,而是平台考虑,基于安全性之类的考量,强制给上架app加上限制要求
错误1:安全性问题-不安全的加密模式
提示存在不安全的加密模式,详情链接 https://support.google.com/faqs/answer/9450925
而我们去看下项目依赖的三方库com.geetest.sensebot:sensebot:4.3.0
修改方案:
查看项目虽然引入了依赖库,但是根本没有调用依赖库中相关api,于是直接删除依赖库重新打包
解决完所有错误后
重新打包,发布新的内部测试版本
打包上传完新的aab后,回到控制台-你的应用,查看发布前测试报告,可以看到,有提示“正在测试。测试过程通常需要 1 小时左右,但也可能会用更长时间。”
安静等待测试报告吧
3.4.发布(这里特指正式版)
创建正式版本
点击“创建新的发布版本”
错误:无法上传aab,提示“已有版本使用版本号xxx”
因为每次发布内部测试包的时候,google play都会存储包到内容库,点击上传新的aab,会对比内容库中包的版本号是否已经存在,存在则不允许上传,这时候可以点击“从内容库添加”
选择之前测试没问题的包,点击“添加到版本”即可
上传成功后,需要仔细填写版本说明,不同语言版本的,因为这是真实展示在play商店让用户看到的,不比内部测试版本,这里是针对全部用户开放的,必须仔细慎重
填写完毕后,点击右下角“检查发布版本”
发起审核(竟然不是发布后自动审核)
选择左侧菜单栏”Production“
或者选择左侧菜单栏”Dashboard“
两个都可以
点击”Go to publishing overview“
手动点击”Send xx changes for review“
二次确认,提示审核最多需要7天,点击确认
等待审核完成
回到”Dashboard“,可以看到当前处于正在审核状态,最多等待7天
3.5 技巧
发布内测包后测试有问题的话,怎么上传修改后的新内测包,要求不升级版本号,之前只能修改一次,升级下版本号,太傻瓜了文章来源:https://www.toymoban.com/news/detail-446664.html
点击暂停测试,然后回到app bundle explorer中删除(经过验证,也找不到删除按钮,所以即使发布的内测包也删除不了?了??? 该方案失败)文章来源地址https://www.toymoban.com/news/detail-446664.html
到了这里,关于Google Play发布android app的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!