Android中的Gradle——app/build.gradle

升级了Android Studio 3.0后 , 首次创建项目就报错了 , 经过一番折腾总算是解决了 , 但是仔细想想 , 还是感觉自己的gradle相比于java来说还是太弱了.这篇博客也希望能提醒一下各位 , 工欲善其事,必先利其器.

首先是我解决今天遇到问题的解决方法

首先查看对应的gradle版本
  • 手动下载Gradle . 即根目录->gradle->wrapper->gradle-wrapper.properties文件中 , 相对应的gradle版本 , 如图所示
    笔者这里是4-1-all版本的

其实对于这个问题 , 网上有很多解决方案 , 比如说手动修改对应的gradle版本为自己已有的版本。已有版本可以在如图所示的文件中找到,一般来说 , 只需要输入已经完整下载的gradle包即可(完整下载指的是,打开文件后有个.ok的文件,文件大小为0,这个文件是一个标志文件,标志着这个文件夹下的东西已经完全下载)


本地已下载的gradle

但是我们今天不能这样做,如果你修改了gradle的版本,会在gradle中报一大堆错误,错误稍后再谈。所以还是科学上网,或者是手动下载新版本吧

修改了gradle版本带来的错误

修改了gradle的文件时,会提示app/build.gradle文件中大量标红 , 细心的老哥们会发现 , 包引入的方式居然发生了改变:



这里从compile变成了implementation这种新的方式 , 因为这里是使用默认的gradle版本来生成的语句,手动修改版本必然会出现问题。可以自己手动修改过来就好了,如果直接用新版本的gradle这里不用理会。至于为什么会出现这种改变,这里就不再讨论了

仍然报错?

这就是平时的习惯问题了,检查设置中gradle是不是设置为离线模式了。在默认新版本的gradle下回引入新版本的包,比如v7包,离线模式时候,在本地当然找不到这个包。如果你把引用的包改掉也可以(会有不少需要改),但这里建议你关闭离线模式,让gradle去下载新的包就行啦

其实说到底,还是对gradle不够了解。所以接下来就来总结一下Gradle文件中,各个字段的含义以及用法,小技巧在另一篇博客中收集(待更新)。

app/build.gradle文件

1. android->defaultConfig 默认偏好设置

动态的在build时配置AndroidManifest.xml里的项目,defaultConfig里的配置可以覆盖manifest里的配置。

  • 在build.gradle文件生成一个applicationId,对应的属性值是填写的package name。applicationId表示真正的包名,而package不再被认为是包名,因为应用程序被打包成apk文件的时候,原先在manifest声明的package被applicationId代替。也刚好说明为什么应用程序安装到手机后,手机上显示的是applicationId,而不是显示package,同时如果想在应用程序中接入第三方的API,填写的包名也必须是applicationId。
  • versionName,versionCode: 版本名和版本号
  • minSdkVersion,targetSdkVersion: 支持的安卓设备版本的区间
  • testInstrumentationRunner:允许自动化测试
  • ndk { // 设置支持的SO库架构
    abiFilters 'armeabi', 'x86', 'x86','x86_64', 'armeabi-v7a', 'arm64- v8a'
    }
  • buildConfigField:自定义字段,方便调试时打log,如
  buildConfigField("int", "SLEEP_TIME", "5000")
  public static final boolean DEBUG = BuildConfig.API_ENV;

2. android-> signingConfigs 自定义签名设置

(懒得配置了,个人喜欢手动签名)

3. android->buildTypes 构建类型

每一个APP至少包含debug和release两种构建类型,debug定义APP的调试版本

  • debug模式的几个特点:
    支持断点调试和log信息打印,debuggable属性值为true
    使用系统默认的密钥库签署apk文件
    没有对apk文件进行代码和资源文件的优化(包括文件压缩、冗余文件删除)
    没有对代码进行混淆
  • release定义APP的发布版本:
    不支持断点调试,debuggable默认为false
    没有压缩类文件代码,minifyEnabled,默认为false
    没有压缩资源文件,shrinkResources,默认为false
    没有指定自定义签名文件,默认使用系统的密钥库签署apk
    • minifyEnable定义是否压缩代码,false表示不压缩
    • proguardFiles定义混淆代码的默认混淆规则:
      proguard-android.txt表示系统自带的混淆规则,
      proguard-rules.pro位于当前module根目录下,用于定义开发者自己的混淆规则。


      image.png

      这里贴上自己的代码:

