Android gradle常用配置总结

简介:

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

 
 
  1. // apply plugin: 'com.android.library' // 库配置apply plugin: 'com.android.application' // 应用程序配置repositories { // 引入AAR文件时,需要配置这个,AAR文件放在libs目录中 
  2.     flatDir { 
  3.         dirs 'libs' 
  4.     } 
  5.  
  6. android { 
  7.     compileSdkVersion 25 // android编译SDK的版本,即4.0SDK、5.0SDK等的android.jar文件 
  8.     buildToolsVersion "25.0.2" // 使用SDK中编译工具的版本 
  9.     useLibrary "org.apache.http.legacy" // 在6.0上使用apache的httpClient包,原因是google在6.0上去掉了这个http请求库 
  10.  
  11.     defaultConfig { 
  12.         applicationId "com.xxx" // 应用的包名可以在AndroidMainfest.xml中使用${applicationId}的方式引用这个包名 
  13.         minSdkVersion 15 // 最小兼容版本 
  14.         targetSdkVersion 25 // 目标版本 
  15.         versionCode 1 // 应用的版本号 
  16.         versionName SDK_VERSION // 应用的版本名称 
  17.         multiDexEnabled true // 启用多dex,如果app中的代码方法数超过65535 
  18.  
  19.         testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" // android单元测试配置 
  20.  
  21.     } 
  22.  
  23.    sourceSets { // 指定代码及资源的路径,具体可以参考这里http://google.github.io/android-gradle-dsl/2.3/com.android.build.gradle.api.AndroidSourceSet.html 
  24.         main { 
  25.             manifest.srcFile 'AndroidManifest.xml' // 指定manifest.xml路径 
  26.             java.srcDirs = ['src'] // java文件的路径,包名的上一层,多个目录使用逗号分隔,如['src''core'
  27.             resources.srcDirs = ['src'] // resource资源所有的目录,注意这里是指jar文件中包含的一些资源,如properties文件,而不是APK中的res资源 
  28.             aidl.srcDirs = ['src'] // aidl文件的目录 
  29.             renderscript.srcDirs = ['src'] // renderscript文件的路径 
  30.             res.srcDirs = ['res'] // android APK中的资源路径 
  31.             assets.srcDirs = ['assets'] // android app中的asset目录 
  32.             jniLibs.srcDirs = ['libs'] // SO库的路径 
  33.         } 
  34.     } 
  35.  
  36.     lintOptions { 
  37.         checkReleaseBuilds false // release编译时禁用lint检查 
  38.         abortOnError false // 报错不会停止打包,除非很严重的很影响 
  39.         disable 'MissingTranslation''ExtraTranslation' // 禁用lint检查中的一些选项 
  40.     } 
  41.  
  42.     dexOptions { 
  43.         javaMaxHeapSize "4g" // 设置编译项目代码时最在的堆内存大小,否则项目过大时,编译内存溢出 
  44.     } 
  45.  
  46.     compileOptions { // 具体参考这里http://google.github.io/android-gradle-dsl/2.3/com.android.build.gradle.internal.CompileOptions.html 
  47.         sourceCompatibility JavaVersion.VERSION_1_7 // 设置代码编译的版本,一般是在使用JDK1.8时,配置这个,使编译出来的jar包让别人使用时更通用 
  48.         targetCompatibility JavaVersion.VERSION_1_7 
  49.     } 
  50.  
  51.     packagingOptions { 
  52.         exclude 'META-INF/DEPENDENCIES.txt' // 排除这些第三方jar中的声明文件,否则编译时容易导致报错 
  53.         exclude 'META-INF/LICENSE.txt' 
  54.         exclude 'META-INF/NOTICE.txt' 
  55.         exclude 'META-INF/NOTICE' 
  56.         exclude 'META-INF/LICENSE' 
  57.         exclude 'META-INF/DEPENDENCIES' 
  58.         exclude 'META-INF/notice.txt' 
  59.         exclude 'META-INF/license.txt' 
  60.         exclude 'META-INF/dependencies.txt' 
  61.         exclude 'META-INF/LGPL2.1' 
  62.     } 
  63.  
  64.     buildTypes { 
  65.          debug {             storeFile file("debug.keystore") // 签名文件相对路径 
  66.            storePassword "android" // 签名的密码 
  67.            keyAlias "androiddebugkey" // 别名 
  68.            keyPassword "android" // 别名密码 
  69.  
  70.            buildConfigField "boolean""FLAG_DEBUG""true" // 在BuildConfig.的类中自动生成public static final boolean FLAG_DEBUG = true;代码 
  71.            buildConfigField "String""API_VERSION""\"1\"" 
  72.             
  73.            ndk { 
  74.             abiFilters "armeabi""armeabi-v7a" // 只保留这几种CPU架构的SO库,需要高版本的gradle才支持 
  75.            }            
  76.            // jniDebuggable true // 启用JNI debug,一般很少使用,不建议开这个选项,会影响java代码的debug速度 
  77.         } 
  78.  
  79.         release { 
  80.             buildConfigField "boolean""FLAG_DEBUG""false" 
  81.             buildConfigField "String""API_VERSION""\"1\"" 
  82.             minifyEnabled true // 在混淆时去除代码中无用的内容 
  83.             shrinkResources true // 在混淆时去除无用的资源,针对res/目录中的内容,不用压缩图片的大小 
  84.             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // 配置混淆文件 
  85.              
  86.             ndk { 
  87.                 abiFilters "armeabi""armeabi-v7a" // 只保留这几种CPU架构的SO库,需要高版本的gradle才支持 
  88.             } 
  89.         } 
  90.     } 
  91.  
  92. dependencies {    compile fileTree(include: ['*.jar'], dir: 'libs') // 导入libs目录中的所有jar包 
  93.     androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { // 排除group中的modle,注意group和module名称com.android.support:support-annotations 
  94.         exclude group'com.android.support', module: 'support-annotations' 
  95.     }) 
  96.     compile 'com.android.support:appcompat-v7:25.1.0' // 使用google的appcompat-v7包 
  97.     testCompile 'junit:junit:4.12' // 引入junit单元测试 
  98.  
  99.     compile 'com.android.support:multidex:1.0.0' // 加入加载多dex库 
  100.     compile files('libs/gson.jar') // 引用libs目录中的gson.jar包 
  101.     compile(name'HMS-SDK-2.4.0.300', ext: 'aar') // 引入HMS-SDK-2.4.0.300.aar文件,同时还需要参考文件头部分的配置 
  102.     compile('com.facebook.fresco:fresco:1.0.0') { exclude module: 'support-v4' } // 引入fresco库,但不使用其中引用的support-v4库,否则导致重复引入,编译报错duplicate 
  103.     provided fileTree(dir: 'compilelibs', include: ['*.jar']) // 引入compilelibs目录下面的jar文件参与编译,但不将这些包的代码打入APK、jar或AAR中。}// 使用jar任务生成jar文件,依赖assembleRelease的tasktask buildJar(type: Jar, dependsOn: ['assembleRelease']) { 
  104.     destinationDir = file('build/outputs/jar/'
  105.     appendix = "" 
  106.     baseName = "" 
  107.     version = SDK_VERSION    // manifest信息 
  108.     def map = ['Version': SDK_VERSION,               'Gradle': project.gradle.gradleVersion,               'Vendor''szcomtop.com',               'Date': new Date().getDateTimeString() 
  109.         ] 
  110.     manifest.attributes(map)// from'build/intermediates/classes/release/'
  111.     from(project.zipTree( 'build/intermediates/transforms/proguard/release/jars/3/3/main.jar')) 
  112.     exclude('**/BuildConfig.class'
  113.     exclude('**/BuildConfig\$*.class'
  114.     exclude('**/R.class'
  115.     exclude('**/R\$*.class'
  116.     include('**/*.class'
  117. }// 使用Copy任务复制内容task copySDK(type: Copy, dependsOn: ['buildJar']) { 
  118.     from('build/outputs/jar'
  119.     into('../app/libs/'
  120.     include("*.jar"

使用方法

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

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

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

 
 
  1. compileOptions { 
  2.  
  3. sourceCompatibility JavaVersion.VERSION_1_7 // 设置代码编译的版本,一般是在使用JDK1.8时,配置这个,使编译出来的jar包让别人使用时更通用 
  4.  
  5. targetCompatibility JavaVersion.VERSION_1_7 
  6.  
  7.  

从官网入手

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

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

跑题了,继续。

compileOptions示例

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

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

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

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

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

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

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

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






本文作者:佚名
来源:51CTO

目录
相关文章
|
6月前
|
SQL 人工智能 移动开发
Android Studio插件版本与Gradle 版本对应关系
Android Studio插件版本与Gradle 版本对应关系
Android Studio插件版本与Gradle 版本对应关系
|
6月前
|
Java 开发工具 Android开发
Cocos Creator 2.4.6 Android Gradle 版本升级为 6.5.1(插件4.1.0)
Cocos Creator 2.4.6 Android Gradle 版本升级为 6.5.1(插件4.1.0)
184 1
|
7月前
|
开发工具 Android开发
Mac 安卓(Android) 配置adb路径
Mac 安卓(Android) 配置adb路径
211 0
|
7月前
|
存储 Java Android开发
Android 开发 - 充分利用Gradle
Android 开发 - 充分利用Gradle
112 2
|
4月前
|
Java 开发工具 Android开发
OpenCV(一):Android studio jni配置OpenCV(亲测有效,保姆级)
OpenCV(一):Android studio jni配置OpenCV(亲测有效,保姆级)
158 0
|
8月前
|
IDE Java 开发工具
Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8的解决方案
Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8的解决方案
|
4月前
|
开发工具 Android开发 开发者
Android 项目编译 Gradle 配置说明
Android 项目编译 Gradle 配置说明
144 0
|
5月前
|
Java Maven Android开发
android之gradle配置仓库与引入依赖
android之gradle配置仓库与引入依赖
231 0
|
6月前
|
XML Java 开发工具
Android lint配置及使用
Android lint配置及使用