Android build.gradle配置文件

一、初始配置:(新建项目自动配置好的):

1.build.gradle(app)
apply plugin: ‘com.android.application’
//下边apk重命名使用

static def buildTime() {
    def date = new Date()
    def formattedDate = date.format('yyyyMMdd-HHmm')
    def iml = new File('app/app.iml')
    if (iml.exists()) {
        return 'time'
} else {
        return formattedDate
    }
}

static def getGitRevision() {
    def iml = new File('app/app.iml')
    if (iml.exists()) {
        return 'git_xxxx'
} else {
        return 'git rev-parse --short HEAD'.execute().text.trim()
    }
}

//配置

android {
compileSdkVersion 26
buildToolsVersion "25.0.3"
defaultConfig {
//此里边是默认配置,下边buildTypes里边可以根据平台不同修改
applicationId "wangjing.testandroid"
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

//后期加入
// 设置支持的 SO 库构架,注意这里要根据你的实际情况来设置

ndk { 
abiFilters 'armeabi-v7a' }  //'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64', 'mips', 'mips64'
//使用manifestPlaceholders替换变量,主要替换AndroidManifest.xml中的值:
 // android:value="${umeng_app_key}"/>
manifestPlaceholders = [
GETUI_APP_ID    : "P5rfdfytdftghgujghi6",        
//推送
GETUI_APP_KEY   : "xcftdctyfytfyt687ty8",
GETUI_APP_SECRET: "dte654r6r65trrftftgf",
 PACKAGE_NAME    : applicationId,
APPLICATION_ID  : applicationId,
INTENT_HOME     : 'intent.Placeholders1',
INTENT_DEFAULT  : 'intent.Placeholders2',
SHARED_USER_ID  : '']
//buildConfigField代码中值的应用:BuildConfig.GIT_VERSION
buildConfigField 'String', 'GIT_VERSION', '".' + getGitRevision() + '"'   //当前git版本号
buildConfigField 'String', 'TARGET_URL', '"wangjing.com"'                   //服务器
buildConfigField 'String', 'ROOT_DIR', '"WangJingDir"'                  
//根文件夹
buildConfigField 'String', 'TARGET', '"测试"'                           
//平台 buildConfigField 'String', 'LOG_TAG', '"WangJingDir"'                   //日志Tag buildConfigField 'int', 'LOG_LEVEL', '1'                                //日志级别
buildConfigField 'String', 'UMENG_APPKEY', '"dssscfdeffder343534tefrfre"' 
//友盟APPKEY
buildConfigField 'String', 'UMENG_CHANNEL', '"wangjing"'             
//友盟渠道
buildConfigField 'boolean', 'UMENG_ENCRYPT', 'false'                    //友盟日志加密
buildConfigField 'String', 'APP_MODEL', '"WANGJING"'
 buildConfigField 'String', 'INVITATIONCODE', '"fdvedrfg"'                  //默认班级码
buildConfigField 'int', 'MESSAGE_REFRESH_TIME', '180'                   //消息中心刷新时间间隔(秒)
buildConfigField 'String', 'SHARE_URL', '"http://d.wangjing.com"'          //分享url
//文件系统参数
buildConfigField 'String', 'SERVER_URL', '"http://fs.wangjing.com"'
buildConfigField 'String', 'APPKEY', '"filewj"'
 buildConfigField 'String', 'SECRET', '"fvbfdvbfdvbfgvbfer4t4t54tg"'
buildConfigField 'String', 'BUTCKET1', '"vfdvgrgrtgr4g4eg4r5g4g4eg4gg"'  
// 作业活动问答
buildConfigField 'String', 'BUTCKET2', '"f4rtfgr4g4gt45y45ytygftrttfg"'  // 头像课程封面
 buildConfigField 'boolean', 'isPad', 'false'                                 
 // 是不是pad
buildConfigField 'boolean', 'isTest', 'false'                                
// 是不是测试平台
buildConfigField 'boolean', 'isHuaweiPad', 'false'                          
 // 是不是定制华为pad
 buildConfigField 'String', 'DWONURLPRE', '"http://dvdfvdfv.aliyuncs.com/"'  
 //阿里云上传默认前缀 
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' //默认的混淆文件
// 重命名APK
applicationVariants.all { variant ->
variant.outputs.each { output ->
def targetName = variant.buildType.name;
targetName = targetName.replace("debug", "test")
def apkName = "mobile-${targetName}-v${variant.versionName}-${buildTime()}-${getGitRevision()}.apk"
def dir = output.outputFile.getParent()
def apkFile = new File(dir, apkName)
 output.outputFile = apkFile
        }
    }
  }

//签名配置

signingConfigs {
    release {//其中的
RELEASE_STOREFILE值可以定义在gradle.propertises中调用
        storeFile file(RELEASE_STOREFILE)
        storePassword RELEASE_STORE_PASSWORD
        keyAlias RELEASE_KEY_ALIAS
        keyPassword RELEASE_KEY_PASSWORD
    }
}

//原本初始化时候的

 buildTypes {
        release {
            minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
	}
}

//被替换为

buildTypes {
    debug {
        	minifyEnabled false
			shrinkResources false
			debuggable true
			signingConfig signingConfigs.release
		 buildConfigField 'boolean', 'isTest', 'true'   
 // 是test/debug平台
buildConfigField 'String', 'TARGET_URL', '"wangjing.com"'            			//服务器平台
buildConfigField 'String', 'TARGET', '" 测试"'                       
//在‘我’中显示平台
buildConfigField 'int', 'LOG_LEVEL', '1'                            
 //日志级别
buildConfigField 'String', 'SERVER_URL', '"http://fs.wangjing.com"'  

//文件服务器配置

ndk { abiFilters 'armeabi-v7a', 'x86' }
    }
demo {
minifyEnabled false
shrinkResources false
debuggable true
signingConfig signingConfigs.release
 buildConfigField 'String', 'TARGET_URL', '"wangjing.com"'
buildConfigField 'String', 'TARGET', '" DEMO"'
buildConfigField 'int', 'LOG_LEVEL', '1'
buildConfigField 'String', 'UMENG_CHANNEL', '"wangjingdemo"'
buildConfigField 'String', 'SERVER_URL', '"http://fs.wangingdemo.com"'  //文件服务器配置
ndk { abiFilters 'armeabi-v7a', 'x86' }
    }
  release {
minifyEnabled false
debuggable false
signingConfig signingConfigs.release
buildConfigField 'String', 'TARGET_URL', '"wangjing.com"'
buildConfigField 'String', 'TARGET', '""'
buildConfigField 'int', 'LOG_LEVEL', '5'
buildConfigField 'String', 'UMENG_CHANNEL', '"wangjing"'
buildConfigField 'boolean', 'UMENG_ENCRYPT', 'true'                   //友盟日志加密
buildConfigField 'String', 'SERVER_URL', '"http://fs.wangjing.cn"'       //文件服务器配置
}

local {
initWith release
minifyEnabled false
shrinkResources false
debuggable true
buildConfigField 'String', 'TARGET', '" 本地"'                
//在‘我’中显示平台
buildConfigField 'int', 'LOG_LEVEL', '1'                     
 //日志级别
ndk { abiFilters 'armeabi-v7a', 'x86' }
    }

    pad_test {
initWith debug //用debug的配置
manifestPlaceholders = [INTENT_HOME   : 'android.intent.category.HOME', INTENT_DEFAULT: 'android.intent.category.DEFAULT',SHARED_USER_ID: '']
buildConfigField 'String', 'APP_MODEL', '"WANGJING-PAD"'
buildConfigField 'boolean', 'isPad', 'true'                          
 // 是pad
}
 pad_demo {
 initWith demo
manifestPlaceholders = [INTENT_HOME   : 'android.intent.category.HOME',INTENT_DEFAULT: 'android.intent.category.DEFAULT', SHARED_USER_ID: '']
 buildConfigField 'String', 'APP_MODEL', '"WANGJING-PAD"'
buildConfigField 'boolean', 'isPad', 'true'                           
// 是pad
}
pad_release {
initWith release
manifestPlaceholders = [INTENT_HOME   : 'android.intent.category.HOME', INTENT_DEFAULT: 'android.intent.category.DEFAULT',SHARED_USER_ID: '']
buildConfigField 'String', 'APP_MODEL', '"WANGJING-PAD"'
buildConfigField 'boolean', 'isPad', 'true'                          
 // 是pad
}
ruiyipad_release {
initWith release
buildConfigField 'String', 'APP_MODEL', '"WANGJING-PAD-RUIYI"'
buildConfigField 'boolean', 'isPad', 'true'                          
 // 是pad
}
huaweipad_test {
initWith pad_test
buildConfigField 'String', 'APP_MODEL', '"WANGJING-PAD-HUAWEI"'
buildConfigField 'boolean', 'isHuaweiPad', 'true'                    
 // 是不是华为pad
}
huaweipad_demo {
initWith pad_demo
buildConfigField 'String', 'APP_MODEL', '"WANGJING-PAD-HUAWEI"'
buildConfigField 'boolean', 'isHuaweiPad', 'true'                     // 是不是华为pad
}

 huaweipad_release {
 initWith pad_release
 buildConfigField 'String', 'APP_MODEL', '"WANGJING-PAD-HUAWEI"'
buildConfigField 'boolean', 'isHuaweiPad', 'true'                     // 是不是华为pad
}
}
packagingOptions {//打包的时候提示哪个出错了,exclude排除一下
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}

dexOptions {//将运行内存设置大一些,运行变快
preDexLibraries false
javaMaxHeapSize "4g"
}
}

