DCloud_App_Array
DCloud_App_Array
  • 发布:2020-11-04 20:57
  • 更新:3 天前
  • 阅读:23678

HBuilderX App云端打包 - 安心打包使用指南

分类:HBuilderX

概述

过去,App云端打包时需要将应用代码、打包证书等提交到DCloud云端打包机,在云端打包机的原生开发环境中生成安装包apk/ipa。
DCloud云端服务器虽然不会保存开发者应用代码和证书等信息,但开发者可能还是不放心,或者担心在网络传输过程中可能存在拦截泄漏的风险。

而离线打包,不但不方便,还有2个重要功能无法使用:

  1. 原生混淆,保护js代码(因为秘钥的安全问题,离线打包无法使用)
  2. 插件市场的付费原生插件(因为插件版权问题,离线打包无法使用)

HBuilderX2.9.9版本新增Android平台安心打包功能,不再提交应用代码及打包证书到云端服务器,同时也减轻云端打包机压力,缩短高峰期云端打包等待时间。
HBuilderX3.0.7版本新增iOS平台支持安心打包功能(仅支持MacOS)

安心打包原理

  • 首次打包
    1. HBuilderX会提交App的模块配置信息到云端,在云端打包机生成原生代码包(不包含应用代码、证书信息)
    2. HBuilderX下载原生代码包,在本地电脑上将应用代码添加到原生代码包中,生成未签名安装包
    3. 缓存原生代码包,用于下次打包复用
    4. 在本地电脑上使用打包证书对未签名安装包进行签名操作,生成安装包
  • 非首次打包
    1. HBuilderX判断缓存的原生代码包是否可以复用,如果没有修改App模块配置或影响原生代码包配置操作继续下一步,否则转首次打包流程,以下情况也会触发首次打包流程:
      • 使用了uni原生插件,本地无法判断原生插件是否更新了,因此项目中只要包含uni原生插件都会走首次打包流程
      • HBuilderX更新,本地缓存原生代码包需要更新,需要走首次打包流程生成新版本原生代码包
    2. 将修改后的应用代码添加到原生代码包中,生成未签名安装包
    3. 在本地电脑上使用打包证书对未签名安装包进行签名操作,生成安装包

因为大多数打包,并不改动原生部分(主要是manifest.json),只修改前端代码。此时将无需从云端打包机下载原生包,打包速度会非常快。

安心打包优势

  • 更安全:打包时不提交应用代码、证书等信息
  • 更快速:非首次打包时不用提交云端打包机排队等待,本地直接出包
  • 省流量:减少了打包时提交打包资源,非首次打包时不用下载原生代码包
  • 更便宜:除非使用了体积很大的本地原生插件,否则将难以突破40M的免费打包体积阀值。开发者和DCloud的成本双下降

使用安心打包

新版本HBuilderX云端打包时无需额外操作,默认会勾选“安心打包”,如下图所示:

如果没有安装安心打包插件,会弹出以下提示框,点击“安装”继续

插件安装完成后需重新点击“打包”按钮提交打包

打包完成后自动保存到项目的"unpackage/release/apk/"目录

如果清空了这个目录,那么下次打包将执行首次打包逻辑。

注意事项

  • Windows环境:仅Android平台支持安心打包,iOS暂不支持;MacOSX环境:Android和ios都支持安心打包。
  • 自定义调试基座不支持安心打包
  • 使用DCloud老版证书不支持安心打包
  • 使用原生混淆时,配置的待加密js文件需要提交到云端打包机(打包完成后自动清除这些js)
  • 安心打包并非纯离线打包,虽然证书和前端代码不再提交云端打包机,但项目的manifest中的模块配置、本地原生插件、原生混淆配置的前端文件,仍需提交才能出包

FAQ

  • 安心打包是否有免费打包次数限制?
    打包次数限制是为了避免部分开发者过多占用云端打包资源而增加的限流措施,在使用安心打包时,由非首次打包机制生成的安装包由于不占用云端打包资源,所以不会占用云端免费打包次数,也可以理解为安心打包非首次打包无打包次数限制。

Android 安心打包问题汇总

Q1: Windows:控制台提示打包成功,相应目录下没有apk文件

