# GradleLearn **Repository Path**: WB_LZD/gradle-learn ## Basic Information - **Project Name**: GradleLearn - **Description**: gradle 学习记录,每次提交都是一个学习节点,可以通过每个提交的位置来查看不同时间点的学习进度,同一个时间节点不会包含所有的学习记录 - **Primary Language**: Android - **License**: BSD-3-Clause-Clear - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-08-03 - **Last Updated**: 2023-10-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GradleLearn ### 简介 gradle 学习记录,每次提交都是一个学习节点,可以通过每个提交的位置来查看不同时间点的学习进度,同一个时间节点不会包含所有的学习记录 推荐两个网站 - 刘望舒的 [Gradle核心思想系列](http://liuwangshu.cn/application/gradle/1-study-gradle.html) 个人感觉非常受益 - 还有 [Gradle从入门到精通](https://www.jianshu.com/p/0cf0bd81fe79) 讲的也非常透彻 --- ***千万不要因为不了解就妄下定论打了退堂鼓,等你迈进去之后就会发现其实很简单!*** --- ### 目标 这次的学习目标是为了在打正式包 assembleRelease 时能够自动化执行 1. 360 加固 (已完成) 2. 签名 (已完成) 3. 上传阿里云OOS备份 4. 上传到蒲公英并通知测试群(通知由蒲公英的里边配置的钩子来完成,已完成) 5. 发送打包结果到企业微信(这个通知主要是通知我自己的,如果失败了会有失败信息,已完成) 我也会在学习的进度中逐步想这个目标靠拢 ### 安装 1. 本项目当前是运行在 IntelliJ IDEA 2021.2 版本而非 AS [官网下载地址](https://www.jetbrains.com/idea/download/#section=mac) ; 2. 如果需要OSS上传,本程序目前使用的是 OssUtilMac64 版本的,如果版本不一致的话,可以自行修改 BuildAPKPlugin 中的命令代码; 3. 发送 hook 消息目前是使用的 企业微信的 webhook,如果要用别的钩子(比如钉钉),也可以自己去官网(比如钉钉开发者官网)找一下json结构以及发送方式; 4. 目前使用的 360 加固命令同样是使用的 mac 上的 shell 命令执行的,如果 windows 可以自行修改。 ### 建议 建议按下列方式开始学习: 1. 拉下项目 2. git 切换到第一个提交节点,或通过提交记录查看自己想要学习的节点跳转 3. 在项目中我也会不断的打tag进去,来表示我在不同的阶段所学习的内容,可以参考这个来同步学习 4. 基本上我的提交记录就代表了我的学习路线,仅供参考 ### 用法示例 如果需要使用里边的功能的话,可以按照以下步骤配置即可。 1. 配置生成本地 maven 仓库 ```groovy // 在build.gradle 中配置本地 maven 仓库位置 uploadArchives.repositories.mavenDeployer { repository(url: uri('../repo')) } ``` 2. 运行 uploadArchives tasks,这个时候就会在本地的maven仓库生成一个 jar 包了 - 可以直接在右侧 Gradle 中找到 uploadArchives 来运行 - 找不到的话,可以打开下边的 Terminal 输入 Gradle uploadArchives 也可以 3. 在需要使用此插件的工程中配置相关变量 - 引入 Plugin ```groovy // 在项目的 build.gradle 中增加以下代码 buildscript { repositories { // ... maven { // ... maven { url uri('../repo/') } // 这个地址,就是你上边配置的本地仓库地址 } } dependencies { // ... classpath 'com.lzd.plugins:GradleLearn:1.0.0' // ... } } ``` - sync project,同步一下,加载 plugin - apply Plugin ```groovy // 在 app 的 build.gradle 中增加以下代码 apply plugin: 'maven' apply plugin: 'com.lzd.plugins.buildapk' ``` - 在项目 gradle.properties 中增加以下变量 ```properties WX_HOOK_KEY = 798bb98b-52aa-4c2e-b8e9-************ JIA_GU_PATH = ***/360jiagubao/jiagu/jiagu.jar JIA_GU_USERNAME = <加固包登录账户名> JIA_GU_PASSWORD = <加固包登录密码> # 加固后生成包的位置文件夹 JIA_GU_OUTPUT_PATH = /Users/***/WorkSpace/***/app/release KEYSTORE_PATH = /Users/***/***.jks or ***.keystore (签名文件位置) KEY_PASSWORD = <签名文件密码> ALIAS = <别名> ALIAS_PASSWORD = <别名密码> OSS_UTIL = ossutilmac64 OSS_REMOTE_FOLDER = oss:// <要上传的目标文件夹位置> PGY_U_KEY = 0e8c6856e******************** PGY_API_KEY = 7cc9b10********************** ``` - 在 app build.gradle 的适当时机给 apkInput 赋值。说通俗点就是如果你的 release 包输出的时候文件名设置了版本号、日期什么的,那你要在适当的时机告诉插件你设置的名称是什么 ```groovy // 比如我在渠道打包时改了文件名,那就在这里告诉 插件你这次输出的 apk 的位置还有文件名字是什么 applicationVariants.all { variant -> if (variant.buildType.name == "release") { variant.outputs.all { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { // apk_渠道名-版本号-版本名称-编译时间.apk def fileName = assembleAPKName("RELEASE") rootProject.extensions.add('apkInput', "${projectDir.path}/build/outputs/apk/release/${fileName}") outputFileName = fileName } } } } ``` 4. 大功告成 gradle assembleRelease,现在 release 包打出来之后,就会自动完成加固、签名、上传蒲公英、通知你自己的一系列操作了 ![加固进度](https://images.gitee.com/uploads/images/2021/0806/152941_f4ebdd3d_2238541.png "屏幕截图.png") ![成功示例](https://images.gitee.com/uploads/images/2021/0806/152838_72bfc28b_2238541.png "屏幕截图.png") ***当然了,上边的这些包名什么的你都可以改成你自己喜欢的,毕竟代码开源嘛~ 开源万岁!~***