dependencies {//依赖,引用
compile project(':logic')//引入本地lib项目,记得settings.gradle里边加入引用:include ':app',':logic'
compile fileTree(dir: 'libs', include: ['*.jar'])//引入本地jar包
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations'
})//两个项目中都包含support-annotations,去除掉espresso-core里边的group:'com.android.support'中的support-annotations,用本项目app下边的support-annotations
compile 'com.android.support:appcompat-v7:26.+'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12' //这个没有什么用,出错可以去除掉
}

repositories {
    maven {//导入外部的东西时,需要加入自己的maven外部的库
        url "http://hjghujhniknukhnh/releases/"
maven { url "https://ffvytfgytgyu/maven" }
        //https://github.com/PhilJay/MPAndroidChart图表依赖
maven { url "https://jitpack.io" }
    }
    flatDir {//将aar文件复制到app module目录下的libs文件夹中,然后打开app module目录下的build.gradle配置文件
        dirs 'libs'
}
}

2.build.gradle(Project:wangjing)
//自动生成
buildscript {
    repositories {
        jcenter()
    //如果有maven库的引入,加入 
    //mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'

// NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
}
}

allprojects {
    repositories {
        jcenter()
   //如果有maven库的引入,加入 
   //mavenCentral()
}
}

// 运行gradle clean时,执行此处定义的task // 该任务继承自Delete,删除根目录中的build目录 // 相当于执行Delete.delete(rootProject.buildDir) // gradle使用groovy语言,调用method时可以不用加()
task clean(type: Delete) {
    delete rootProject.buildDir
}

