合理利用gradle的占位符功能

1.gradle中可以声明字符串或者其他变量,然后再buildType中使用buildConfigField 来往BuildConfig文件中插入一个字符类型的常量,如下

  先声明

def umengDebugKey = 'xxxxxxxxxxxxxx'
然后是使用
android {
.....
buildTypes {
debug {
applicationIdSuffix '.dev'
buildConfigField "String", "UMENG_KEY", ""${umengDebugKey}""
}
release {
minifyEnabled true
shrinkResources true
}
}
....
}

编译之后你就会发现在buildConfig文件中多出来一行,

public static final String UMENG_KEY = "559a2ffa67e58e516a001d36";

而buildConfig文件是个java文件,可以在任何一个类中访问的。
另外,这个地方可以插入的除了string 还可以是其他基本数据类型,int等都是可以的哦!

2.除了可以在buildconfig文件中插入字段外,我们还可以在res文件中插入内容,方式和上面的基本类似
  debug {
          applicationIdSuffix ".debug"
          buildConfigField "String", "API_URL",""http://test.example.com/api""
          buildConfigField "boolean", "LOG_HTTP_CALLS", "true"
          resValue "string", "app_name", "Example DEBUG"
      }
然后就可以直接通过R.string.app_name访问该字段了。
另外,通过试验发现,如果在主工程和lib工程中同时定义该字段的话,lib中访问到的也是主工程的该字段。
这样可以实现,从主工程传递字符串到lib工程中。

3.
build.gradle文件中有applicationid、version、versioncode等的属性,而这些都是可以在manifest文件中直接访问的,访问的方式就是

<uses-permission android:name="${applicationId}.permission.MIPUSH_RECEIVE"/>

这种方式可以非常方便的实现有些第三方库必须绑定包名的情况,然后你可以将第三方库封装到lib中,然后在lib的manifest文件中,通过这种方式定义好包名,最终生成的包的manifest中
这个字段就是主工程的applicationid了。
原文地址:https://www.cnblogs.com/yiludugufei/p/6028203.html