android gradle 设置,Android gradle常用配置总结

本文是针对android开发中的 build.gradle 文件中的常用配置总结,一些配置是在特定的场景下才使用,一些是为了解决一些问题才加上。所以默认还是使用在Android Studio工具中新建项目时生成的默认的 build.gradle 文件中的配置,等遇到了问题,再来加一些配置。

// apply plugin:'com.android.library'// 库配置apply plugin:'com.android.application'// 应用程序配置repositories { // 引入AAR文件时,需要配置这个,AAR文件放在libs目录中

flatDir {

dirs 'libs'

}

}

android {

compileSdkVersion 25 // android编译SDK的版本,即4.0SDK、5.0SDK等的android.jar文件

buildToolsVersion "25.0.2"// 使用SDK中编译工具的版本

useLibrary "org.apache.http.legacy"// 在6.0上使用apache的httpClient包,原因是google在6.0上去掉了这个http请求库

defaultConfig {

applicationId "com.xxx"// 应用的包名可以在AndroidMainfest.xml中使用${applicationId}的方式引用这个包名

minSdkVersion 15 // 最小兼容版本

targetSdkVersion 25 // 目标版本

versionCode 1 // 应用的版本号

versionName SDK_VERSION // 应用的版本名称

multiDexEnabled true// 启用多dex,如果app中的代码方法数超过65535

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"// android单元测试配置

}

sourceSets { // 指定代码及资源的路径,具体可以参考这里http://google.github.io/android-gradle-dsl/2.3/com.android.build.gradle.api.AndroidSourceSet.html

main {

manifest.srcFile 'AndroidManifest.xml'// 指定manifest.xml路径

java.srcDirs = ['src'] // java文件的路径,包名的上一层,多个目录使用逗号分隔,如['src','core']

resources.srcDirs = ['src'] // resource资源所有的目录,注意这里是指jar文件中包含的一些资源,如properties文件,而不是APK中的res资源

aidl.srcDirs = ['src'] // aidl文件的目录

renderscript.srcDirs = ['src'] // renderscript文件的路径

res.srcDirs = ['res'] // android APK中的资源路径

assets.srcDirs = ['assets'] // android app中的asset目录

jniLibs.srcDirs = ['libs'] // SO库的路径

}

}

lintOptions {

checkReleaseBuilds false// release编译时禁用lint检查

abortOnError false// 报错不会停止打包,除非很严重的很影响

disable 'MissingTranslation','ExtraTranslation'// 禁用lint检查中的一些选项

}

dexOptions {

javaMaxHeapSize "4g"// 设置编译项目代码时最在的堆内存大小,否则项目过大时,编译内存溢出

}

compileOptions { // 具体参考这里http://google.github.io/android-gradle-dsl/2.3/com.android.build.gradle.internal.CompileOptions.html

sourceCompatibility JavaVersion.VERSION_1_7 // 设置代码编译的版本,一般是在使用JDK1.8时,配置这个,使编译出来的jar包让别人使用时更通用

targetCompatibility JavaVersion.VERSION_1_7

}

packagingOptions {

exclude 'META-INF/DEPENDENCIES.txt'// 排除这些第三方jar中的声明文件,否则编译时容易导致报错

exclude 'META-INF/LICENSE.txt'

exclude 'META-INF/NOTICE.txt'

exclude 'META-INF/NOTICE'

exclude 'META-INF/LICENSE'

exclude 'META-INF/DEPENDENCIES'

exclude 'META-INF/notice.txt'

exclude 'META-INF/license.txt'

exclude 'META-INF/dependencies.txt'

exclude 'META-INF/LGPL2.1'

}

buildTypes {

debug {             storeFile file("debug.keystore") // 签名文件相对路径

storePassword "android"// 签名的密码

keyAlias "androiddebugkey"// 别名

keyPassword "android"// 别名密码

buildConfigField "boolean","FLAG_DEBUG","true"// 在BuildConfig.的类中自动生成publicstaticfinal boolean FLAG_DEBUG =true;代码

buildConfigField "String","API_VERSION","\"1\""

ndk {

abiFilters "armeabi","armeabi-v7a"// 只保留这几种CPU架构的SO库,需要高版本的gradle才支持

}

// jniDebuggable true// 启用JNI debug,一般很少使用,不建议开这个选项,会影响java代码的debug速度

}

release {

buildConfigField "boolean","FLAG_DEBUG","false"

buildConfigField "String","API_VERSION","\"1\""

minifyEnabled true// 在混淆时去除代码中无用的内容

shrinkResources true// 在混淆时去除无用的资源,针对res/目录中的内容,不用压缩图片的大小

proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'// 配置混淆文件

ndk {

abiFilters "armeabi","armeabi-v7a"// 只保留这几种CPU架构的SO库,需要高版本的gradle才支持

}

}

}

}

