开发者社区> 玄学酱> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android Studio安装、配置教程全 - 安卓开发环境的配置手册
Android Studio的安装、配置 本文提供全流程,中文翻译。Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)...
1705 0
Android开发之入口Activity
原文:Android开发之入口Activity Android开发之入口Activity Adnroid App是如何确定入口Activity的? 难道就因为class的类名叫MainActivity,布局文件叫activity_main.xml? 如果这样认为,就大错特错了。
942 0
4.4、Android Studio在命令行运行Gradle
默认情况下,在你的Gradle构建设置中有两种构建类型:一种是为了调试你的应用,debug类型;一种是构建最终的发布版本,release类型。
1155 0
+关注
玄学酱
这个时候,玄酱是不是应该说点什么...
20683
文章
438
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载