DCloud_App_Array
DCloud_App_Array
  • 发布:2020-11-04 20:57
  • 更新:2024-11-14 09:52
  • 阅读:213434

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中的模块配置、本地原生插件、原生混淆配置的前端文件,仍需提交才能出包
  • iOS平台安心打包无法兼容swift,如果uni原生插件使用swift开发,提交appstore提示“ITMS-90426: Invalid Swift Support - The SwiftSupport folder is missing. Rebuild your app using the current public (GM) version of Xcode and resubmit it.”错误时,请改用传统打包

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图片相关文档

Q4: Error occurred during initialization of VM

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

[Info] Error occurred during initialization of VM  
[Info] Could not reserve enough space for 1048576KB object heap  
[Error] 制作结果:Failed.    Reason: 

解决方法:

  1. 找到安心打包插件(app-safe-pack)目录下app-safe-pack.ini文件
  2. 将文件内容里-Xmx1024M修改为-Xmx512M
  3. 重新提交打包

备注: HBuilderX 3.1.10及以上版本生效

ios 安心打包问题汇总

Q1: 打包失败,签名失败errSecInternalComponent错误

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

[Error] HBuilder.xcarchive/Payload/HBuilder.app: replacing existing signature  
[Error] Warning: unable to build chain to self-signed root for signer  "xxxxxxxxxx“”  
[Error] HBuilder.xcarchive/Payload/HBuilder.app: errSecInternalComponent

原因: 可能是用户手动点击安装了证书导致打包签名失败。
解决方法: 打开钥匙串访问删除相关用户手动安装的证书后重新打包(下图仅供参考,需开发者判断哪些证书是手动安装的证书)。

安心打包问题反馈

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

31 关注 分享
DCloud_heavensoft 9***@qq.com DCloud_uniCloud_JSON 4***@qq.com swpupeng 老哥教教我 BaseCloud 九涯 大叔刘 typer sonicsunsky 海中月是天上月 梦尋Junjie 梁飞鸿 skysowe 小菜啊 x***@163.com 3***@qq.com 秋凡 1***@qq.com 我这边 a***@163.com 2***@qq.com 1***@qq.com 2***@qq.com x***@126.com 银霖 Edmin 1***@qq.com 3***@qq.com 8***@qq.com

要回复文章请先登录注册

z***@163.com

z***@163.com

回复 切图仔仔 :
同样问题,升级到3.6.2和3.6.3是这样的,升级前没问题,解决没有?
2022-09-20 10:41
切图仔仔

切图仔仔

今天打包一直失败:本地安装包生成失败,请重试或者切换到非安心打包模式进行打包 查看错误日志:[Info] 正在制作apk安装包...

