自己开发一个 vsts agent 的 task
vsts 中支持自定义Build/Release的过程Task
目标:做一个可以读取 Xamarin.Android 所生成的 APK 的 基本信息的 task ,包括 package(包名) / application label(应用标题 )/version name(版本号)/version code(版本代码)
下面简述流程
1.下载并安装 Visual Studio Code(http://code.visualstudio.com ),当然使用 Visual Studio 或者其它任何开发工具也可以
2.下载并安装最新版本 nodejs(https://nodejs.org),如果是直接安装的 vs 这些应该直接都有了
3.建立自己的项目文件夹,如 d:\code\home
4.通过 npm 安装编译工具 tfx-cli
npm i -g tfx-cli
5.在自己的项目文件夹中建立一个 vss-extension.json 文件,这个文件中说明了当前扩展包的信息,以及扩展包中包含哪些任务
{ "manifestVersion": 1, "id": "zou-tasks", "name": "Zou Tasks", "version": "1.0.4", "publisher": "zoujian", "targets": [ { "id": "Microsoft.VisualStudio.Services" } ], "description": "Tools for building & publish", "categories": [ "Build and release" ], "icons": { "default": "extension-icon.png" }, "files": [ { "path": "extract-xamarin-android-manifest" } ], "contributions": [ { "id": "extract-xamarin-android-manifest", "type": "ms.vss-distributed-task.task", "targets": [ "ms.vss-distributed-task.tasks" ], "properties": { "name": "extract-xamarin-android-manifest" } } ] }
6.以上面扩展信息中所示,扩展包中包含了一个叫 extract-xamarin-android-manifest(我的任务) 的插件,文件夹结构是这样的
extension-icon.png (vsix的图标)
vss-extension.json
extract-xamarin-android-manifest
- extract.ps1 (任务的对应脚本,是在task.json中配置的此名称)
- icon.png (任务的图标)
- task.json (任务的配置文件)
其中 task.json 是最主要的文件,我当前的这个扩展是读取 Xamarin.Android 的项目,并且读取出生成 apk 的基础信息,包含 application 的 label,packagename,version name,version code
{ "id": "f1821fab-78d1-4c22-a0e4-f98f40fd7079",//任务的唯一id "name": "extract-xamarin-android-manifest",//任务名称 "friendlyName": "extract xamarin android info",//友好任务名 "description": "extract xamarin android info", "author": "zoujian", "helpMarkDown": "[More Information](https://github.com/chsword/zou-vsts-tasks)",//帮助(就是显示时后面的吧号) "category": "Utility",//类别,工具 "visibility": [ "Build", "Release" ], "demands": [ "DotNetFramework" ], "version": {//版本 "Major": "1", "Minor": "0", "Patch": "4" }, "minimumAgentVersion": "1.83.0",//支持vso agent的版本 "instanceNameFormat": "ExtractXamarinAndroidManifest",//实例名 "groups": [//如果输入参数要分组的话,建一个 { "name": "output", "displayName": "Output", "isExpanded": true } ], "inputs": [//各种输入参数 { "name": "pathXamarinAndroidProject", "type": "filePath", "label": "Xamarin Android project Path", "defaultValue": "", "required": true, "helpMarkDown": "Path which Xamarin Android project exisis." }, { "name": "configuration", "type": "string", "label": "Configuration", "defaultValue": "$(BuildConfiguration)", "required": true }, { "name": "outputVariable", "type": "string", "label": "outputVariable", "required": true, "defaultValue": "android", "groupName": "output", "helpMarkDown": "Provide a name for the variable for the android info. eg. set the outputVariable 'android', after task running, will return 'android.PackageName','android.ApplicationLabel','android.VersionName','android.VersionCode'." } ], "execution": {//实际执行的过程,我这里是执行了一个powershell脚本,有兴趣的同学可以看下,就是读取了apk的AndroidManifest的xml结构 "PowerShell": { "target": "$(currentDirectory)\\extract.ps1", "argumentFormat": "", "workingDirectory": "$(currentDirectory)" } } }
7.要编译为VSIX的话,执行 tfx extension create --manifest-globs vss-extension.json
8.tfs或vso中导入vsix,过程不说述
9.可以直接在tfs中使用了
实际使用时,如此配置参数:
源代码:https://github.com/chsword/zou-vsts-tasks
引用 :
官方task:https://github.com/Microsoft/vsts-tasks
官方文档:https://www.visualstudio.com/zh-cn/docs/build/define/variables

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何选择即时通讯应用的数据传输格式
前言 即时通讯应用(包括IM聊天应用、实时消息推送应用等)开发的前期技术选型时,关于数据传输格式的选择,在即时通讯开发者同行的眼里,是个极富争议话题。 精略分析一下,大概的原因在于: [1] 可选择的协议或封装格式多种多样: 可选择的余地很大:XMPP、Protobuf、JSON、私有2进制、MQTT、定格化XML、Plain text等等; [2] 同一种格式并不能适用于大多数的场景: 不同的场景有同的考虑而协议的选择往 跟这是挂钩在一起的,比如:移动端IM或推送技术用XMPP这样的协议时,多数情况下都会被喷; [3] 开发者对所选格式有各自的偏好: 有的人或团队对某种或某几种格式有不一样的经验和技术积累,也促成了他们对某种或某几种协议的偏好。 其实总结以上原因就可以知道,之所以对于即时通讯应用的数据传输格式有不同的声音,根本原因还在于应具体事情具体分析,该选什么协议由场景决定、由团队的技术积累决定、甚至由项目的周期和成本决定,这里不存在唯一解,只有最适合的数据传输格式,不存在最好的格式一说。 当然,本文内容中对即时通讯传输格式的选择,是原作者的一家之言,可能存在很大争议,但如能为你...
- 下一篇
Android scrollview嵌套webview滑动冲突的解决方案
在Android开发中有时我们需要在scrollview中嵌套webview这时你会发现这两者的滑动事件产生了冲突导致:webview很难被滑动,即使被滑动了一点也非常不顺畅。解决方案也比较简单只需要在webview的ontouch事件中调用requestDisallowInterceptTouchEvent(true)即可。然后交给webview去处理,代码如下: mWebView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent ev) { ((WebView)v).requestDisallowInterceptTouchEvent(true); return false; } });
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker快速安装Oracle11G,搭建oracle11g学习环境