3.build.gradle(Module:logic)
apply plugin: 'com.android.library'

android {
compileSdkVersion 25
buildToolsVersion '25.0.2'

defaultConfig {
minSdkVersion 11
targetSdkVersion 25
versionCode 1
versionName "1.0"
}
    buildTypes {
        release {
            minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
    }
}

repositories {
    flatDir {
        dirs 'libs'
}
}

dependencies {
    compile project(':pay')
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
// 友盟统计
compile 'com.umeng.analytics:analytics:latest.integration'
}

注:首次上传项目到git上需要配置gitignore文件
1.(app最外部项目)
*.iml.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
build
/captures
.svn
/.idea/
2.(内部)只需要去除
build

基本配置完成!
二、配置讲解
apply plugin: 'com.android.application'//说明module的类型,com.android.application为程序,com.android.library为库  
android {  
    compileSdkVersion 22//编译的SDK版本  
    buildToolsVersion "22.0.1"//编译的Tools版本  
    defaultConfig {//默认配置  
     applicationId "com.nd.famlink"//应用程序的包名  
     minSdkVersion 8//支持的最低版本  
     targetSdkVersion 19//支持的目标版本  
     versionCode 52//版本号  
     versionName "3.0.1"//版本名  
     manifestPlaceholders = [ UMENG_CHANNEL_VALUE:"hsq" ]//声明友盟渠道名是可变的  
    }  
    sourceSets {//目录指向配置  
        main {  
            manifest.srcFile 'AndroidManifest.xml'//指定AndroidManifest文件  
            java.srcDirs = ['src']//指定source目录  
            resources.srcDirs = ['src']//指定source目录  
            aidl.srcDirs = ['src']//指定source目录  
            renderscript.srcDirs = ['src']//指定source目录  
            res.srcDirs = ['res']//指定资源目录  
            assets.srcDirs = ['assets']//指定assets目录  
            jniLibs.srcDirs = ['libs']//指定lib库目录  
        }  
        debug.setRoot('build-types/debug')//指定debug模式的路径  
        release.setRoot('build-types/release')//指定release模式的路径  
    }  
    signingConfigs {//签名配置  
        release {//发布版签名配置  
            storeFile file("fk.keystore")//密钥文件路径  
            storePassword "123"//密钥文件密码  
            keyAlias "fk"//key别名  
            keyPassword "123"//key密码  
        }  
        debug {//debug版签名配置  
            storeFile file("fk.keystore")  
            storePassword "123"  
            keyAlias "fk"  
            keyPassword "123"  
        }  
    }  
 
    buildTypes {//build类型  
        release {//发布  
            minifyEnabled true//混淆开启  
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'//指定混淆规则文件  
            signingConfig signingConfigs.release//设置签名信息  
        }  
        debug {//调试  
            signingConfig signingConfigs.release  
        }  
    }  
    packagingOptions {  
        exclude 'META-INF/ASL2.0'  
        exclude 'META-INF/LICENSE'  
        exclude 'META-INF/NOTICE'  
        exclude 'META-INF/MANIFEST.MF'  
    }  
  
    lintOptions {  
        abortOnError false//lint时候终止错误上报,防止编译的时候莫名的失败  
    }  
      
    //打包-渠道  
    productFlavors {  
        hsq{}  
        hsq_dx{}  
        hsq_wx{}  
        baidu{}  
        yingyongbao{}  
        ppzhushou{}  
        anzhi{}  
        zhushou360{}  
        huawei{}  
        lenovomm{}  
        wandoujia{}  
        mumayi{}  
        meizu{}  
        youyi{}  
        sougou{}  
    }  
      
    //打包-防渠道代码重复处理  
    productFlavors.all { flavor ->  
        flavor.manifestPlaceholders = [ UMENG_CHANNEL_VALUE:name ]  
    }  
}  
 
dependencies {//依赖  
    compile fileTree(dir: 'libs', exclude: ['android-support*.jar'], include: ['*.jar'])   //编译lib目录下的.jar文件  
    compile project(':Easylink')//编译附加的项目  
    compile project(':ImageLibrary')  
    compile project(':ImageResLibrary')  
    compile project(':Ofdmtransport')  
    compile project(':PullToRefreshLibrary')  
    compile project(':RecorderLibrary')  
    compile project(':WebSocket')  
    compile project(':WidgetLibrary')  
    compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'//编译来自Jcenter的第三方开源库  
}  

你可能感兴趣的:(Android,android)