总结一下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   }
  • 调用gradle.properties文件中变量
    类似签名信息不应该直接暴露在build.gradle文件中,将它保存在gradle.properties文件中是一种不错的做法。在gradle.properties中添加:

       STORE_FILE = /xx/app_key.jks   // 这边不能打引号   STORE_PWD = xxx   KEY_ALIAS = xxx   KEY_PWD = xxx

在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版本的接口地址是不同,通过这种方式去设置,就不需要在每次打不同版本包的时候去注释代码了。

  • 调用local.properties文件中变量
    local.properties文件中一般存储着本地的sdk、ndk的路径信息,当然在此文件中同样可以配置变量,比如签名信息,只不过这是本地的,一般不用push到远程仓库中。
    local.properties文件中添加变量跟gradle.properties没区别,区别在于读取:

     Properties properties = new Properties(); properties.load(new FileInputStream(file("../local.properties")))  // 需要显示指明文件路径 // 并且当前路径是在app目录下,所以获取project目录下的`local.properties`,应该是../local.properties buildTypes {  debug {      buildConfigField("String", "URL", "\"${properties['URL']}\"")      resValue("string", "url", "${properties['URL']}")  }}

    其实也可以自定义properties文件,访问形式跟访问local.properties相同,只需要更改文件路径就好。

  • 替换AndroidManifest中的占位符
    可以在AndroidManifest文件中设置一个占位符,类似${app_label}

                                                        

然后在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"]    }}
  • 自定义导出apk名称

     android {     applicationVariants.all { variant ->            variant.outputs.each { output ->               output.outputFile = new File(                   output.outputFile.parent + "/${variant.buildType.name}",              "xx-${variant.buildType.name}-${variant.versionName}-${variant.productFlavors[0].name}.apk".toLowerCase())            }    }}

更多相关文章

  1. 解决升级到Android(安卓)Studio 3 Beta版本编译异常
  2. android 指定打包资源文件的方法
  3. Android培训班(42)
  4. Android(java)学习笔记124:Android权限大全
  5. 以Android(安卓)Studio讲解Gradle在Android项目中的应用(一)
  6. 关于使用Android(安卓)Studio时的Gradle报错解决记录
  7. Android(安卓)启动模式
  8. Android(安卓)RadioGroup设置单选效果
  9. 用python开发android应用 【转载】

随机推荐

  1. Android菜单详解(一)——理解android中的Me
  2. android https之一
  3. Android菜单详解(一)——理解android中的Me
  4. Android(安卓)SDK Android(安卓)Studio A
  5. Android(安卓)Studio for mac开发错误
  6. Android(安卓)ScrollView去掉滚动条及Scr
  7. android - seekbar 宽度全屏的坑
  8. Android(安卓)控件布局常用属性
  9. Android如日中天,学会android,高薪不再愁
  10. android demo