本文是android开发中build.gradle文件中常用配置的总结。有的配置只在特定场景下使用,有的是为了解决某些问题而添加的。所以默认使用AndroidStudio工具新建项目时生成的默认build.gradle文件中的配置。当你遇到问题时,添加一些配置。//applyplugin:'com.android.library'//库配置applyplugin:'com.android.application'//应用配置repositories{//导入AAR文件时需要配置这个,AAR文件放在libs中目录flatDir{dirs'libs'}}android{compileSdkVersion25//Android编译SDK版本,即4.0SDK、5.0SDK等的android.jar文件buildToolsVersion"25.0.2"//使用的版本SDK中的编译工具useLibrary"org.apache.http.legacy"//在6.0上使用Apache的httpClient包,因为谷歌在6.0上去掉了这个http请求库。defaultConfig{applicationId"com.xxx"//AndroidMainfest.xml中可以使用应用的包名${applicationId}指的是这个包名minSdkVersion15//最低兼容版本targetSdkVersion25//目标版本versionCode1//应用版本号versionNameSDK_VERSION//applicationversionnamemultiDexEnabledtrue//开启multi-dex,如果app中代码方法数超过65535testInstrumentationRunner"android.support.test.runner.AndroidJUnitRunner"//android单元测试配置}sourceSets{//指定路径代码和资源,详情请参考http://google.github.io/android-gradle-dsl/2.3/com.android.build.gradle.api.AndroidSourceSet.htmlmain{manifest.srcFile'AndroidManifest.xml'//指定manifest.xml路径java.srcDirs=['src']//java文件的路径,在包名一级,多个目录用逗号分隔,如['src','core']resources.srcDirs=['src']//resource资源的所有目录,注意这里指的是jar文件中包含的一些资源,比如properties文件,不是res资源aidl中的APK。srcDirs=['src']//aidl文件目录renderscript.srcDirs=['src']//renderscript文件路径res.srcDirs=['res']//androidAPK资源路径assets.srcDirs=['assets']//androidapp中的asset目录jniLibs.srcDirs=['libs']//SO库的路径}}lintOptions{checkReleaseBuildsfalse//release编译时禁用lint检查abortOnErrorfalse//错误不会停止打包,除非很严重影响很大disable'MissingTranslation','ExtraTranslation'//禁用lint检查中的一些选项}dexOptions{javaMaxHeapSize"4g"//在编译项目代码时设置最大堆内存大小,否则当项目过大时编译内存溢出}compileOptions{//具体参考这里http://google.github.io/android-gradle-dsl/2.3/com.android.build.gradle.internal.CompileOptions.htmlsourceCompatibilityJavaVersion.VERSION_1_7//设置代码编译的版本,一般在使用JDK1.8的时候,配置这个是为了让编译出来的jar包对o更通用其他的都用,否则编译时容易出错-INF/LICENSE'排除'META-INF/DEPENDENCIES'排除'META-INF/notice.txt'排除'META-INF/license.txt'排除'META-INF/dependencies.txt'排除'META-INF/LGPL2.1'}buildTypes{debug{storeFilefile("debug.keystore")//签名文件的相对路径storePassword"android"//签名密码keyAlias"androiddebugkey"//别名keyPassword"android"//别名密码buildConfigField"boolean","FLAG_DEBUG","true"//在BuildConfig类中自动生成publicstaticfinalbooleanFLAG_DEBUG=true.;codebuildConfigField"String","API_VERSION","\"1\""ndk{abiFilters"armeabi","armeabi-v7a"//只保留这些CPU架构的SO库,需要更高版本的gradle支持}//jniDebuggabletrue//启用JNIdebug,一般很少用到。不建议开启该选项,会影响java代码的调试速度}release{buildConfigField"boolean","FLAG_DEBUG","false"buildConfigField"String","API_VERSION","\"1\""minifyEnabledtrue//混淆资源时去除代码中无用的内容shrinkResourcetrue//混淆资源时去除无用的内容,对于res/目录下的内容,不压缩图片大小proguardFilesgetDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'//配置混淆文件-v7a"//只保留这些CPU架构的SO库,需要更高版本的gradle支持}}}}dependencies{compilefileTree(include:['*.jar'],dir:'libs')//导入libs目录下的jar包androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2',{//排除组内模块,注意组和模块namecom.android.support:support-annotationsexcludegroup:'com.android.support',module:'support-annotations'})compile'c??om.android.support:appcompat-v7:25.1.0'//使用google的appcompat-v7packagetestCompile'junit:junit:4.12'//引入junit单元测试compile'c??om.android.support:multidex:1.0.0'//添加multidex库compilefiles('libs/gson.jar')//参考libs目录中的gson.jar包torycompile(name:'HMS-SDK-2.4.0.300',ext:'aar')//引入HMS-SDK-2.4.0.300.aar文件,同样需要参考文件头的配置compile('com.facebook.fresco:fresco:1.0.0'){excludemodule:'support-v4'}//引入fresco库,但不要使用其中引用的support-v4库,否则会导致重复导入和编译错误。重复提供的文件树(目录:'compilelibs',在include:['*.jar'])//引入compilelibs目录下的jar文件参与编译,但不要将这些包的代码放入APK、jar或AAR中}//使用jar任务生成jar文件,依赖于assembleReleasetasktaskbuildJar(type:Jar,dependsOn:['assembleRelease']){destinationDir=file('build/outputs/jar/')appendix=""baseName=""version=SDK_VERSION//manifest信息defmap=['Version':SDK_VERSION,'Gradle':project.gradle.gradleVersion,'Vendor':'szcomtop.com','Date':newDate().getDateTimeString()]manifest.attributes(map)//from('build/intermediates/classes/release/')from(project.zipTree('build/intermediates/transforms/proguard/release/jars/3/3/main.jar'))exclude('**/BuildConfig.class')exclude('**/BuildConfig\$*.class')exclude('**/R.class')exclude('**/R\$*.class')include('**/*.class')}//使用Copy任务复制内容taskcopySDK(type:Copy,dependsOn:['buildJar']){from('build/outputs/jar')into('../app/libs/')include("*.jar")}use方法会继续往上日期。随着Androidgradle工具的升级,部分配置可能会发生变化。比如ndk.abiFilters只能在高版本的gradle工具中使用。如何升级gradle版本也可能会出现编译失败等问题,需要很长时间才能解决,请慎重。关于一些配置的使用,下面给出其中一个例子,其他类似。比如你怎么知道有这个compileOptions配置?这个配置下可以设置什么?如何使用这些设置?可以给什么值?compileOptions{sourceCompatibilityJavaVersion.VERSION_1_7//设置代码编译的版本,一般在使用JDK1.8时,配置这个让编译出来的jar包更通用,方便别人使用链接里有个DSL,这个DSL是什么?DSL是GradleBuildLanguage的缩写。哈哈,开玩笑的,是DomainSpecificLanguage的缩写,Domain可以理解为Project。题外话,继续。compileOptions示例打开androidgradle工具官方文档页面,会看到如下图所示的版本选择页面:该版本对应androidstudio项目根目录build.gradle文件中的gradle版本.同时发现这个版本会对应androidstudio的版本。如下图:点击当前版本2.2的链接,进入如下界面,如下图,在左侧找到compileOptions,点击这个链接(熟悉这个官方文档,可以开始从左边的Home项:再次点击上图中红框标记的链接,会跳转到下图所示的配置说明。这种跳转方式有点类似于JavaAPI,不过此时看到的应该是详细的,结果却不是:如果需要进一步查看详细信息,只能点击红框标记的链接在上图中。进入后,你会发现熟悉的内容,如下图:是不是有一种久违的感觉,终于看到真相了?还不错的一步。compileOptions中可用的选项和含义上面已经写的很清楚了。然后点击sourceCompatibility跳转到下图所示的内容:从上面可以看到sourceCompatibility可以取什么值,最后找到结果。OK,compileOptions的例子到此结束,其他的配置也可以用同样的方法。gradle官方文档也差不多,剩下的就是熟读了。