[Info] I: Using Apktool 2.4.1 on __UNI__F76E11E_cm.apk
[Info] I: Loading resource table...
[Info] I: Decoding AndroidManifest.xml with resources...
[Info] I: Loading resource table from file: /Users/swkj/Library/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 raw classes2.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[/Users/swkj/projects/kacnmobile/kalele/unpackage/cache/wgt/__UNI__F76E11E/.manifest/icon-android-hdpi.png] to [/Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm/res/drawable-hdpi/icon.png]...
[Info] copy file[/Users/swkj/projects/kacnmobile/kalele/unpackage/cache/wgt/__UNI__F76E11E/.manifest/icon-android-hdpi.png] to [/Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm/res/drawable-hdpi/icon.png] success.
[Info] begin copy file[/Users/swkj/projects/kacnmobile/kalele/unpackage/cache/wgt/__UNI__F76E11E/.manifest/icon-android-xhdpi.png] to [/Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm/res/drawable-xhdpi/icon.png]...
[Info] copy file[/Users/swkj/projects/kacnmobile/kalele/unpackage/cache/wgt/__UNI__F76E11E/.manifest/icon-android-xhdpi.png] to [/Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm/res/drawable-xhdpi/icon.png] success.
[Info] begin copy file[/Users/swkj/projects/kacnmobile/kalele/unpackage/cache/wgt/__UNI__F76E11E/.manifest/icon-android-xxhdpi.png] to [/Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm/res/drawable-xxhdpi/icon.png]...
[Info] copy file[/Users/swkj/projects/kacnmobile/kalele/unpackage/cache/wgt/__UNI__F76E11E/.manifest/icon-android-xxhdpi.png] to [/Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm/res/drawable-xxhdpi/icon.png] success.
[Info] begin copy file[/Users/swkj/projects/kacnmobile/kalele/unpackage/cache/wgt/__UNI__F76E11E/.manifest/icon-android-xxxhdpi.png] to [/Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm/res/drawable-xxxhdpi/icon.png]...
[Info] copy file[/Users/swkj/projects/kacnmobile/kalele/unpackage/cache/wgt/__UNI__F76E11E/.manifest/icon-android-xxxhdpi.png] to [/Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm/res/drawable-xxxhdpi/icon.png] success.
[Info] begin copy file[/Users/swkj/projects/kacnmobile/kalele/unpackage/cache/wgt/__UNI__F76E11E/.manifest/splash-android-hdpi.png] to [/Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm/res/drawable-hdpi/splash.png]...
[Info] copy file[/Users/swkj/projects/kacnmobile/kalele/unpackage/cache/wgt/__UNI__F76E11E/.manifest/splash-android-hdpi.png] to [/Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm/res/drawable-hdpi/splash.png] success.
[Info] begin copy file[/Users/swkj/projects/kacnmobile/kalele/unpackage/cache/wgt/__UNI__F76E11E/.manifest/splash-android-xhdpi.png] to [/Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm/res/drawable-xhdpi/splash.png]...
[Info] copy file[/Users/swkj/projects/kacnmobile/kalele/unpackage/cache/wgt/__UNI__F76E11E/.manifest/splash-android-xhdpi.png] to [/Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm/res/drawable-xhdpi/splash.png] success.
[Info] begin copy file[/Users/swkj/projects/kacnmobile/kalele/unpackage/cache/wgt/__UNI__F76E11E/.manifest/splash-android-xxhdpi.png] to [/Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm/res/drawable-xxhdpi/splash.png]...
[Info] copy file[/Users/swkj/projects/kacnmobile/kalele/unpackage/cache/wgt/__UNI__F76E11E/.manifest/splash-android-xxhdpi.png] to [/Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm/res/drawable-xxhdpi/splash.png] success.
[Info] begin update files to apk...
[Error] try compile package:0
[Info] I: Using Apktool 2.4.1
[Info] I: Copying /Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm classes.dex file...
[Info] I: Copying /Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm classes2.dex file...
[Info] I: Checking whether resources has changed...
[Info] I: Building resources...
[Error] W: /Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm/AndroidManifest.xml:48: Tag <uses-permission> attribute name has invalid character ' '.
[Error] brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1): [/var/folders/r9/kw6q07cj6lb30r71gt5sn1tw0000gn/T/brut_util_Jar_14643653397330213424.tmp, p, --forced-package-id, 127, --min-sdk-version, 24, --target-sdk-version, 31, --version-code, 3, --version-name, 3.0.2, --no-version-vectors, -F, /var/folders/r9/kw6q07cj6lb30r71gt5sn1tw0000gn/T/APKTOOL3227713214573379722.tmp, -e, /var/folders/r9/kw6q07cj6lb30r71gt5sn1tw0000gn/T/APKTOOL15626444054606168390.tmp, -0, arsc, -I, /Users/swkj/Library/apktool/framework/1.apk, -S, /Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm/res, -M, /Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm/AndroidManifest.xml]
[Error] try compile package:1
[Info] I: Using Apktool 2.4.1
[Info] I: Checking whether resources has changed...
[Info] I: Building resources...
[Error] W: /Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm/AndroidManifest.xml:48: Tag <uses-permission> attribute name has invalid character ' '.
[Error] brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1): [/var/folders/r9/kw6q07cj6lb30r71gt5sn1tw0000gn/T/brut_util_Jar_11291191133041608463.tmp, p, --forced-package-id, 127, --min-sdk-version, 24, --target-sdk-version, 31, --version-code, 3, --version-name, 3.0.2, --no-version-vectors, -F, /var/folders/r9/kw6q07cj6lb30r71gt5sn1tw0000gn/T/APKTOOL17172447918124312601.tmp, -e, /var/folders/r9/kw6q07cj6lb30r71gt5sn1tw0000gn/T/APKTOOL6778690369633430874.tmp, -0, arsc, -I, /Users/swkj/Library/apktool/framework/1.apk, -S, /Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm/res, -M, /Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm/AndroidManifest.xml]
[Error] try compile package:2
[Info] I: Using Apktool 2.4.1
[Info] I: Checking whether resources has changed...
[Info] I: Building resources...
[Error] W: /Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm/AndroidManifest.xml:48: Tag <uses-permission> attribute name has invalid character ' '.
[Error] brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1): [/var/folders/r9/kw6q07cj6lb30r71gt5sn1tw0000gn/T/brut_util_Jar_17506422355081801959.tmp, p, --forced-package-id, 127, --min-sdk-version, 24, --target-sdk-version, 31, --version-code, 3, --version-name, 3.0.2, --no-version-vectors, -F, /var/folders/r9/kw6q07cj6lb30r71gt5sn1tw0000gn/T/APKTOOL11534130843614365899.tmp, -e, /var/folders/r9/kw6q07cj6lb30r71gt5sn1tw0000gn/T/APKTOOL10417237693880412320.tmp, -0, arsc, -I, /Users/swkj/Library/apktool/framework/1.apk, -S, /Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm/res, -M, /Users/swkj/Library/Application Support/HBuilder X/__UNI__F76E11E/packge_cache/__NONE__/__UNI__F76E11E_cm/AndroidManifest.xml]
[Error] Apk tool compile package to apk failed
[Error] 制作结果:Failed. Reason:
2022-09-19 11:29
yuyuyu_yu

