背景

公司开发的应用,有相当一部分被破解,出现了各种所谓的纯净版、破解版、无广告版,对于公司的商业化造成了不利影响,经过调研,决定采取360加固的方案。

但是有个问题,公司外发的应用往往需要多个渠道,加固之后的apkwalle打的渠道号以及签名会丢失,需要重新签名,打渠道,比较耗时耗力,作为一名爱搞事情的程序员,这种复杂重复的工作就应该交给机器去处理,类似这种工作,python往往是不二选择。

正文

通过360加固官网知道,加固工具分为windows、mac、以及linux版本,而且加固分为登录360加固保账号然后加固两个步骤。我这里安装的是win版本,安装之后的目录结构如下图:

这里面有我们执行加固命令的环境,通过网上各种水,终于找到了360加固的命令,这就为我们python自动化加固提供了可能(这步是关键,耗费了我相当一部分的时间),上面提到加固分为登录以及加固步骤,所以命令也分两条:

登录:java -jar -Dfile.encoding=UTF-8 jiagu_jar_path -login 用户名 密码

加固: java -jar -Dfile.encoding=UTF-8 jiagu_jar_path -jiagu apk_path apk_out_path

经过一番各种调试修改,在本地通过cmd执行命令成功之后,再通过python执行也成功了,接下来部署到jenkins服务器,你以为这样就OK了么?噩梦才刚刚开始,在本地调通的python脚本部署到jenkins上始终运行不成功,也没有任何日志,一开始还以为我本地安装的是pyhon3.0,而jenkins是2.0的原因,结果我本地安装2.0之后,本地还是正常的。就在束手无策的时候,钊哥提出是不是jenkins是linux平台,而我上传的360加固环境是基于windows的,结果替换之后果然一切正常了,反正总而言之是可以了。

接下来讲讲怎么使用,公司的外发项目设计到多渠道walle打包的都有一个build.py的脚本,我们从main函数看起,如下:

if __name__ == '__main__':options = parse_options()path = options.origin_apk_dirnumber = options.numberchannels = options.channels.split(',')spec = options.specwalle_channel_jar = options.walle_channel_jarprint_format("APK CHANNELS")for root, dirs, files in os.walk(path):for file in files:filePath = os.path.join(root, file)if filePath.endswith(".apk"):print "[APK CHANNELS]Start to generate channel package based on: " + filePathstart_generate(filePath, number, channels, spec, walle_channel_jar)print "[APK CHANNELS]Channel package generation is complete."
复制代码

start_generate()函数是walle打包的入口函数,我们只需要在这个之前把grale生成的apk加固重新签名,然后将生成好的apk作为参数walle打包就好了,如下:

if __name__ == '__main__':options = parse_options()keystore_path = options.keystore_pathprint "keystore_path: " + keystore_pathks_key_alias = options.ks_key_aliasprint "ks_key_alias: " + ks_key_aliasks_pass = options.ks_passprint "ks_pass: " + ks_passkey_pass = options.key_passprint "key_pass: " + key_passpath = options.origin_apk_dirnumber = options.numberchannels = options.channels.split(',')spec = options.specwalle_channel_jar = options.walle_channel_jarprint "jiagu_path: " + jiagu_pathprint_format("APK CHANNELS")for root, dirs, files in os.walk(path):for file in files:filePath = os.path.join(root, file)if filePath.endswith(".apk"):print "[APK CHANNELS]Start to generate channel package based on: " + filePathindex = filePath.find("debug")#debug ingnoreif filePath.find("debug")>0:start_generate(filePath, number, channels, spec, walle_channel_jar)else:#jiagutemp_result = jiagu.jiagu(jiagu_path,"15267451420","lisj10659",filePath)print "temp_result" + temp_resultsigned_apk_path = temp_result[0:temp_result.rindex('/')] + temp_result[temp_result.rindex('/'):temp_result.rindex('.')]+"_sign.apk"print "signed_apk_path" + signed_apk_path#signsign_apk(jiagu_path,keystore_path,ks_key_alias,ks_pass,key_pass,signed_apk_path,temp_result)#generate channel apkstart_generate(signed_apk_path, number, channels, spec, walle_channel_jar)print "[APK CHANNELS]Channel package generation is complete."
复制代码

注意这里:

   keystore_path = options.keystore_pathprint "keystore_path: " + keystore_pathks_key_alias = options.ks_key_aliasprint "ks_key_alias: " + ks_key_aliasks_pass = options.ks_passprint "ks_pass: " + ks_passkey_pass = options.key_passprint "key_pass: " + key_pass
