背景
- 随着HBuilder的原生App云打包,一次云打包就需要半个多小时,这是日常开发所不允许的,所以就需要自己配置Android和IOS的开发环境,方便日常开发与发布;
- 如下是参考官方的App离线打包指导文档及项目打包、上架经验的总结,示例以Android为例说明。
原生Android工程配置
-
首先要去下载Android App离线SDK,下载Android 离线SDK – 正式版;
- 这里下载的是SDK版本是
3.8.7
,一般就下载当前的最新版本就可以了。同时升级HBuilder为最新版本(3.8.7),历史版本可能需要去网上搜索下载;- 需要确保uni-app编译器的版本号和离线 SDK 的版本号一致,不符合的HBuilder版本,需要升级到合适的版本;
- 或者安装多个版本的HBuilder;
- 这里下载需要Android和IOS的版本,并且如果有多个打包环境,还需要copy出来多份,分别进行配置,本次只演示Android测试环境;
- 需要确保uni-app编译器的版本号和离线 SDK 的版本号一致,不符合的HBuilder版本,需要升级到合适的版本;
- 这里下载的是SDK版本是
-
安装Android Studio,并进行基础项目的配置;
-
配置工程,参考官网文档直接执行即可;
- copy下载的目录的
SDK/libs
到HBuilder-Integrate-AS/simpleDemo/libs
,这里HBuilder-Integrate-AS
,应该是官方为了避免不能正确安装SDK的操作; - Android项目里的
build.gradle
类似前端项目的package.json
,声明依赖以及一些配置,可以通过这个文件去下载依赖的SDK; - 申请配置 appKey;
- 这里的appKey,默认的Android应用是不需要的,Android只需要配置证书就可以了,这里的证书可以使用Android Studio自己生成。这里的appKey应该只是uniapp为了自己要做一些事情。这里的appKey的操作有一些坑,后边详细说明;
- 上述完成后,在平台信息 > 离线打包key > 点击创建;
<meta-data android:name="dcloud_appkey" android:value="申请签名appKey" />
;
- 修改
HBuilder-Integrate-AS/simpleDemo/src/main/res/values/strings.xml
,内的app_name
参数; - build.grade修改配置:
versionCode
为应用的版本号(整数值),用于各应用市场的升级判断,建议与manifest.json中version -> code值一致;- 这里只需要保证每次上线的版本的数值比前一次大就可以了;
versionName
为应用的版本名称(字符串),在系统应用管理程序中显示的版本号,建议与manifest.json中version -> name值一致;- 这里可以只修改Android工程中的,遵循基本的版本号升级规则,可以参考;
- applicationId为应用的包名,一般设置为反向域名,不建议修改;
- 这个具有唯一性,不能与别的app重复;
- 配置应用图标和启动界面,这块都在
Androidmanifest.xml
文件内,对照文档操作即可:- splash.png在不同设备上显示效果不一样,为防止出现拉伸的状况,建议使用Android studio生成.9.png类型图片;
- 创建data文件夹并拷贝资源;
- 主要是这里的
HBuilder-Integrate-AS/simpleDemo/src/main/assets/
下的data文件夹的内容,以及apps目录,后面会用到;HBuilder-Integrate-AS/simpleDemo/src/main/assets/data/dcloud_control.xml
文件里边配置的appid,是uniapp下的应用标识appid,在manifest.json的基础配置下;
- 主要是这里的
- copy下载的目录的
Android下申请appKey
-
参照文档进行获取和配置,Android(Mac)下,SHA1的获取还是挺麻烦的,这里官方文档只提供了一种window下的获取方式,ask.dcloud.net.cn/article/357…;
-
本文演示
Android Studio
下操作流程;- 首先通过AS生成一个新的签名,Android Studio为应用签名,
Build > Generate Signed Bundle/APK > Create new > ...
,这里都可以随便写,但是设置的密码要记清楚; - 将证书配置到
build.grade > signingConfigs
,用于后续打包。也可以在打包的时候选择本地证书并输入密码; - 从证书中提取前面需要的
SHA1
,MD5
以及SHA256
的值,AS生成的证书是.jks
格式的;- 签名文件
keStore
和jks
的在作用上基本上没有太大区别,主要是生成来源不一样;- Keystore 为 Eclipse 打包生成的签名;
- jks 为 Android Studio 打包生成的签名;
- 使用命令
keytool -v -list -keystore xxxxx.jks
去读取,这样会读取不到md5的值。再次执行keytool -v -list -keystore xxxxx.jks | openssl dgst -md5
,这样是可以单独获取md5的值的; - 获取之后,继续执行后续操作,就可以获取appKey了;
- 签名文件
- 首先通过AS生成一个新的签名,Android Studio为应用签名,
-
获取了appKey之后,需要设置为
Androidmanifest.xml
的decloud的参数:<meta-dataandroid:name="dcloud_appkey" android:value="eb3926f1775ab945a5f92c0fa2ddc8bb" />
,这样就算完成了;
uni-app项目
- 使用HBuilder创建一个uniapp项目;
- 打开HBuilder,新建
uni-app
项目,选择Hello uni-app项目; - 本次创建项目与下载的SDK目录同级,为
uniapp-app
;
- 打开HBuilder,新建
- 测试真机运行,如下主要在Android平台开发;
- 连接手机,首先要开启手机的usb调试模式;
- 选择
运行
=>运行到手机或者模拟器
=>运行到Android App基座
,开启后可以看到运行连接设备,运行成功后如下,可以在此查看App的功能是否正常,这个阶段主要用作本地开发与测试;
生成App资源包并导入
- 需要确保uni-app编译器HBuilder的版本号和离线 SDK 的版本号一致,前面下载的;
- 也即这里的HBuilder的版本号
3.8.7
与下载的SDK(前面下载的)版本号一致;
- 也即这里的HBuilder的版本号
- 执行
选择项目 -> 发行 -> 原生App-本地打包 -> 生成本地打包App资源
,可以生成App资源包;- 这里如果是cli创建的项目,同样有方法。使用cli的方式更方便以后写脚本执行这些过程;
- 在生产环境中,每次打包要确保各种参数的正常,如接口地址,env环境等;
- 导入资源官方指导;
- 需要修改
HBuilder-Integrate-AS/simpleDemo/src/main/assets/data/dcloud_control.xml
中的appid为uni-app的id,确保dcloud_control.xml
中的appid与manifest.json
中的id与文件夹名一致; - 复制uniapp生成的www资源文件夹到Android工程下边,
uniapp-app/unpackage/resources/__UNI__XXX/www
=>Android-SDK@3.8.7.81902_20230704/HBuilder-Integrate-AS/simpleDemo/src/main/assets/apps/__UNI__XXX/www
,这里的步骤如果是使用cli执行生成的,可以写脚本来处理;
- 需要修改
Android打包
- 每次需要一个新的发布版本,都需要修改versionCode和versionName参数,用来区分不同的安装包;
- 注意这里的versionCode,发布的时候会用到,每打包一次上线的包,就需要增加一点,跟versionName没太大关联;
- 创建签名应用
build > Generate Singed Boundle / APK > 选择APK > next > ...
,可以选择打包debug版本还是release版本,如果成功会在release/debug目录下找到生成的安装包;
配置自动修改安装包名
// 这里用已有的信息,去动态拼接打包的包名
// build.grade下与signingConfigs同级添加修改打包名的配置
applicationVariants.all { variant ->
// apk输出文件名配置
// uniapp_appDemo_v1.0.1_release_0716.apk
variant.outputs.all { output ->
outputFileName = 'uniapp_appDemo' + '_v' + variant.versionName + '_' + variant.buildType.name
if (variant.buildType.name == buildTypes.release.getName()) {
outputFileName += '_' + new Date().format('MMdd')
}
outputFileName += '.apk'
}
}
本地手机安装
- 有的时候会借助微信发送安装包,会自动带
.apk.1
; - 安装apk.1安装器去安装,会方便很多;
hello项目,打包时未添加oauth模块
- 打包的时候,和直接本机运行有较大区别,需要添加各种授权与权限申请。
- 解决方案:在manifest.json->App模块配置中勾选“OAuth(登录鉴权)”,或者直接项目内删掉这块的页面,可以参考ask.dcloud.net.cn/article/367…;
- 修改后重新执行上面的app打包资源,app打包的步骤;
IOS打包
- 同样需要下载打包的SDK,并进行相关的配置,官网文档;
- ios同样需要申请appKey,不过ios要简单很多,只需要填写
iOS BundleId
就可以了,需要自己去申请,这里就需要apple开发者权限了,目前不是开发者了,没法演示了;- 在
https://developer.apple.com/account/resources/identifiers/list
创建和管理BundleId;
- 在
- ios的打包与Android对照文档看,问题不大,主要是开发者权限以及里边的各种证书的申请与使用;
- 生成App资源包的步骤,没任何区别;
- 复制www文件的路径,
uniapp-app/unpackage/resources/__UNI__XXX/www
=>HBuilder-Hello/HBuilder-Hello/Pandora/apps/__UNI__XXX/www
;
- 复制www文件的路径,
- 修改版本信息:
- version => versionName(Android);
- build => versionCode(Android);
- 生成App资源包的步骤,没任何区别;
ios证书的一些理解
- Certificates, Identifiers &Profiles 简单介绍:
- Certificate 就是证书,是用于把一台 Mac 电脑标志为开发者电脑所必须的证明
- Identifier 就是身份证,是用于把一个应用标志为开发者应用
- Devices就是注册为这个开发者设备列表
- 这里的操作逻辑:
- 本地生成钥匙;
- 去线上申请两种认证;
- 生成profile文件;
- 注意区分开发还是发布;
推荐的分支管理
- master主分支,保留打包前的上线代码;
- ft/XXX,个人开发分支;
- qa,统一的测试分支,只开发和本地测试;
- pre,预发;
- app-build/,专门用作保留打包分支;
- app-build/qa-android,安卓测试版本打包分支,从qa合并过来,只保留一些打包的配置内容;
- app-build/master-ios,ios上线打包分支,合并自master/pre分支,保留对应的配置;
- …
- 更复杂的一个仓库处理App和微信小程序的,可以参考;
上架
- 需要申请软件著作权;
- 上架android平台,一般都会上架应用宝、oppo、vivo、小米、华为这些商城,一般都要经历平台注册、平台认证、上传审核、发布的流程;
- 这期间不断的需要法人进行认证,且账户比较多,所以最好有统一的管理员,统一的账户来管理;
- 上架ios平台,直接通过Xcode上传后,在苹果开发者后台提交审核,成功后发布;
Android上架遇到的一些问题
公共出现的不再列举。
华为
android_2.0.19.apk:错误:40: 请将编译选项修改为正式发布版本 ;提示:17: 已调用的HMS SDK接口: 34: 已集成的HMS服务:[]
;- 提交的版本打包配置的问题,修改release;
明示存在定向推送或广告精准营销功能,但未提供拒绝、关闭定向推送或广告精准营销的选项,不符合华为应用市场审核标准。
;- 隐私声明的问题,修改隐私声明;
- 添加关闭这种推送的控制选项;
缺少聊天模块的资质证明文件未通过审核
;- 补充相关的资质;
您提交的《计算机软件著作权证书》上的著作权人与开发者主体信息不一致
;- 这个需要重新申请新的主体的软著;
您的应用内含激励提现项目但未在应用内提供客服联系方式,不符合华为应用市场审核标准
;- 添加客服功能,公司运营的反馈路径;
您的应用注册选择运输公司模块内含有测试数据,不符合华为应用市场审核标准。
;- 清理正式环境数据;
您的应用内未提供帐号注销服务,不符合华为应用市场审核标准。
;- 请在应用内提供帐号注销服务。
小米
APP首次打开,未见使用权限对应的相关产品或服务时,提前向用户弹窗申请开启敏感权限
;- 添加一些权限申请弹框;
应用上传或应用商店页面展示的图标,不得与安装到设备上的图标不一致
;- 修改相关的图标;
应用宝
联网APP需提供ICP备案截图,请将ICP备案截图加盖公章并上传至版权证明处再提交审核,具体备案流程参考
;- 上传资质;
IOS上架遇到的一些问题
修改版本号与发布的包版本号一致
;- 发布设置的问题;
Guideline 2.3 - Performance - Accurate Metadata
,修改了app关键字及制作了一个功能操作视频反馈给app审核;- ios不许携带未开发的内容;
- 清理正式环境的数据;
您的屏幕截图没有充分显示您正在使用的应用程序
;- 必须6.5截图,且图片要带刘海,5.5的是适配6、7、8的一定不能带刘海;
- 不需要在打包,只需要提供6.5英寸的截图;
- 需要提供6.5英寸的截图:纵向分辨率为 1242 x 2688 像素;
参考文章
以上只是个人见解,请指教,个人blog。
© 版权声明
文章版权归作者所有,未经允许请勿转载,侵权请联系 admin@trc20.tw 删除。
THE END