yuyuyu_yu

我今天更新了HBuilder X3.6.2,然后打包就一直失败。日志里有这个提示:AndroidManifest.xml:28: Tag <action> attribute name has invalid character '*'.
2022-09-17 17:18
yuyuyu_yu

yuyuyu_yu

回复 MMaxSkyy :
我今天更新了HBuilder X3.6.2,然后打包就一直失败。日志里有这个提示:AndroidManifest.xml:28: Tag <action> attribute name has invalid character '*'.
2022-09-17 17:17
l***@163.com

l***@163.com

回复 MMaxSkyy :
已经有好几个人报这个问题了,暂时无解
2022-09-16 22:32
MMaxSkyy

MMaxSkyy

今天遇到一个新问题:Tag <action> attribute name has invalid character '*'.
2022-09-16 20:58
3***@qq.com

3***@qq.com

[HBuilder] 21:29:37.067 时间: 2022-09-12 21:28:30 类型: Android云端证书 正在本地生成安装包(请勿关闭HBuilderX)

[HBuilder] 21:29:37.127 本地安装包生成失败,请重试或者切换到非安心打包模式进行打包 查看错误日志
[广告] 21:31:01.166 DCloud 2022新春招聘开启,欢迎前端、Android、C++/QT来投简历! 详情点击

[HBuilder] 21:31:01.207 打包成功后会自动返回下载链接。
[HBuilder] 21:31:01.207 打包过程查询请点菜单发行-查看云打包状态。
[HBuilder] 21:31:01.207 周五傍晚等高峰期打包排队较长,请耐心等待。
[HBuilder] 21:31:01.207 如果是为了三方SDK调试,请使用自定义调试基座(菜单运行-手机或模拟器-制作自定义调试基座),不要反复打包。
[HBuilder] 21:31:01.207 项目 优优联盟 [__W2A__wg.678kk.xyz]已成功提交到云端,正在获取打包状态...

[HBuilder] 21:31:06.734 项目 优优联盟 [__W2A__wg.678kk.xyz]的打包状态:
[HBuilder] 21:31:06.734 时间: 2022-09-12 21:31:02 类型: Android云端证书 正在云端打包

[HBuilder] 21:31:07.842 项目 优优联盟 [__W2A__wg.678kk.xyz]的打包状态:
[HBuilder] 21:31:07.842 时间: 2022-09-12 21:31:02 类型: Android云端证书 打包失败 错误日志: https://ide.dcloud.net.cn/build/errorLog/2557cca0-329f-11ed-a268-e943a5f224c0
安心打包和非安心打包都失败了,麻烦看看是什么问题
2022-09-12 21:33
3***@qq.com

3***@qq.com

在打包页面,自动生成的包名怎么不能用啊
2022-09-12 21:11
3***@qq.com

3***@qq.com

亲测有用
2022-09-09 15:40
w***@163.com

w***@163.com

安心打包完成后没有unpackage/release/apk/这个目录
2022-09-06 16:36