复制代码

增加了四个用于签名的参数,需要在jenkins上配置,如下图:

配置内容如下:

-e ${WORKSPACE}/fasthdtv.jks -a fasthdtv -k 123456 -p 123456

分别对应gradle 签名配置中的 storeFile、keyAlias、storePassword、keyPassword,然后在main函数调用的parse_options(),进行解析如下:

main函数中调用了jiagu.jagu()如下图:

所以我们需要在build.py的目录下新建一个jiagu.py并且定义jiagu()函数,如下:

import os
import subprocessdef jiagu(jiagu_360_dir, username, password, apk_file):jiagu_360_jar = '{jiagu_360_dir}/jiagu.jar'.format(jiagu_360_dir=jiagu_360_dir)print "jiagu_360_jar"+jiagu_360_jar# logincommand_login = "java -jar -Dfile.encoding=UTF-8 {jiagu_360_jar} -login {username} {password}".format(jiagu_360_jar=jiagu_360_jar, username=username, password=password)print "command_login"+command_loginlogin_result = subprocess.call(command_login, shell=True)# x86 com.dangbei.settingprovoder2.supportcommand_config_x86 = 'java -jar -Dfile.encoding=UTF-8 {jiagu_360_jar} -config -x86'.format(jiagu_360_jar=jiagu_360_jar)subprocess.call(command_config_x86, shell=True)#dest dirjiagu_tmp = apk_file[0:apk_file.rindex('/')]subprocess.call("chmod -R 775 {jiagu_tmp}".format(jiagu_tmp=jiagu_tmp), shell=True)#jiagucommand_jiagu = 'java -jar -Dfile.encoding=UTF-8 {jiagu_360_jar} -jiagu {apk_file} {jiagu_tmp}'.format(jiagu_360_jar=jiagu_360_jar, apk_file=apk_file, jiagu_tmp=jiagu_tmp)subprocess.call(command_jiagu, shell=True)print ("***************** command_jiagu"+command_jiagu)print ("***************** apk_file"+apk_file)result_file = jiagu_tmp+apk_file[apk_file.rindex('/'):apk_file.rindex('.')] + "_jiagu.apk"print ("***************** result_file"+result_file)for tmp in os.listdir(jiagu_tmp):if tmp.endswith(".apk"):full_path = jiagu_tmp + "/" + tmpprint ("***************** full_path"+full_path)os.chmod(full_path, 775)os.rename(full_path, result_file)#subprocess.call("rm -R {jiagu_tmp}".format(jiagu_tmp=jiagu_tmp), shell=True)print ('[JIAGU]jiagu completed')return result_filedef zip_align(zip_aligned_apk, origin_apk):command_zipalign = 'zipalign -f -v 4 {origin_apk} {zip_aligned_apk}'.format(origin_apk=origin_apk,zip_aligned_apk=zip_aligned_apk)subprocess.call(command_zipalign, shell=True)os.remove(origin_apk)print ('[ZIP ALIGN]zipaligin completed')def print_format(content):print ("#########################################################")print ("# -----> {content}".format(content=content))print ("#########################################################")#jiagu("D:/AndroidStudioProjects/fasthdtv/app/build_script/channel/jiagu","15267451420","lisj10659","D:/AndroidStudioProjects/fasthdtv/app/build/outputs/apk/debug/app-debug.apk")
复制代码

到此jenkins配置360加固脚本(python版)结束,附件为完整的buIld.py以及jiagu.py,需要的自取,根据自己的项目情况改动,手动比心!

转载于:https://juejin.im/post/5ce78cf5f265da1ba56af8b8

