git clone https://github.com/wutiange/auto-upload-notification.git
git clone git@github.com:wutiange/auto-upload-notification.git
安装 nodejs
如果你已经下载 nodejs 忽略这步,否则你需要先去 nodejs 的官网下载,然后按步骤安装,安装很简单只需要一直下一步即可。
然后打开 clone 下来的目录,执行:
npm install
npm i
打开项目下的 auto.json
文件,然后参照下面的(二)中的属性说明进行对应更改和配置。
(1)如果你是用于 android 项目
在 1.0.0 <= version ,那么需要将项目放到 android 的项目下,然后在 android 项目下的 .gitignore 中忽略这些内容。
在 1.0.0 < version < 2.0.0 ,那么只需要将 package.json 文件中的 version 更改成 2.0.0 。
在 version >= 2.0.0 不用做任何操作。
(2)ios 需要先将包打完,并且第三步配置好。
然后在 clone 的项目下执行:
node src/index.js
这样就成功了,如果遇到问题,可以先参考下面的常见问题,如果没有,并且自己没办法解决,希望能提 issue 。
(二)以下是目前版本的相关说明和解释(1.0)
必须在 android 项目下才能进行打包。ios 需要先打好包
script 属性,android 必须指定执行脚本,也就是 auto.json
文件中的 script
属性; iOS 由于都是使用工具打包,所以如果仅仅是 ios ,那么就不需要指定。
platform 属性(数组),代表的是平台,目前有如下几个值,如果要同时指定多个值,那么这样 ["android", "ios"]
即可:
android 仅支持 android, 其他的会自动屏蔽
iOS 仅支持对 ios 的上传
all 所有平台都支持,目前也就是 android 和 ios 同时支持
packageDir 属性,代表包所对应的文件路径,比如 app/build/outputs/apk/
,程序会通过指定的路径寻找文件,如果指定的路径下面还有文件夹会递归查找,然后选出创建时间最近的那一个安装包。
feishu 属性,这个属性是配置跟飞书相关配置的属性,它下面的属性有:
"buildKey": "Build Key是唯一标识应用的索引ID",
"buildType": "应用类型(1:iOS; 2:Android)",
"buildIsFirst": "是否是第一个App(1:是; 2:否)",
"buildIsLastest": "是否是最新版(1:是; 2:否)",
"buildFileName": "应用名称",
"buildFileSize": "App 文件大小",
"buildName": "应用名称",
"buildVersion": "版本号, 默认为1.0 (是应用向用户宣传时候用到的标识,例如:1.1、8.2.1等。)",
"buildVersionNo": "上传包的版本编号,默认为1 (即编译的版本号,一般来说,编译一次会变动一次这个版本号, 在 Android 上叫 Version Code。对于 iOS 来说,是字符串类型;对于 Android 来说是一个整数。例如:1001,28等。)",
"buildBuildVersion": "蒲公英生成的用于区分历史版本的build号",
"buildIdentifier": "应用程序包名,iOS为BundleId,Android为包名",
"buildIcon": "应用的Icon图标key,访问地址为 https://www.pgyer.com/image/view/app_icons/[应用的Icon图标key]",
"buildDescription": "应用介绍",
"buildUpdateDescription": "应用更新说明",
"buildScreenshots": "应用截图的key,获取地址为https://www.pgyer.com/image/view/app_screenshots/[应用截图的key]",
"buildShortcutUrl": "应用短链接",
"buildCreated": "应用上传时间",
"buildUpdated": "应用更新时间",
"buildQRCodeURL":"应用二维码地址",
根据上面的,如果我们想要显示应用名称和版本号,那么我们可以使用 测试应用名称:${name}v${version}
,这样最后的显示效果为: 测试应用名称:测试v1.0
。
这个属性的每一个元素代表一行,这里的规则是去掉 build ,至于后面的首字母既可以大写也可以小写,如:
"应用名称:${name}",
"版本号:${version}",
"应用类型:${type}",
"更新时间:${updated}",
"下载二维码:",
"${QRCodeURL}"
显示的效果如下:
其中二维码只能单独占一行,也就是上面的 "${QRCodeURL}"
,message 中的二维码只能独占一行,如果想更加自定义消息格式,请使用 customize 属性。
customize 属性,这个属性的目的是为了那些想自定义消息的同志们,具体格式参考飞书官网中的信息,其中需要把二维码的属性变成 QRCodeURL
属性,这样就能拿到二维码,并不支持其他照片,飞书信息。
webhook 属性,也就是飞书机器人,请参考飞书官网进行添加自定义机器人指南的操作流程。
app_id 属性,如果需要显示二维码,那么需要配置这个,在应用中可以查看到。
app_secret 属性,同上。
由于有时候打包后的名称并不是固定的,所以我采用指定文件夹的方式来进行上传,会自动取文件夹下创建时间最近的那一个文件。
projectDir 属性,项目地址 v2.0.0支持
只要配置了这个属性,那么就不需要将这个项目放入 android 项目下了,从 1.1.0 就已经包含代码,但是要在 2.0.0 中才能使用。也可以下载下来以后改一下 package.json 中的 version 版本号来实现自动打包上传。
下面是效果图:
(三)常见的问题总结
并没有在项目下执行。
events.js:292
throw er;
Error: spawn ./gradlew ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:269:19)
at onErrorNT (internal/child_process.js:465:16)
at processTicksAndRejections (internal/process/task_queues.js:80:21)
Emitted 'error' event on ChildProcess instance at:
at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)
at onErrorNT (internal/child_process.js:465:16)
at processTicksAndRejections (internal/process/task_queues.js:80:21) {
errno: -2,
code: 'ENOENT',
syscall: 'spawn ./gradlew',
path: './gradlew',
spawnargs: [ 'assemblePreviewRelease', '-Penvironment=perView' ]
代表找不到 ./gradlew
脚本,可能是由于执行的地方并不是在项目里面导致的。
扫描总是不是最新的
你可能刚打包上传,结果测试同事扫描后得到的是很久之前的结果,并不是刚才打包的结果;当遇到这种情况下,首先排除一下是不是手机之前扫过其他账号登录的二维码,如果是,那么手机上需要重新登录为最新的账号。
(四)有疑问的地方请提 issue