dependencies {    compile fileTree(include: ['*.jar'], dir:'libs') // 导入libs目录中的所有jar包

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { // 排除group中的modle,注意group和module名称com.android.support:support-annotations

exclude group:'com.android.support', module:'support-annotations'

})

compile 'com.android.support:appcompat-v7:25.1.0'// 使用google的appcompat-v7包

testCompile 'junit:junit:4.12'// 引入junit单元测试

compile 'com.android.support:multidex:1.0.0'// 加入加载多dex库

compile files('libs/gson.jar') // 引用libs目录中的gson.jar包

compile(name:'HMS-SDK-2.4.0.300', ext:'aar') // 引入HMS-SDK-2.4.0.300.aar文件,同时还需要参考文件头部分的配置

compile('com.facebook.fresco:fresco:1.0.0') { exclude module:'support-v4'} // 引入fresco库,但不使用其中引用的support-v4库,否则导致重复引入,编译报错duplicate

provided fileTree(dir: 'compilelibs', include: ['*.jar']) // 引入compilelibs目录下面的jar文件参与编译,但不将这些包的代码打入APK、jar或AAR中。}// 使用jar任务生成jar文件,依赖assembleRelease的tasktask buildJar(type: Jar, dependsOn: ['assembleRelease']) {

destinationDir = file('build/outputs/jar/')

appendix = ""

baseName = ""

version = SDK_VERSION    // manifest信息

def map = ['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任务复制内容task copySDK(type: Copy, dependsOn: ['buildJar']) {

from('build/outputs/jar')

into('../app/libs/')

include("*.jar")

}

使用方法

本方会持续更新,随着android的gradle工具的升级,可能有些配置会发生变化。比如 ndk.abiFilters 需要在高版本的gradle工具中才能使用,如何升级gradle版本,也可能会带来编译不通过等问题,需要耗费较长时间去解决,所以请慎重。

关于一些配置的用法,下面举其中一个例子,其他雷同。

比如怎么知道有这个 compileOptions 配置?这个配置下面的又有哪些可以设置?这些设置怎么去使用?能给哪些值?

compileOptions {

sourceCompatibility JavaVersion.VERSION_1_7 // 设置代码编译的版本,一般是在使用JDK1.8时,配置这个,使编译出来的jar包让别人使用时更通用

targetCompatibility JavaVersion.VERSION_1_7

}

从官网入手

android官方定义的gradle工具的使用说明文档点 这里 ,gradle官方的说明文档点 这里 。

点开链接中有个 DSL ,这个 DSL 是啥? DSL 就是 Gradle Build Language 的缩写。哈哈,开个玩笑,是 Domain Specific Language 的缩写, Domain 可以理解为 Project 。

跑题了,继续。

compileOptions示例

打开android gradle工具的官方说明文档页面会看到如下图所示的版本选择页面:

8cecf03a412882e03ef5001d202f9f4b.png

这个版本是与 android studio 项目根目录下的 build.gradle 文件中的gradle版本是对应起来的。同时发现,这个版本会与 android studio 的版本对应。如下图所示:

b78cdf07b0ac014978a8c776689c1363.png

点击当前的2.2版本的链接,进入到如下界面,如下图所示,在左侧找到 compileOptions ,并点击这个链接(熟悉这个官方文档可以从左侧的Home项开始):

8e496de8eacadb1f0840c7afaf5b869f.png

再点击上图中红色框框标记的链接,就会跳转到如下图所示位置的配置说明,这种跳转的方式有点类似Java的API,只不过这个时候看到的应该是详细,结果却没有:

1530d3174047425b707ceb909a80ec1d.png

需要进一步查看详细,只能是点击上图红色框框标记的链接,进去之后就会发现熟悉的内容了,如下图所示:

6d9b12c68f1980357d76dc34b8d0847f.png

有没有一种久违的感觉,终于快看到真相了吧?还差一步。compileOptions中可用的选项及含义已经在上面写的很清楚了。再点击 sourceCompatibility 会跳到如下图所示内容:

21c921e09ff694a42a0c0a66c232ae92.png

可以从上面看到 sourceCompatibility 可以取哪些值,终于找到结果了。

OK, compileOptions 示例就到这里,其它的配置使用也可以使用相同的方法,gradle官方使用文档也是类似,剩下的只是熟悉的问题了。

【编辑推荐】

【责任编辑:枯木 TEL:(010)68476606】

点赞 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值