官方参考

https://developer.android.com/studio/build/gradle-tips.html

以下都是经过实战总结、多次调整的gradle配置方案,欢迎采用,提意见

一 自动命名打包的不同版本

applicationVariants.all{variant->

variant.outputs.each{output->

if(output.outputFile!=null&&output.outputFile.name.endsWith('.apk')){

if("debug"==variant.buildType.name){

defapkFile=newFile(

output.outputFile.getParent(),

"XXX_App_${variant.versionName}_${buildTime()}_debug.apk")

output.outputFile=apkFile

}elseif("release"==variant.buildType.name){

defapkFile=newFile(

output.outputFile.getParent(),

"XXX_App_${variant.versionName}_release.apk")

output.outputFile=apkFile

}

}

}


if(variant.buildType.name=="debug"){

variant.mergedFlavor.versionName=variant.mergedFlavor.versionName+"."+buildTime();

}


}

defbuildTime(){

defdate=newDate()

defformattedDate=date.format('yyyyMMdd')

returnformattedDate

}


二 统一全module的配置

在build.gradle中改写引用方式

compileSdkVersion rootProject.ext.android["compileSdkVersion"]

在config.gradle中配置如下

ext{

android=[

compileSdkVersion:23,

buildToolsVersion:"25.0.0",

minSdkVersion:15,

targetSdkVersion:22,

minifyEnabled:false,

minifyFile:rootProject.file('proguard-rules.pro'),

]


version=[

"supportVersion":"25.0.0"

]


dependencies=[

"support_v4":"com.android.support:support-v4:${version["supportVersion"]}",

"appcompat-v7":"com.android.support:appcompat-v7:${version["supportVersion"]}",

"recycleview":"com.android.support:recyclerview-v7:${version["supportVersion"]}",

"multidex":"com.android.support:multidex:1.0.1",

"junit":"junit:junit:4.12",


//Baidulocation

"baidu":"libs/BaiduLBS_Android.jar"

]}


三 混合使用productFlavors和 meta

manifestPlaceholders可以在清单文件中配置好,格式如下

<meta-data

android:name="appid"

android:value="12334"/>

同时在build.gradle中引用

productFlavors{


normal{

applicationId"com.xxx"

manifestPlaceholders=[xxx:"0",appid:"xxx",host:"xxx"];

}


productone{

applicationId"com.xxx"

manifestPlaceholders=[xxx:"0",appid:"xxx",host:"xxx"];

}


producttwo{


applicationId"com.xxx"

manifestPlaceholders=[xxx:"0",appid:"xxx",host:"xxx"];

}


}

配置不同product的资源和jni来源

sourceSets{

normal{

jniLibs.srcDirs=['src/normalIn/jniLibsIn/']

assets.srcDirs=['src/normalIn/assetsIn']

}


productone{

jniLibs.srcDirs=['src/normalIn/jniLibsIn/']

assets.srcDirs=['src/normalIn/assetsIn']

}

}

代码中调用方法:

try{

ApplicationInfoinfo=context.getPackageManager().getApplicationInfo(context.getPackageName(),PackageManager.GET_META_DATA);

if(info!=null&&info.metaData!=null){

meta=info.metaData.getInt("appid");

}

}catch(PackageManager.NameNotFoundExceptione){

e.printStackTrace();

}
四 flavor版本判断

//build.gradleinapplicationmodule


android{

productFlavors{

googlePlay{

}

wandoujia{

}

}

}

if(getGradle().getStartParameter().getTaskRequests().toString().contains("GooglePlay")){

//GooglePlay版本才应用该插件

applyplugin:'com.google.gms.google-services'

}