buildTypes {
        release {
            //混淆配置打开时,才会自动上传符号表到 BugHD
            minifyEnabled false
            //对齐优化设置为true,否则找不到该task (默认不写也是true)
            zipAlignEnabled true
            //配置正式版签名证书信息,否则上传release版本是unsigned_apk,导致无法安装。
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            shrinkResources true //移除无用的资源文件
        }
        debug {
            minifyEnabled false// 是否混淆
            shrinkResources true //移除无用的资源文件
        }
    }

4. android->dexOptions DEX文件构建属性配置(加快构建速度)

Android Studio在每次构建的时候,都感觉花好长时间,这时候我们可以配置一下dexOption加快构建速度

  • preDexLibraries 声明是否预先编译依赖库,实质是通过延时清除已生成的依赖库的构建文件,达到加快速度的目的。
  • maxProcessCount 设置进程运行过程中可以使用的最大线程数。默认值为4。
  • javaMaxHeapSize 设置DEX编译器的最大堆大小,堆或者栈都是用于存放暂时不用的垃圾,当内存不足时,垃圾回收机制会清除过时的缓存,堆大小决定垃圾清除的频率,影响着构建的速度
dexOptions {
       incremental true //使用增量构建
       javaMaxHeapSize "4g" //设置堆内存
       jumboMode = true //大工程模式
       maxProcessCount=8
    }

以上的配置,在引入MultiDex的时候,有几率会在debug模式下报错,但是在release时正常,所以在引入MultiDex的情况下,debug时手动注释掉,release时放开

5. android->splits 将一个apk拆分成多个相关配置(拆分依据:屏幕密度、系统架构)

(姑且没用过)

6. dependencies 引入的依赖包

dependencies {
    compile project(':third-party:FilePicker')
    compile files('libs/zxing.jar')
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:25.1.0'
    compile group: 'com.android.support', name: 'appcompat-v7', version: '25.1.0'
}

以上的依赖分别对应:

  1. 模块依赖项(工程依赖,module依赖)
    声明了一个名为third-party/FilePicker的本地 Android 库模块作为依赖项,并要求构建系统在构建应用时编译并包含该本地模块。


    被依赖的项目位置
  2. 本地二进制依赖项

  3. 本地二进制依赖树
    本地依赖,告诉构建系统在编译类路径和最终的应用软件包中包含 app/libs/ 目录内的指定或全部 JAR 文件。如果有模块需要本地二进制依赖项,这些依赖项的 JAR 文件必须复制到项目内部的 /libs 中。

  4. 远程二进制依赖项

  5. 远程二进制依赖组
    远程二进制依赖,通过指定其 JCenter 坐标,针对 Android 支持库的 添加依赖。默认情况下,Android Studio 会将项目配置为使用顶级构建文件中的 JCenter 存储区。当您将项目与构建配置文件同步时,Gradle 会自动从 JCenter 中抽取依赖项。或者,您也可以通过使用 SDK 管理器下载和安装特定的依赖项。当然也可以自己制作开源库上传,再到这里用一句话引用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,398评论 25 707
  • 1.介绍 如果你正在查阅build.gradle文件的所有可选项,请点击这里进行查阅:DSL参考 1.1新构建系统...
    Chuckiefan阅读 12,115评论 8 72
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • 上周,小升初家长交流群里就有人发布这周可能要进行K6联赛。 果不其然,从昨天下午就陆续收到K6考试的时间及领准考证...
    素面迎风阅读 160评论 0 0
  • 文 | 行之 金庸共写过“飞雪连天射白鹿,笑书神侠倚碧鸳”共计14部长篇(其中鸳鸯刀是中篇,另外还写过短篇《越女剑...
    在下行之阅读 19,305评论 60 320