热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Jenkins配置自动构建,自动加固,自动上传

Jenkins配置自动构建,自动加固,自动上传在Android自动化构建中,可以使用Jenkins自动构建版本发布。Jenkins的安装

Jenkins配置自动构建,自动加固,自动上传

在Android自动化构建中,可以使用Jenkins自动构建版本发布。
Jenkins的安装可以参考,加固使用的是360加固


https://blog.csdn.net/c6e5uli1n/article/details/79204861



一,apk包名的自动生成

发布版本的时候需要把apk名进行修改,添加上版本号,渠道,日期等信息。
使用方式是在app包下的build.gradle文件中添加:

static def moduleName(){return 'BASE'
}static def releaseTime() {return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC"))
}
android{....android.applicationVariants.all { variant ->variant.outputs.each { output ->def outputFile = output.outputFileif (outputFile != null && outputFile.name.endsWith('.apk')) {//这里修改apk文件名def fileName = "${moduleName()}-V${defaultConfig.versionName}-RC-${releaseTime()}-chs.apk"output.outputFile = new File(outputFile.parent, fileName)}}}
}

修改后的文件还在build》outputs》apk文件夹下


二,配置Android的构建Jenkins

这里只写几个特殊的配置项。


1,配置自定义的项目路径

在这里插入图片描述


2,配置Git地址(也可以是其他的版本管理)

在这里插入图片描述


3,配置文件删除时间限制

在这里插入图片描述


5,配置apk构建

在这里插入图片描述


4,构建完成后执行加固和上传的python

在这里插入图片描述


5,配置加固的脚本文件

360加固的使用手册


https://bbs.360.cn/forum.php?mod=viewthread&tid=6294457&extra=page%3D1&page=1&archive_src=bbs_safe


加固的代码

# coding=utf-8
import os
import subprocess
import sys
import shutil
import time
def file_name(root,ex):root1=[] for i in os.listdir(root): #os.listdir(root) 读取root目录下的文件和目录root1=os.path.splitext('/'+root+'/'+i) #os.path.splitext()读取文件扩展名if root1[1]: if i.count(ex)>0: return (root+'/'+i) #sys.argv[1]工程目录,在工程目录下查找包含RC的apk文件
apkfile = file_name(sys.argv[1]+/app/build/outputs/apk/','RC');
#base cmd
java = "java"
cmd = '-jar'
jar = 'E:/360jiagubao_windows_64/jiagu/jiagu.jar'
#login
cmd_login = '-login'
#用户名 需要补齐
name = ''
#密码 需要补齐
pwd = ''
#sign
cmd_sign = '-importsign'
//app签名文件的路径
key_path = 'E:/360jiagubao_windows_64/jiagu/appkey/' + sys.argv[2]
print(key_path)
key_pwd = sys.argv[3]
alise = sys.argv[4]
alise_pwd = sys.argv[5]
#jiagu
cmd_jiagu = '-jiagu'
apkTarget = apkfile
print(apkTarget)
date = time.strftime('%Y%m%d',time.localtime(time.time()))
//apk加固后的输出目录
apkOutPutPath = 'E:/360jiagubao_windows_64/jiagu/output/'+sys.argv[6]+'/'+date+'/'# 判断路径是否存在# 存在 True# 不存在 False
isExists=os.path.exists(apkOutPutPath)
if not isExists:os.makedirs(apkOutPutPath)
else:ds = list(os.walk(apkOutPutPath)) #获得所有文件夹的信息列表dsr = ds[::-1] #反转该列表,从最底层的文件夹开始清算for d in dsr: #遍历该列表print(d) #打印出列表项,观察规律if d[2] != []: #如果该路径下有文件for x in d[2]: #先将文件清理干净os.remove(os.path.join(d[0], x))for d in dsr: #再次遍历该列表if d[1] != []: #如果该路径下有子文件夹for y in d[1]: #将子文件夹清理干净os.rmdir(os.path.join(d[0], y))
#autosign
cmd_autosign = '-autosign'
#showsign
cmd_showsign = '-showsign'
auto_login_cmd = [java,cmd,jar,cmd_login,name,pwd]
auto_importsign_cmd = [java,cmd,jar,cmd_sign,key_path,key_pwd,alise,alise_pwd]
auto_show_sign_cmd = [java,cmd,jar,cmd_showsign]
auto_jiagu_sign_cmd = [java,cmd,jar,cmd_jiagu,apkTarget,apkOutPutPath,cmd_autosign,'-automulpkg']
#subprocess.call(cd_path)
subprocess.call(auto_login_cmd)
subprocess.call(auto_importsign_cmd)
subprocess.call(auto_show_sign_cmd)
subprocess.call(auto_jiagu_sign_cmd)
#查找到加固的apk文件
apkJiaguFile = file_name(apkOutPutPath,"jiagu_sign")print(apkJiaguFile)
//复制到原来的目录下
shutil.copyfile(apkJiaguFile,apkTarget)

6,文件上传

使用python脚本上传Ftp

# coding=utf-8
from ftplib import FTP
import sys,getpass,os.path,getopt
import timedef file_name(root,ex):root1=[] for i in os.listdir(root): #os.listdir(root) 读取root目录下的文件和目录root1=os.path.splitext('/'+root+'/'+i) #os.path.splitext()读取文件扩展名if root1[1]: if i.count(ex)>0: return (root+'/'+i) #sys.argv[1]工程目录,在工程目录下查找包含RC的apk文件
apkfile = file_name(sys.argv[1]+/app/build/outputs/apk/','RC');
host = ' '
username = ' '
password = ' '
remotepath = '/ '
f.connect(host,10000)
f.login(username,password)
print ("Welcome:",f.getwelcome())
buffersize = 1024
f.cwd(remotepath)fd1 = open(apkfile,'rb')
f.storbinary('STOR %s' % os.path.basename(apkfile),fd1,buffersize)
fd1.close()
f.quit()
print ("ftp upload OK")

三,Jenkins全局配置


1,全局工具设置

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


2,系统设置环境变量

在这里插入图片描述


推荐阅读
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
author-avatar
潇潇-77
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有