build.gradle实例:
apply plugin: 'com.android.application'android { /** * 设置编译 sdk 和编译工具的版本 */ compileSdkVersion 19 buildToolsVersion "24.0.3" /** * 为所有的 build variants 设置默认的值. 关于 build variant, 我们后面会用一张图片说明 */ defaultConfig { applicationId "com.dingxiaoyu.iweather" minSdkVersion 19 targetSdkVersion 19 versionCode 1 versionName "1.0" // dex突破65535的限制 multiDexEnabled true // AndroidManifest.xml 里面UMENG_CHANNEL的value为 ${UMENG_CHANNEL_VALUE} manifestPlaceholders = [UMENG_CHANNEL_VALUE: "channel_name"] } /** * 关于签名, 请参考 google 官方文档: * Sign Your App */ signingConfigs { /** * As 会自动帮我们使用 debug certificate 进行签名. 这个 debug certificate 每次安装 As 都会变, * 因此不适合作为发布之用. */ debug { } release { storeFile file("$System.env.STORE_FILE") storePassword "$System.env.STORE_PASSWORD" keyAlias "$System.env.KEY_ALIAS" keyPassword "$System.env.KEY_PASSWORD" } } /** * type 默认会有 debug 和 release. 不管你写不写都如此. * 通常, 我们在 debug 中保留默认值, release 中开启混淆, 并使用私有的签名 */ buildTypes { release { // 不显示Log buildConfigField "boolean", "LOG_DEBUG", "false" // 移除无用的resource文件 shrinkResources true //Zipalign优化 zipAlignEnabled true // 混淆 minifyEnabled false //加载默认混淆配置文件 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' // 签名 signingConfig signingConfigs.release } debug { //apk打包文件后缀 versionNameSuffix "-debug" } } /** * flavor 强调的是不同的版本, 比如付费版和免费版. * 在国内, 这个字段更多被用于区分不同的渠道, 即 360 渠道, 小米渠道等等. */ productFlavors { main { // 定制包名的 //applicationId "com.dingxiaoyu.iweather" // manifests引用的 //manifestPlaceholders = [ CHANNEL_NAME:"YINGYONGBAO"] } m360 { } xiaomi { } flyme { } } // 设置路径 sourceSets { main { assets.srcDirs = ['src/main/assets'] jniLibs.srcDirs = ['libs'] //manifest.srcFile 'src/main/AndroidManifest.xml' //java.srcDirs = ['src/main/java'] //resources.srcDirs = ['src/main/res'] //aidl.srcDirs = ['src'] //renderscript.srcDirs = ['src'] //res.srcDirs = ['src/main/res'] } } /** * 这个选项基本不用. * 官方说: 使用 splits 可以比使用 flavor 更加有效创建多 apk. * 目前而言, 仅支持 Density 和 ABIs 这两个分类. */ splits { // 按屏幕尺寸 density { enable false // 默认包含全部分辨率, 这里是剔除一些我们不要的 exclude "ldpi", "mdpi", "xxxhdpi", "400dpi", "560dpi", "tvdpi" } // 按架构 abi { enable false // 使用 `reset()` 后, 我们就相当于不包含任何架构, // 这种情况下我们就可以通过 `include` 指定想要使用的架构 reset() include 'x86', 'armeabi-v7a' universalApk true // 是否同时生成一个包含全部 Architecture 的包 } } //打包完成后修改文件名,加版本号 applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { def fileName = outputFile.name.replace(".apk", "-${defaultConfig.versionName}.apk") output.outputFile = new File(outputFile.parent, fileName) } } }}/** * 配置依赖目录 */repositories { flatDir { dirs 'libs' }}/** * 项目的依赖 */dependencies { /** * `fileTree` 导入 libs 目录下的所有 jar 文件 */ compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:support-v4:24.2.1' compile 'com.android.volley:volley:1.0.0' compile 'com.squareup.okhttp:okhttp:2.1.0' // flyme 推送 compile(name:'common-1.0.10', ext:'aar') compile(name:'gslb-3.0.9', ext:'aar') compile(name:'push-internal-3.1.160901', ext:'aar') compile(name:'usage-stats-2.5.1', ext:'aar') compile 'com.google.android.gms:play-services-appindexing:8.4.0'}