文章目录

  • 0、前提
  • 1、新建脚本:plug_360_jiagu.gradle
  • 2、在app的build.gradle中引入脚本
  • 3、在local.properties中配置签名和360信息
  • 4、在Gradle面板中执行加固命令
  • 5、问题总结

0、前提

1、下载并安装 360加固助手
2、注册好 360的账号信息

一键打包、加固原理:
1、自定义task:“assembleRelease360”,依赖于 “assembleRelease” (即:先打包、后加固)
2、在assembleRelease360任务中,指向 360加固助手的安装目录,执行相关的cmd命令;

  • 登录360加固助手
  • 导入签名信息
  • 执行加固命令

1、新建脚本:plug_360_jiagu.gradle

def userName360 = ''
def password360 = ''
def softPath360 = ''def keystoreFilepath = ''
def keystorePSW = ''
def keystoreAlias = ''
def keystoreAliasPSW = ''
def keyfile = file('temp')//签名相关key
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
keystoreFilepath = properties.getProperty("keystorePath")
if (keystoreFilepath) {keystorePSW = properties.getProperty("keystorePassword")keystoreAlias = properties.getProperty("keystoreAlias")keystoreAliasPSW = properties.getProperty("keystoreAliasPassword")keyfile = file(keystoreFilepath)
}//360加固相关key
userName360 = properties.getProperty("360.userName")
password360 = properties.getProperty("360.password")
softPath360 = properties.getProperty("360.packagePath")task assembleRelease360(dependsOn: 'assembleRelease') {group = "360JiaGu"//360加固//        https://docs.gradle.org/current/javadoc/org/gradle/api/Project.htmldoLast {logInfo "=================== 360jiagu begin ==================="def apkPath = getReleaseApkPath()//apk位置def outputDirectory = getReleaseApkJiaguPath()//输出目录if (!new File(apkPath).exists()) {logError "apk not exist" + apkPathreturn}def jiaguDir = new File(outputDirectory)if (jiaguDir.exists()) {jiaguDir.deleteDir()}new File(outputDirectory).mkdirs()def cmdBase = "java.exe -jar  $softPath360\\jiagu.jar"def cmdLogin = cmdBase + " -login  ${userName360}   ${password360}"def cmdImportsign = cmdBase + ' -importsign ' +keyfile.getCanonicalPath() + ' ' +keystorePSW + ' ' +keystoreAlias + ' ' +keystoreAliasPSWdef cmdShowSign = cmdBase + ' -showsign'def cmdConfig = cmdBase + ' -config -x86'def cmdShowConfig = cmdBase + ' -showconfig'def cmdVersion = cmdBase + ' -version'def cmdJiagu = cmdBase + " -jiagu $apkPath $outputDirectory -autosign"logInfo '360加固登录中 cmdLogin'execute360JiaguCmd(softPath360, cmdLogin)logInfo '360加固导入签名 cmdImportsign'execute360JiaguCmd(softPath360, cmdImportsign)
//        logInfo '360加固配置 cmdConfig'
//        execute360JiaguCmd(softPath360, cmdConfig)logInfo '360加固开始加固 cmdJiagu'execute360JiaguCmd(softPath360, cmdJiagu)logInfo "=================== 360jiagu end ==================="}
}在task被添加的时候定义依赖关系
//tasks.whenTaskAdded { theTask ->
//    if (theTask.name == "assembleRelease") {//        theTask.dependsOn "cleanOutputsDir"
//    }
//}
//
//task cleanOutputsDir {//    def outputsPath = getBuildDir().getAbsolutePath() + File.separator + "outputs" + File.separator
//    println "delete outputsPath=" + outputsPath
//    // 删除旧的apk
//    new File(outputsPath).deleteDir()
//}def getReleaseApkPath() {def apkDir = getBuildDir().getAbsolutePath() + File.separator +"outputs" + File.separator +"apk" + File.separator +"release"def apkDirFile = new File(apkDir)if (!apkDirFile.exists()) {throw new RuntimeException("apk output path not exists:" + apkDir)}def apkPath = nullfor (int i = apkDirFile.listFiles().length - 1; i >= 0; i--) {File file = apkDirFile.listFiles()[i]if (file.isFile() && file.name.endsWith(".apk")) {apkPath = file.getPath()break}}println("apkPath = $apkPath")return apkPath
}def getReleaseApkJiaguPath() {def apkJiaguDir = getBuildDir().getAbsolutePath() + File.separator +"outputs" + File.separator +"apk" + File.separator +"release" + File.separator +"jiaguOutput"println("加固输出目录 = $apkJiaguDir")return apkJiaguDir
}def execute360JiaguCmd(String package360Path, String cmd) {def file = new File(package360Path)if (!file.exists()) {logError "360 binPackagePath not exist " + package360Path}logInfo(cmd)def p = cmd.execute(null, file)logInfo p.textp.waitFor()  // 用以等待外部进程调用结束logInfo p.exitValue()
}def logInfo(text) {println '【Info】' + text
}def logError(text) {println '【错误】' + text
}

