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 26buildToolsVersion "25.0.3"defaultConfig {//此里边是默认配置,下边buildTypes里边可以根据平台不同修改        applicationId "wangjing.testandroid"minSdkVersion 15targetSdkVersion 26versionCode 1versionName "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中的值:<meta-data android:name="UMENG_APPKEY"
       // 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 falseproguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘}    }//被替换为
buildTypes {    debug {        minifyEnabled falseshrinkResources falsedebuggable truesigningConfig 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 falseshrinkResources falsedebuggable truesigningConfig 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 falsedebuggable falsesigningConfig 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 falseshrinkResources falsedebuggable truebuildConfigField ‘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 falsejavaMaxHeapSize "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 25buildToolsVersion ‘25.0.2‘

defaultConfig {        minSdkVersion 11targetSdkVersion 25versionCode 1versionName "1.0"}    buildTypes {        release {            minifyEnabled falseproguardFiles 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_Storebuild/captures.svn/.idea/
2.(内部)只需要去除
build

基本配置完成!二、配置讲解
  1. apply plugin: ‘com.android.application‘//说明module的类型,com.android.application为程序,com.android.library为库
  2. android {
  3. compileSdkVersion 22//编译的SDK版本
  4. buildToolsVersion "22.0.1"//编译的Tools版本
  5. defaultConfig {//默认配置
  6. applicationId "com.nd.famlink"//应用程序的包名
  7. minSdkVersion 8//支持的最低版本
  8. targetSdkVersion 19//支持的目标版本
  9. versionCode 52//版本号
  10. versionName "3.0.1"//版本名
  11. manifestPlaceholders = [ UMENG_CHANNEL_VALUE:"hsq" ]//声明友盟渠道名是可变的
  12. }
  13. sourceSets {//目录指向配置
  14. main {
  15. manifest.srcFile ‘AndroidManifest.xml‘//指定AndroidManifest文件
  16. java.srcDirs = [‘src‘]//指定source目录
  17. resources.srcDirs = [‘src‘]//指定source目录
  18. aidl.srcDirs = [‘src‘]//指定source目录
  19. renderscript.srcDirs = [‘src‘]//指定source目录
  20. res.srcDirs = [‘res‘]//指定资源目录
  21. assets.srcDirs = [‘assets‘]//指定assets目录
  22. jniLibs.srcDirs = [‘libs‘]//指定lib库目录
  23. }
  24. debug.setRoot(‘build-types/debug‘)//指定debug模式的路径
  25. release.setRoot(‘build-types/release‘)//指定release模式的路径
  26. }
  27. signingConfigs {//签名配置
  28. release {//发布版签名配置
  29. storeFile file("fk.keystore")//密钥文件路径
  30. storePassword "123"//密钥文件密码
  31. keyAlias "fk"//key别名
  32. keyPassword "123"//key密码
  33. }
  34. debug {//debug版签名配置
  35. storeFile file("fk.keystore")
  36. storePassword "123"
  37. keyAlias "fk"
  38. keyPassword "123"
  39. }
  40. }
  41. buildTypes {//build类型
  42. release {//发布
  43. minifyEnabled true//混淆开启
  44. proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-project.txt‘//指定混淆规则文件
  45. signingConfig signingConfigs.release//设置签名信息
  46. }
  47. debug {//调试
  48. signingConfig signingConfigs.release
  49. }
  50. }
  51. packagingOptions {
  52. exclude ‘META-INF/ASL2.0‘
  53. exclude ‘META-INF/LICENSE‘
  54. exclude ‘META-INF/NOTICE‘
  55. exclude ‘META-INF/MANIFEST.MF‘
  56. }
  57. lintOptions {
  58. abortOnError false//lint时候终止错误上报,防止编译的时候莫名的失败
  59. }
  60. //打包-渠道
  61. productFlavors {
  62. hsq{}
  63. hsq_dx{}
  64. hsq_wx{}
  65. baidu{}
  66. yingyongbao{}
  67. ppzhushou{}
  68. anzhi{}
  69. zhushou360{}
  70. huawei{}
  71. lenovomm{}
  72. wandoujia{}
  73. mumayi{}
  74. meizu{}
  75. youyi{}
  76. sougou{}
  77. }
  78. //打包-防渠道代码重复处理
  79. productFlavors.all { flavor ->
  80. flavor.manifestPlaceholders = [ UMENG_CHANNEL_VALUE:name ]
  81. }
  82. }
  83. dependencies {//依赖
  84. compile fileTree(dir: ‘libs‘, exclude: [‘android-support*.jar‘], include: [‘*.jar‘])   //编译lib目录下的.jar文件
  85. compile project(‘:Easylink‘)//编译附加的项目
  86. compile project(‘:ImageLibrary‘)
  87. compile project(‘:ImageResLibrary‘)
  88. compile project(‘:Ofdmtransport‘)
  89. compile project(‘:PullToRefreshLibrary‘)
  90. compile project(‘:RecorderLibrary‘)
  91. compile project(‘:WebSocket‘)
  92. compile project(‘:WidgetLibrary‘)
  93. compile ‘com.nostra13.universalimageloader:universal-image-loader:1.9.3‘//编译来自Jcenter的第三方开源库
  94. }
时间: 2024-11-07 17:41:13

Android build.gradle 配置的相关文章

Android开发之深入理解Android Studio构建文件build.gradle配置

摘要: 每周一次,深入学习Android教程,TeachCourse今天带来的一篇关于Android Studio构建文件build.gradle的相关配置,重点学习几个方面的内容:1.applicationId和package属性值的关系,2.怎么配置安全的自定义签名,3.两种构建类型的区别,4.为什么要定制产品的偏好配置?,5.怎么才能加快DEX文件的生成速度,6.为什么要将一个apk拆分成多个?,7.关于引入依赖包你不知道的秘密.通过这篇文章的学习,你会对build.gradle文件有一个

android开发里跳过的坑-AS导入NDK工程提示错误 No such property: sdkHandler for class: com.android.build.gradle.LibraryPlugin

接到一个NDK工程需要调试,导入后发现总是提示错误 Error:(37, 1) A problem occurred evaluating project ':libuvccamera'.> No such property: sdkHandler for class: com.android.build.gradle.LibraryPlugin 百度上各种说法,有说要降低gadle版本,有说要在环境变量里配置ANDROID_NDK的路径,试验了都不行,最后参考别人NDK gradle文件修改如

android build.gradle(groovy)

一.build.Gradle 这个 build.Gradle 文件来自 drakeet 大神的 Meizi 项目我直接在代码上加注释,参照着注释看代码就行,是不是发现有很多代码平时都没看见过. 1 //Model都有各自的build.gradle,这里声明该Model作为主项目,常见的还有另一个取值: 2 //apply plugin: 'com.android.library' 声明该Model作为库使用,当然还有其他取值,后面博客会介绍 3 apply plugin: 'com.androi

Could not find property &#39;outputFile&#39; on com.android.build.gradle.internal.api.ApplicationVariantImpl

Android studio从1.0 RC 4升级到1.0(其实就是打了一个8M的patch)后,这个时候相应的gradle的版本也会直接使用"com.android.tools.build:gradle:1.0.0",如果这时你在gradle文件中又用到outputFile就会出现上述的问题.好吧,其实这也是gradle团队搞的问题,有时候我们多希望gradle能像android一样,对旧版本有一个非常好的兼容性. 废话不多说,直接说怎么解决这个问题吧,这个问题的原因是outputF

java.lang.UnsupportedClassVersionError: com/android/build/gradle/AppPlugin : Unsupported major.minor version 52.0解决办法

androidstudio编译程序时出现java.lang.UnsupportedClassVersionError: com/android/build/gradle/AppPlugin : Unsupported major.minor version 52.0.Unsupported major.minor version 52.这个错误是由于(jdk)高版本的java project使用了低版本的来运行.使用命令(java -version 和 javac -version)查看java

Android Project和app中两个build.gradle配置的区别

Android 开发也挺长时间了,从开始就使用的AndroidStudio开发,但是说下来其实自己对AS(AndroidStudio简称)还真的是不了解不深入.好吧,其实我只知道AS是一个相当强大的工具,我要学习的还有很多.  言归正传,这段时间在学习RtroLambda和ButterKnife的使用,我发现他们的导入在Project的build.gradle中引入的而不是在app的build.gradle中,这让我觉得有点郁闷,因为我才发现不太知道这两个gradle的区别,下面来总结一下. 一

Android studio build.gradle配置,debug模式下使用正式版签名,重命名apk

在build.gradle文件中,android节点下进行配置. android { compileSdkVersion 22 buildToolsVersion '22.0.1' signingConfigs { release { keyAlias 'xxx' keyPassword 'xxxxxxxxxxxx' storeFile file('./xxx.keystore') storePassword 'xxxxxxxxxxxxxxxx' } config { keyAlias 'xxx

android studio gradle配置

刚刚从eclipse转androd studio遇到遇到了很多坑,今天距帮大家来填填坑 自2013年5月16日,在I/O大会上,谷歌推出新的Android开发环境——Android Studio,并对开发者控制台进行了改进,增加了五个新的功能, google就已经彻底放弃eclipse 转as了! 我们知道as选择了最优秀的构建工具gradle Gradle:Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具.它使用一种基于Groovy的特定领域语言(D

android studio Gradle 配置图文讲解

前边讲解了android studio的基本使用.提到android studio,自然少不了大家关心的gradle.接下来咱们就一起来分析讨论下这个神秘的gradle. 1.构建工具的存在: Gradle和Maven都是项目自动构建工具,编译源代码只是整个过程的一个方面,更重要的是,你要把你的软件发布到生产环境中来产生商业价值,所以,你要运行测试,构建分布.分析代码质量.甚至为不同目标环境提供不同版本,然后部署.整个过程进行自动化操作是很有必要的.于是构建工具应运而生. gradle:一种依赖