这两天看groovy语法,,看的我快要吐了....
1.准备工作:Android studio 的构建工具 gradle是基于groovy来管理项目的,所以先要看groovy语法,语法都不难,看过一遍熟悉一下,最好多动手自己敲一敲。 2.Studio里面的调用介绍:Studio里面自带关于gradle的API,groovy这家伙和java互通,可以互相调用,比java语法更简洁吧,类似js的风格。在项目下找到build.gradle文件里面就是类似下面的代码apply plugin: 'com.android.application'android { println("android-----------") compileSdkVersion 25 buildToolsVersion "25.0.0" defaultConfig { ...
在点击Studio的run或者打包按钮时,会自动调用里面的代码顺序执行,可以把它看做一个java类
3.关于怎么学习使用:最好自己多在里面打印一些println信息,看看执行调用的顺序;也可以自己写一些方法,然后调用,你会感觉和java好像...def say={ def keystore=file('android.keystore') println("---keystore---size---------"+keystore.size()) keystore=new File(keystore.parent,"my.keystore") keystore.write("哈") println("---keystore---size---------"+keystore.size()) println("---keystore---name---------"+keystore.name) } say.call()
上面的def say是定义了一个闭包(groovy里面的),相对于java类里面的一个方法,然后say.call()是调用这个方法,就会依次执行say闭包里面的代码;def keystore=file('android.keystore')是找到给到路径的文件,然后打印文件信息,对文件操作一些的。
4.关于配置常量:可以在gradle.properties文件里面,定义一些常量,然后在build.gradle文件里面引用,因为每次改动build.gradle文件都要重新sync now,好烦...ANDROID_VERSION_CODE=10
然后在build.gradle文件的
android { println("android-----------") compileSdkVersion 25 buildToolsVersion "25.0.0" defaultConfig { versionCode Integer.parseInt(ANDROID_VERSION_CODE)
输入定义的常量,这样下次发版打包的时候,改动gradle.properties里面的值就好,不用重新sync now了,O(∩_∩)O哈哈~
5.关于gradle多渠道打包:假如市场推广要打几十个渠道包怎么整呢,一个一个打包烦死了%>_<%,以下是关于gradle打包的配置,还是在build.gradle文件里面,使用productFlavors:android { ... productFlavors{ xiaomi{ String UMENG_CHANNEL_VALUE = '"xiaomi"' buildConfigField 'String', 'UMENG_CHANNEL_VALUE', UMENG_CHANNEL_VALUE } huawei{ String UMENG_CHANNEL_VALUE = '"huawei"' buildConfigField 'String', 'UMENG_CHANNEL_VALUE', UMENG_CHANNEL_VALUE } }}
然后就可以在代码里面的渠道号=BuildConfig.UMENG_CHANNEL_VALUE获取自己设置的渠道值了。这样写不止是渠道号,还可以定义好多渠道相关的信息到 BuildConfig 类里面,然后调用。
如果渠道号写在manifest文件里面就可以这样
xiaomi{ manifestPlaceholders=[UMENG_CHANNEL_VALUE:'xiaomi'] }就可以这样愉快地选择要打的包了,O(∩_∩)O哈哈~ 6.但是,然而,假如要每个渠道包的名字都要有一定的格式呢,一个一个的改好烦... 好在可以在build.gradle里面这样:
applicationVariants.all { variant -> println("applicationVariants---------"+variant.name) variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { String name = variant.productFlavors[0].name; name = name.replace("huawei", "hhhhhhh"); // 下面的appname改为你自己的app name def fileName = "${defaultConfig.versionName}_zhangyi_${name}.apk" output.outputFile = new File(outputFile.parent, fileName) } } }
遍历输出信息,筛选apk文件,改成自己想要的O(∩_∩)O哈哈~
最后推荐几个参考链接,,以及...