适用于Android开发者Gradle小知识,嘿嘿

语言: CN / TW / HK

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

啥是Gradle啊

哦吼,说起gradle,只要是Android开发者,我相信没有人对它陌生(其他领域的暂不了解,咱不敢妄言),可是。。。怎么用好它,它能够给我们的开发带来哪些便利,对大多数Android佬们好像不是很清楚哎。接下来,粗略的介绍一下Android开发中gradle承担的角色是什么,

以下介绍,皆是粗谈,深入了解gradle的文章很多,也写的很好,但说的都太专业了,不适合我这样的新手小白理解,以下观点,皆为本人自我理解,如果有大佬愿意指正,希望友好的在评论区提出,我将虚心学习,这对我将是莫大的帮助 同时,在此申明,该文章为粗略的技术扫盲文。不是专业文章!!,后续待我深入理解gradle,我会再重新创作,提前感谢大家的友好指正, - 构建工具(编译、打包) - 引入依赖 (dependencies、implementation等方法调用) - 配置版本 (compileSdkVersion、buildToolsVersion、minSdkVersion等) - 配置依赖环境(allprojects 、buildscript、classpath等) - 上传依赖到远端(上传到maven等远程仓库) - gradle plugin (kotlin-android 、com.android.library等) ... 还有很多,一时想不起,找不到语言描述,各位大佬评论区帮我补充!!

那你要讲的小知识是什么

不知道平时各位大佬公司有没有多渠道打包、或者是不同平台部分功能描述有差异的情况,本人在之前公司,因为公司主营业务是工具类App,在不同应用平台的App名字皆不相同,在我之前还不知道gradle的 flavorDismensions 以及 productFlavors的时候,我采用的方法是,先打一个A平台的包,再去手动改代码,去改B平台的包。这样不光耗时,而且很容易出现错误。 - 首先在android闭包中定义 flavorDimensions "buildVersionApk", "version" - 在productFlavors 闭包中将维度跟定义的方法进行关联,然后再里面进行资源文件的替换 - 运行gradle assembleXXX命令,即可进行打包 - 最后就可以在修改后的文件路径中看到你想要的apk啦 ``` android{ ...//其他配置

def flavorMap = [ buildA : "test1", buildB : "test1", buildC : "1.0.2", ] //维度 flavorDimensions "buildApk", "version" productFlavors { buildA { // 关联维度 dimension 'buildApk' def appName = flavorMap.buildA resValue "string", "app_name", appName } buildB { dimension 'buildApk' def appName = flavorMap.buildB resValue "string", "app_name", appName } buildC{ dimension "version" def appVersion = flavorMap.buildC resValue "string", "app_version", appVersion } } applicationVariants.all { variant -> variant.outputs.all { if (outputFile.name.contains("release")) { def appName = flavorMap[variant.productFlavors[0].name] variant.getPackageApplication().outputDirectory = new File(project.rootProject.rootDir, "/outputApk") outputFileName = "${appName}_v${versionName}.apk"

        println "======================================================================"
        println "终极输出路径>> : ${variant.getPackageApplication().outputDirectory}${File.separator}${outputFileName}"
        println "======================================================================"
    }
}

} } ```

光说文字太干了,上案例吧

image.png

哈哈,听懂了吗

上述操作,可以直接进行复制代码实操,有一点要注意,如果是要替换app_name,记得在资源文件中屏蔽该代码,不然会报错