问题: 某些用户反馈,windows电脑,控制台提示Android安心打包成功,进入相应目录(unpackage/release/apk),目录下找不到apk文件
原因 :unpackage/release/apk目录,没有写入权限,移动apk文件失败了。

解决方法:

  1. 赋予unpackage/release/apk目录写入权限
  2. 重启电脑试试

Q2: fakeLogOpen(/dev/log_crash) failed

某些情况下,首次提交安心打包,您可能会遇到下列错误:

[Error] W: fakeLogOpen(/dev/log_crash) failed  
[Error] W: fakeLogOpen(/dev/log_stats) failed  
[Error] W: fakeLogOpen(/dev/log_stats) failed  
[Info] I: Copying libs... (/lib)  
[Info] I: Building apk file...  
[Info] I: Copying unknown files/dir...  
[Info] I: Built apk...  
[Error] Apk tool compile package to apk failed  
[Info] 制作结果:Failed. Reason:

解决方法: 重新提交安心打包

Q3: 启动图.9.png格式问题

错误日志中,出现如下日志:

[Error] W: ERROR: 9-patch image C:\xxxxx\res\drawable-hdpi\splash.9.png malformed.  
[Error] W: No marked region found along edge.  
[Error] W: Found along top edge.

原因: 启动图xxx.9.png不是有效9.png图片,格式错误导致。
解决方法: 重新生成有效的9.png图片

备注: 部分用户可能会提问,同样.9.png项目,为什么传统打包成功,安心打包失败呢?因为:安心打包校验机制更为严格。
文档: .9.png图片相关文档

安心打包问题反馈

如果您遇到安心打包问题,且无法解决,请加QQ群827137391。
进群需要提供操作系统HBuilderX版本号信息,提问请提交错误日志截图
本群仅限反馈安心打包问题,请勿发布无关信息。

18 关注 分享
DCloud_heavensoft 987095529@qq.com DCloud_UNI_linju_json 446225991@qq.com swpupeng 老哥教教我 BaseCloud 活泉 大叔刘 typer sonicsunsky@qq.com 海中月是天上月 17749922376@163.com 627457796@qq.com skysowe 小菜啊 xfh1222@163.com 360856727@qq.com

要回复文章请先登录注册

Sean_2020

Sean_2020

点打包后弹出框,进度条到 40%后进度条提示框关闭,打包选项那个框没关闭,无打包信息输出,无打包文件输出,什么原因?
3 天前
360856727@qq.com

360856727@qq.com

案例
2021-02-26 20:48
DCloud_HB_WDL

DCloud_HB_WDL

回复 PilgrimM :
mac: https://update.dcloud.net.cn/hbuilderx/alpha/macosx/plugins/contents/app-safe-pack.1.0.0.2020123015.zip

windows: https://update.dcloud.net.cn/hbuilderx/alpha/win32/plugins/contents/app-safe-pack.1.0.0.2020123015.zip
2021-02-26 18:24
PilgrimM

PilgrimM

安心打包插件有下载地址没,网络问题没法在线安装
2021-02-26 18:19
PilgrimM

PilgrimM

安心打包插件有下载地址没,网络问题没法在线安装
2021-02-26 18:19
zy79410029@126.com

zy79410029@126.com

回复 zy79410029@126.com :
win10,HB版本3.1.2 20210206,开混淆加密,使用传统线上打包没问题,使用安心本地打包直接出错。在使用安心打包之前,可以混淆js制作wgt包,如果安心打包出错后,制作wgt包也跟着报错。
2021-02-26 16:39
zy79410029@126.com

zy79410029@126.com

安心打包使用js混淆,直接一闪而过?然后制作wgt包就跟着混淆失败!难受
2021-02-26 16:02
雨夜敬清秋

雨夜敬清秋

安心打包的非首次打包无打包次数限制,但是项目中如果有使用到原生插件都会走首次打包流程,mark
2021-02-24 08:51
1003020952@qq.com

1003020952@qq.com

[Info] 正在制作apk安装包...

