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 官方文档:
* <a href="https://developer.android.com/studio/publish/app-signing.html#debug-mode">Sign Your App</a>
*/
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']
}
}
/**
* 这个选项基本不用.
* <a href="http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits">官方说</a>: 使用 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'
}