2、在app的build.gradle中引入脚本

plugins {id 'com.android.application'id 'org.jetbrains.kotlin.android'
}
apply from: '../plug_360_jiagu.gradle'//引入360加固插件

3、在local.properties中配置签名和360信息

sdk.dir=C\:\\Android\\AndroidSDK
# 360加固保用户名
360.userName=***
# 360加固保登陆密码
360.password=***
# 加固保 安装的路劲
360.packagePath=D\:\\soft\\360jiagubao_windows_x64\\jiagu## 签名信息
keystorePath=../***.jks
keystorePassword=***
keystoreAlias=***
keystoreAliasPassword=***

4、在Gradle面板中执行加固命令


点击“assembleRelease360”,自动 进行打包、加固。

加固完成后的apk:…/app/build/outputs/apk/release/jiaguOutput/***.apk

参考源码:JiaGuDemo

5、问题总结

1、根据实际情况,正确的指向360加固助手的安装位置,否则无法执行cmd命令;
2、根据控制台的打印信息、排查问题;
3、AS控制台日志乱码,借助 360加固助手查看错误信息;

问题:加固进度达到了100%,但是输出目录为空;错误信息又乱码了,无法排查:

解决:可以启动电脑端的 360加固助手.exe,登录进去后,查看错误信息:

4、免费加固次数限制规则:
1)未认证用户:可加固2次/天;
2)认证个人用户:可加固10次/天;
3)认证企业用户:可加固20次/天;
专业防篡改、高级防逆向、企业版加固服务用户及其他加固套餐用户,日加固次数不限。

5、官方 错误码常见问题

参考链接:

https://jiagu.360.cn/#/global/index
https://yanwenjing.blog.csdn.net/article/details/108519491
https://blog.csdn.net/m0_37048188/article/details/82758584

AndroidStudio配置一键360加固gradle脚本相关推荐

  1. Linux系统一键安全加固shell脚本编写思路

    本次分享一下个人在对Linux系统一键安全加固shell脚本编写时的一些思路: Linux系统一键安全加固shell脚本编写思路 1.编写须知 1.1 脚本使用说明 1.2 主要功能说明: 1.3隐藏 ...

  2. python实现借助360加固保代码实现批量、断点再续等功能

    公司一直用的360加固保可视化工具,其实已经很方便了,但是小张说这个得有人盯着,加固失败了还得手动拖进去,为了满足他(实现全面懒人化),写了这个借助360加固保去批量加固,失败了自动重试,停电了也自动 ...

  3. android开发 Gradle多渠道打包以及集成360加固

    先上图 先说实现的目的 主要是 用脚本做渠道打包 然后在APP里面添加数据 在启动时读取数据上传服务器做统计 然后为啥要这么做:第一个是因为APP里面在做渠道包的时候 需要加特定的东西,区别这些APP ...

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

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

  5. 使用gradle集成360加固

    360加固我想大家并不陌生,使用起来也比较简单.只要下载它的加固助手上传我们打包签名好的APK文件就可以完成加固.但我们是否可以让他更加的便捷呢?答案是肯定的. 1.准备 首先我们下载360加固助手. ...

  6. 360加固框架Gradle实现

    最近码了一个基于360加固的流程实现的Gradle插件,在自动编译打包后进行360加固流程操作.只需要配置一些参数后,就可以实现自动打包编译和加固. 项目地址:https://github.com/j ...

  7. 360android 打包工具,Android gradle 自动化360加固打包

    步骤 1.下载并安装 360加固保 2.project bulid.gradle : (配置需要用户路径和常量) ext{ jiagubaoPath = 'D:\\AndroidTools\\360j ...

  8. Gradle 自定义Plugin插件之360加固

    之前发布的文章:Gradle 自定义Plugin插件之上传APK到蒲公英.让我们知道了自定义插件的一些功能. 一般来说,在发布的时候,我们的APK都需要加固的,毕竟安全点.这里,我们就结合之前的插件, ...

  9. Android studio gradle实现360加固保自动化打包

    Android studio gradle实现360加固保自动化打包 随着目前行业竞争越来越激烈,apk加固防逆向应该是标配,而360加固保应该是这方面比较成熟可靠的加固工具了,一次性完成了签名混淆加 ...

  10. JAVA包可以构建一个子系统_Windows 10 用于 Linux 子系统的一键构建、打包脚本「 Node、Gradle 项目」...

    最近正在开发一个 Java & Vue.js 全栈项目,该项目由以下几部分组成:Java 后端服务器.基于 Vue.js 的单页应用.基于 JavaFX 的 GUI 客户端以及其他辅助工具等. ...

最新文章

  1. 处理数字_2_计算某列的平均值
  2. 【leetcode】Path Sum II
  3. [Linux C]列出指定目录下的所有文件(夹)
  4. 【转】医学图像中的窗宽、窗位!!
  5. Java加密与解密的艺术~AES-GCM-NoPadding实现
  6. CVPR 2019|手写签名认证的逆鉴别网络
  7. c语言s_gets函数作用,C语言中gets_s(),gets(),fgets()函数的比较。
  8. 20190801H3C无线控制器3510H 版本升级总结
  9. [渝粤教育] 西南科技大学 管理学原理 在线考试复习资料(2)
  10. TM1637四位数码管驱动
  11. 安徽农业大学计算机考研分数线,安徽农业大学2019年考研复试分数线已公布
  12. Applied Cryptography:chapter 11 数学背景
  13. 详述 Spring MVC 启动流程及相关源码分析
  14. Cesium学习笔记(六)粒子系统
  15. 惊闻女程序员公开举报:摩拜单车前端组 leader 性骚扰下属!
  16. 「Premiere教程」为视频添加文字字幕
  17. [随笔]解决高分屏下软件显示模糊
  18. docker镜像上传
  19. ubuntu-18.04一键安装ros
  20. gta5结局杀老崔我哭了_gta5大结局:你选谁死?杀老崔和三人行吵起来了,其实r星多作怪...

热门文章

  1. sap 一代增强_SAP 4代增强
  2. 【蓝牙】什么?还不知道蓝牙协议栈开源了?
  3. java+swing+mysql员工工资管理系统设计分析
  4. SASS-HRM-Day04
  5. 单双面打印价格一样吗_正式合同应该打印单面还是双面?
  6. 简单了解几种常见的网络通信协议
  7. linux ftp下载geo,GEO数据下载及处理详细过程
  8. HTML5+CSS3+Bootstrap开发静态页面嵌入android webview中
  9. 四种二维傅里叶变换对
  10. 禁忌搜索算法求解 TSP 问题的代码示例