// 声明是Android程序
//apply plugin是最新gradle版本的写法,以前的写法是apply plugin: 'android', 如果还是以前的写法,请改正过来
apply plugin: 'com.android.application'
//自定义函数 用于在打包时 命名APK 生成当前日期字符串
def releaseTime() {
return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}
android {
//说明要运行该源码,你必选已经安装了android API 23
compileSdkVersion 23
// 说明要运行该源码,你必须已经安装了 android sdk build-tools 23.0.3
buildToolsVersion "23.0.3"
//动态的在build时配置AndroidManifest.xml里的项目
// defaultConfig里的配置可以覆盖manifest里的配置
defaultConfig {
applicationId "test.com.yu"
//表示向下低至android API 14,即androd 4.0和4.0以上的版本都可以运行该工程
minSdkVersion 14
//表示采用的目标android API是 API 23即 android 5.0
targetSdkVersion 23
versionCode 1
versionName "1.0"
//dex突破65535的限制 突破64k需要的设置
//需要compile 'com.android.support:multidex:'
//需要Application中相关配置
multiDexEnabled true
// 默认是umeng的渠道 UMENG_CHANNEL_VALUE需要与AndroidManifest中的对应位置的命名一致
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng"]
}
// java版本
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
//签名文件配置
signingConfigs {
debug {
// No debug config
//storeFile file("C:/Users/Administrator/.android/debug.keystore")
}
release {
storeFile file("../yourapp.keystore")
storePassword "your password"
keyAlias "your alias"
keyPassword "your password"
}
}
//配置如何构建和打包你的App,默认有debug和release两个类型。
// debug类型包含调试时的信息,并且有debug key签名。release默认是不含签名的
buildTypes {
//调试版本
debug {
// 显示Log
buildConfigField "boolean", "LOG_DEBUG", "true"
//混淆配置
minifyEnabled false
signingConfig signingConfigs.debug
versionNameSuffix "-debug"
zipAlignEnabled false
shrinkResources false
}
//发布版本
release {
// 不显示Log
buildConfigField "boolean", "LOG_DEBUG", "false"
/*是否开启混淆,新版本是minifyEnabled不再是 runProguard true
* ProGuard的作用是在byte级别对你的app进行分析优化,使得你的App变得更小,更快
* 设置minifyEnabled true,就会在打包的时候进行代码混淆处理.
* 其中proguard-android.txt不用管,在sdk目录里面,主要是配置了proguard.cfg文件。
* 直接在android studio创建项目不会有这个文件,而是 proguard-rules.pro文件
* 其实一样的,因为项目是从eclipse迁移过来的,之前在eclipse上混淆是 proguard.cfg文件*/
minifyEnabled false
/*加载默认混淆配置文件及自定义混淆的配置
* proguardFiles这部分有两段,前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,免去了我们很多事
* 这个文件的目录在 <sdk目录>/tools/proguard/proguard-android.txt
* 后一部分是我们项目里的自定义的混淆文件,目录就在 app/proguard-rules.txt ,
* 如果你用Studio 1.0创建的新项目默认生成的文件名是 proguard-rules.pro
* 这个名字没关系,在这个文件里你可以声明一些第三方依赖的一些混淆规则*/
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//配置发布版本的签名文件
signingConfig signingConfigs.release
zipAlignEnabled true
shrinkResources true // 移除无用的resource文件,这个东西依赖于minifyEnabled,所以minifyEnabled也要为true才行。有可能导致android.content.res.Resources$NotFoundException: File
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
// 输出apk名称为boohee_v1.0_2015-01-15_wandoujia.apk
def fileName = "boohee_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
}
}
// 友盟多渠道打包
productFlavors {
wandoujia {}
_360 {}
baidu {}
xiaomi {}
tencent {}
taobao {}
}
// 友盟多渠道打包 UMENG_CHANNEL_VALUE需要与AndroidManifest中的对应位置的命名一致
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
//执行lint检查,有任何的错误或者警告提示,都会终止构建,我们可以将其关掉。
lintOptions {
abortOnError false
disable "ignore", "IgnoreResLayout", "InvalidPackage", "MissingRegistered"
}
dexOptions {
preDexLibraries = false //似乎和构建加速有关
//Out of memory 问题 Error:Execution failed for task ':app:dexDebug'. java.lang.OutOfMemoryError: GC overhead limit exceeded
incremental = true;
javaMaxHeapSize "2g"
}
//dex突破65535的限制 突破64k需要的设置 遇到java.lang.NoClassDefFoundError
android.applicationVariants.all { variant ->
task "fix${variant.name.capitalize()}TestMultiDexList" << {
logger.info "Fixing keep manifest for $variant.name"
def keepManifest = new File("$buildDir/intermediates/multi-dex/test/$variant.flavorName/$variant.buildType.name/manifest_keep.txt")
keepManifest.append '\n-keep class *.** { *; }\n'
logger.debug "Updated keepManifest for ${keepManifest.getAbsolutePath()}\n$keepManifest.text"
}
}
tasks.whenTaskAdded { task ->
android.applicationVariants.all { variant ->
if (task.name == "collect${variant.name.capitalize()}TestMultiDexComponents") {
task.finalizedBy "fix${variant.name.capitalize()}TestMultiDexList"
}
}
}
}
//dependencies里指明的就是一些需要用到的第三方库
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:gridlayout-v7:21.0.2'
compile 'com.android.support:appcompat-v7:21.0.2'
compile 'com.android.support:multidex:1.0.0'
compile 'com.google.code.gson:gson:2.3.1'
//ORM 对象型数据库框架 操作本地db
compile 'com.google.code.gson:gson:2.3.1'
//json解析
compile 'com.nineoldandroids:library:2.4.0'
//
compile 'com.android.support:recyclerview-v7:23.0.1'
//RecyclerView引入
/* compile project(path: ':moalib')
//自定义module 包含一些列控件
compile project(path: ':jni')
//本地Jni
compile project(path: ':myjni')//自己定义的jni*/
//aar包:【复制aar到libs】
// 【build.gradle repositories flatDir{ dirs 'libs' }】 【dependencies { compile (name:'XXXXXXX', ext:'aar') }】
compile(name: 'ormlite4.8', ext: 'aar')
compile(name:'jni', ext:'aar')
compile(name:'moalib', ext:'aar')
compile(name:'myjni', ext:'aar')
compile files('libs/conceal_android.jar')
//第三方加密解密
compile files('libs/libconceal.jar')
//第三方加密解密
compile files('libs/umeng-analytics-v5.2.4.jar')
//Umeng分析
}
关于Android Studio里的Gradle文件
最新推荐文章于 2024-08-13 14:47:25 发布