# Gradle Tips ## 实用的Gradle技巧 #### [自定义gradle属性](tips/01_gradle_custom_property) ### [gradle自带变量和引用属性值](tips/02_gradle%E8%87%AA%E5%B8%A6%E5%8F%98%E9%87%8F%E5%92%8C%E5%BC%95%E7%94%A8%E5%B1%9E%E6%80%A7%E5%80%BC) ### [gradle代理](tips/03_gradle%E4%BB%A3%E7%90%86) ### [dex突破65535的限制](tips/04_dex%E7%AA%81%E7%A0%B465535%E7%9A%84%E9%99%90%E5%88%B6) ### [gradle依赖的统一管理](tips/05_gradle%E4%BE%9D%E8%B5%96%E7%9A%84%E7%BB%9F%E4%B8%80%E7%AE%A1%E7%90%86) ### [加速gradle编译](tips/06_%E5%8A%A0%E9%80%9Fgradle%E7%BC%96%E8%AF%91) ### [buildSrc 和 Composing Build](tips/buildSrc_composingbuild) ## Gradle插件 ### [pgyer_dingtalk](plugins/pgyer_dingtalk) 一键打包上传到蒲公英,并发送钉钉消息到群,极大地提升分发包的效率 **特性:** 1. 打包完毕后,上传包到蒲公英 2. 发消息到钉钉,并支持@人 3. 支持配合Jenkins,支持按包类型、分支、代理、@人及32位和64位等功能 **使用:** ```gradle apply plugin: 'dingPgyer' dingPgyerConfig { pgyerApiKey = "xxx" // 蒲公英ApiKey apiToken = "xxx" // 钉钉群机器人toekn atMobiles = ['135xxx','136xxx'] // 群@人的手机号 enableByVariant = { variantName -> // 对哪些flavor开启 variantName.toLowerCase().contains("dev-preview") || variantName.toLowerCase().contains("product-release") } changeLog = "${getGitLog(5)}" // build log,获取前5条git log } /** * 获取git log * @param pre 多少条git log * @return */ private String getGitLog(int pre) { def diffLog = new StringBuffer() def err = new StringBuffer() def workspaceFile = rootDir def gitChangeLogScript = new StringBuilder() gitChangeLogScript.append("git log --no-merges --pretty=format:\"%s\" -${pre}") println(gitChangeLogScript) def changeLogProc = gitChangeLogScript.toString().execute(null, workspaceFile) changeLogProc.waitForProcessOutput(diffLog, err) def diffLogStr = diffLog.toString() diffLogStr = diffLogStr.replaceAll("\"", "") diffLogStr = diffLogStr.replaceAll("\n", "\n\n > ") if (diffLogStr.length() > 1000) { diffLogStr = diffLogStr.substring(0, 999) } return diffLogStr } ``` **打包发送到钉钉消息效果图:**
### [module_dependency_switch](plugins/switch_module_dependency) 组件化过程中,module和aar切换 配置`module_dependency.json`: ``` { "useModule": true, "module_name": "Modularization1", "module_dir": "Modularization1", "module_group": "me.hacket:Modularization1" } ``` - useModule true表示module依赖,false表示aar依赖 - module_name module的name - module_dir module路径 - module_group module对应的远端aar的group和artifactId