Android Gradle 使用技巧

2017-07-19  本文已影响164人  JustCode

总结一下gradle在项目中的一些使用技巧

  1. 全局的配置信息
    在project目录下创建一个config.gradle文件,将每个module相同的配置信息都可以在此文件中设置全局变量,例如:

    ext{ // gradle的全局属性必须放在ext闭包中
         android = [
             compileSdkVersion: 25,
             buildToolsVersion: "26.0.0",
             minSdkVersion    : 15,
             targetSdkVersion : 25,
             versionCode      : 1,
             versionName      : "1.0"
         ]
    
         dependencies = [
               appcompatV7      : 'com.android.support:appcompat-v7:25.+',
               constraintLayout : 'com.android.support.constraint:constraint-layout:1.0.2',
               junit            : 'junit:junit:4.12'
         ]
    }
    

然后需要在project目录下的build.gradle中通过apply from: 'config.gradle'引入全局属性文件config.gradle
在module中的build.gradle调用如下:

   dependencies { 
                compile rootProject.ext.dependencies.appcompatV7      
                compile rootProject.ext.dependencies.constraintLayout
                testCompile rootProject.ext.dependencies.junit
   }

在module中的build.gradle调用如下:

    signingConfigs {
        release {
               storeFile file(STORE_FILE)
               storePassword STORE_PWD
               keyAlias KEY_ALIAS
               keyPassword KEY_PWD
       }
  }

还可以将gradle.properties文件设置的变量供java文件以及`xml``文件调用,比如:

  buildTypes {
        release {
              minifyEnabled true
              shrinkResources true
              signingConfig signingConfigs.release
              proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
              buildConfigField("String", "STORE_PWD", "\"${STORE_PWD}\"") // 往release版本中BuildConfig里面设置值
              resValue("string", "KEY_PWD", "${KEY_PWD}") // 往release版本资源文件中设置值
        }
        debug {
                buildConfigField("String", "STORE_PWD", "\"${STORE_PWD}\"") // 往debug版本BuildConfig里面设置值
                resValue("string", "KEY_PWD", "${KEY_PWD}") // 往debug版本资源文件中设置值
        }
   }
   //  然后就可以在java代码中,通过BuildConfig.XXX进行调用;在layout_xml中直接可以通过android:text="@string/KEY_PWD"进行调用
   // 其中,buildConfigField定义的方式是
   // buildConfigField 类型,变量名,值
   // resValue定义的方式是
   // resValue XML中的类型,变量名,值
   // 对于类型的设置,buildConfigField必须跟java代码中是相同的,比如String 就不能写成string,因为是String 类型,值需要打上双引号;同样resValue也需要对应

实际开发中,debug版本和release版本的接口地址是不同,通过这种方式去设置,就不需要在每次打不同版本包的时候去注释代码了。

然后在module下的build.gradle文件中进行设置,可以设置在defaultConfig闭包中,也可以设置在buildTypes下不同版本的闭包中,设置在不同版本的闭包中,那么就可以实现为不同版本的app设置不同的名称了,app log 同样可以通过此种方式来进行配置:

// defaultConfig中设置           
defaultConfig { 
     // ... 省略其他配置
     manifestPlaceholders = [app_label:"@string/app_name"]
}

// buildTypes中设置
 buildTypes {
      release {
           // ... 省略其他配置
        manifestPlaceholders = [app_label:"@string/app_name_release"]
    }
    debug {
         // ... 省略其他配置
        manifestPlaceholders = [app_label:"@string/app_name_debug"]
    }
}

除了可以给不同版本app设置不同名称已经图片之外,还有一种重要的用法就是打渠道包。

 android {
   productFlavors {
    dev{
        manifestPlaceholders = [channel:"dev"]
     }
    official{
        manifestPlaceholders = [channel:"official"]
    }
    // ... ...
    wandoujia{
        manifestPlaceholders = [channel:"wandoujia"]
    }
    xiaomi{
        manifestPlaceholders = [channel:"xiaomi"]
    }
    "360"{  // flavor名如果是数字开头,必须用引号引起来。
        manifestPlaceholders = [channel:"360"]
    }
}
上一篇下一篇

猜你喜欢

热点阅读