jenkins配置360加固脚本(python版)相关推荐

  1. jenkins 批量360加固apk

    jenkins 批量360加固apk @echo on set keyStorePath=%WORKSPACE%\Assets\keystore\renjiao.keystore mowenjiaoy ...

  2. python密码爆破脚本_企业邮箱爆破小脚本(Python版)

    之前发了一个帖子:http://zone.wooyun.org/content/20379总结了几种企业邮箱爆破的一些小技巧,直接贴出具体的爆破脚本吧.以163企业邮箱为例,目前这个是单线程的,也是从 ...

  3. MySQL自动化安装脚本-python版

    MySQL 自动化安装脚本 脚本介绍 用python写的一个自动化安装mysql单机实例的脚本 适用于mysql5.7版本 MySQL安装包路径: /usr/local/mysql #需要把mysql ...

  4. 百度指数、360指数爬虫python版:基于selenium+chrome和图像识别技术

    如果需要帮忙爬取数据,请加QQ:2422035338 一.前言: 1.本博客主要介绍百度指数爬取,360指数获取类似: 2.想要获取数据必须先登录百度指数,频繁登陆会导致要求输入验证码和手机验证码: ...

  5. Android项目jenkins自动化构建之360加固(一)

    Android项目jenkins自动化构建之360加固(一) 最近Jenkins接手一个项目,项目自动化构建都是在jenkins上做的,包括打包构建--360加固--apk签名--邮件发送apk 总共 ...

  6. 最强打包插件,支持fir,蒲公英上传, 360加固 ,自动生成二维码

    文章目录 序言 说明 效果 使用 下载demo 导入文件 文件内容说明 配置gradle 配置gradle.properties 文件位置 内容 项目中配置 补充说明 1.360加固配置 2.curl ...

  7. Android项目Jenkins配置(自定义参数构建,构建完成后360加固+自动下载签名+多渠道配置,自动乐固加固+签名,自动上传蒲公英,自动上传OSS,自动发送钉钉消息,自动发送企业微信应用)

    Mac,window,unix,Linux等系统安装Jenkins服务就不说了... 直接上干货 编译后shell脚本参考 #推送钉钉群curl 'https://oapi.dingtalk.com/ ...

  8. Jenkins之自动进行360加固

    文章目录 思路 编写Gradle自定义任务 命令行调用360加固 执行构建并获取apk 获取加固程序 执行加固 签名 拷贝文件到指定位置 Jenkins调用加固并发送邮件 项目中使用到了360加固与阿 ...

  9. *** Python版一键安装脚本

    本脚本适用环境: 系统支持:CentOS 6,7,Debian,Ubuntu 内存要求:≥128M 日期:2018 年 02 月 07 日 关于本脚本: 一键安装 Python 版 *** 的最新版. ...

  10. python 梦幻西游脚本_python京东抢购脚本打包版下载-京东抢购茅台Python打包版1.0.0简易版下载_骑士下载...

    京东抢购茅台Python打包版是一款超级好用的脚本打包版,因为有很多的用户都有这个抢购茅台的需求,但是自己不会Python,看不懂代码,这里小编就给大家带来最新的打包版,让玩家可以轻松简单的抢到茅台. ...

最新文章

  1. Selenium之定位及切换frame(iframe)
  2. velocity 模板语言(VTL)
  3. 【Jmeter】参数Parameters和Body Data
  4. Network 之二 Ethernet(以太网)中的 MAC、MII、PHY 详解
  5. 1720: 交换瓶子
  6. 关于定时执行任务的解决方法,PendingIntent alarm braocastRecevier等等
  7. Unity NGUI 制作URL超链接点击打开网页
  8. 将一个javaBean中非空的属性合并到另一个javaBean中
  9. 【Python3之模块及包的导入】
  10. c++ 基本知识汇总
  11. 创造下一个Zynga传奇
  12. 雅诗兰黛公司将收购Dr. Jart+
  13. 艾永亮:疯传的秘密,一个手表如何一夜之间席卷全校?(下)
  14. 【开发经验】java代码中实现限流
  15. android 投屏 app 三星,‎App Store 上的“爱缤投屏-用于三星智能电视”
  16. 为文字添加下划线和中划线
  17. 为何国外的人都爱用电子邮箱?注册电子邮箱有哪些好处呢
  18. Spring系列第10篇:primary可以解决什么问题?
  19. ai描边工具怎么打开_AI的工具栏怎么用快捷键打开?
  20. vue input输入框事件

热门文章

  1. Docker数据卷映射
  2. Python分析捕食者和被捕食者模型 Lotka--Volterra方程 | 拟合求解a,b,c,d
  3. IP地址中的网络地址和主机地址分别是什么意思
  4. 带你一起撸一遍 nodejs 常用核心模块(一)
  5. choco 代理强制失效方法
  6. 如何系统地学习3D建模!教你零基础入门,初学者看过来
  7. java 调用 yed 绘制 流程图_流程图绘制软件──yEd
  8. urp综合教务系统 php 课表,URP综合教务系统教师录入成绩指南
  9. 解决idea项目中没有蓝色方块
  10. 完全不懂SEO怎样入手做网站优化