[Info] I: Using Apktool 2.4.1 on __UNI__9A0500F_cm.apk
[Info] I: Loading resource table...
[Info] I: Decoding AndroidManifest.xml with resources...
[Info] I: Loading resource table from file: C:\Users\Administrator\AppData\Local\apktool\framework\1.apk
[Info] I: Regular manifest package...
[Info] I: Decoding file-resources...
[Info] I: Decoding values */* XMLs...
[Info] I: Copying raw classes.dex file...
[Info] I: Copying assets and libs...
[Info] I: Copying unknown files...
[Info] I: Copying original files...
[Info] begin replace files to apk...
[Info] begin copy file[E:/dishan/smart-work-app/unpackage/cache/wgt/__UNI__9A0500F/.manifest/icon-android-hdpi.png] to [C:/Users/Administrator/AppData/Local/HBuilder X/__UNI__9A0500F/packge_cache/__UNI__9A0500F_cm/res/drawable-hdpi/icon.png]...
[Info] copy file[E:/dishan/smart-work-app/unpackage/cache/wgt/__UNI__9A0500F/.manifest/icon-android-hdpi.png] to [C:/Users/Administrator/AppData/Local/HBuilder X/__UNI__9A0500F/packge_cache/__UNI__9A0500F_cm/res/drawable-hdpi/icon.png] success.
[Info] begin copy file[E:/dishan/smart-work-app/unpackage/cache/wgt/__UNI__9A0500F/.manifest/icon-android-xhdpi.png] to [C:/Users/Administrator/AppData/Local/HBuilder X/__UNI__9A0500F/packge_cache/__UNI__9A0500F_cm/res/drawable-xhdpi/icon.png]...
[Info] copy file[E:/dishan/smart-work-app/unpackage/cache/wgt/__UNI__9A0500F/.manifest/icon-android-xhdpi.png] to [C:/Users/Administrator/AppData/Local/HBuilder X/__UNI__9A0500F/packge_cache/__UNI__9A0500F_cm/res/drawable-xhdpi/icon.png] success.
[Info] begin copy file[E:/dishan/smart-work-app/unpackage/cache/wgt/__UNI__9A0500F/.manifest/icon-android-xxhdpi.png] to [C:/Users/Administrator/AppData/Local/HBuilder X/__UNI__9A0500F/packge_cache/__UNI__9A0500F_cm/res/drawable-xxhdpi/icon.png]...
[Info] copy file[E:/dishan/smart-work-app/unpackage/cache/wgt/__UNI__9A0500F/.manifest/icon-android-xxhdpi.png] to [C:/Users/Administrator/AppData/Local/HBuilder X/__UNI__9A0500F/packge_cache/__UNI__9A0500F_cm/res/drawable-xxhdpi/icon.png] success.
[Info] begin copy file[E:/dishan/smart-work-app/unpackage/cache/wgt/__UNI__9A0500F/.manifest/icon-android-xxxhdpi.png] to [C:/Users/Administrator/AppData/Local/HBuilder X/__UNI__9A0500F/packge_cache/__UNI__9A0500F_cm/res/drawable-xxxhdpi/icon.png]...
[Info] copy file[E:/dishan/smart-work-app/unpackage/cache/wgt/__UNI__9A0500F/.manifest/icon-android-xxxhdpi.png] to [C:/Users/Administrator/AppData/Local/HBuilder X/__UNI__9A0500F/packge_cache/__UNI__9A0500F_cm/res/drawable-xxxhdpi/icon.png] success.
[Info] begin update files to apk...
[Info] I: Using Apktool 2.4.1
[Info] I: Copying C:\Users\Administrator\AppData\Local\HBuilder X\__UNI__9A0500F\packge_cache\__UNI__9A0500F_cm classes.dex file...
[Info] I: Checking whether resources has changed...
[Info] I: Building resources...
[Error] W: fakeLogOpen(/dev/log_crash) failed
[Error] W: fakeLogOpen(/dev/log_stats) failed
[Error] W: fakeLogOpen(/dev/log_crash) failed
[Error] W: fakeLogOpen(/dev/log_stats) failed
[Info] I: Copying libs... (/lib)
[Info] I: Building apk file...
[Info] I: Copying unknown files/dir...
[Info] I: Built apk...
[Error] Apk tool compile package to apk failed
[Info] 制作结果:Failed. Reason:
2021-02-23 14:38
kyokuyou@163.com

kyokuyou@163.com

我想问下,是否可以自定义打包文件名?因为我发现每次打包完都需要更改名字。
2021-02-10 17:18