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

3,062 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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,记得在资源文件中屏蔽该代码,不然会报错