Gradle 二三事

1.各种不想解决的黄色小提示,不想写contentDescription,设计稿上字体就是小于12sp等等

    lintOptions {
      //发生错误的时候停止构建
      abortOnErrortrue
      //不忽略警告
      ignoreWarningsfalse
      //lint 规则配置
      lintConfig file("../lint.xml")
    }

然后具体的lint规则配置:lint.xml

  <?xml version="1.0" encoding="UTF-8"?>
    <lint>
      <!-- list of issues to configure -->
      <issue id="SmallSp" severity="ignore" />
      <issue id="ContentDescription" severity="ignore" />
  </lint>

2.签名配置 signingConfigs--使用gradle打包的时候

 signingConfigs {
        config {
            keyAlias KEY_ALIAS
            keyPassword KEY_PASSWORD
            storeFile file(STORE_FILE)
            storePassword STORE_PASSWORD
        }
    }

新建一个Android 项目的时候,,rootProject下面会生成gradle.properties和local.properties(sdk 位置)文件,gradle.properties中的内容不需要显示调用,可以直接在build.gradle中使用,如上。当配置比较简单的时候,可以将这些内容直接在gradle.properties配置。
gradle.properties中的内容:

KEY_ALIAS=测试
KEY_PASSWORD=666666
STORE_FILE=../测试.jks
STORE_PASSWORD=666666

当然,gradle.properties也可以配置其他很多东西,SDK Version,app version 啊,第三方的key secret啊,当然这些东西多了以后,你就会发现我的天,这个
gradle.properties里面怎么什么都有?!
这个时候,我们就需要新建一个**.properties文件了,就跟你有一个student bean ,然后又有一堆course相关的属性一样,当然你可以放到student里面,但是最好还是新建一个course类啦,好,我们现在新建一个keystore.properties,把上图的内容放到keystore.properties里面,有多个环境的key就每个分开写,那在build.gradle里面怎么使用这个新建的properties呢?

def keystorePropertiesFile = rootProject.file("keystore.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

为啥要定义变量呢,因为你接下来要用啊,2333...怎么用呢,不要着急,马上来了:

 keyAlias keystoreProperties['keyAlias']
 keyPassword keystoreProperties['keyPassword']
 storeFile file("../${keystoreProperties['storeFile']}")
 storePassword keystoreProperties['storePassword']

其他properties请自由发挥。

3.刚才讲到多个环境,为啥会有多个环境呢,哦,因为dev一个环境,QA一个环境,prod一个环境呀,这么多环境请求地址这些都不一样,怎么办呢?好办!
productFlavors了解一下。你可以在这里面干些什么呢?
先分一下环境吧

prod{
}
qa{
}
dev{
}

A.不同的url地址:

prod{
  buildConfigField 'String', 'BASE_URL', '"https://www.baidu.com"'
}
qa{
  buildConfigField 'String', 'BASE_URL', '"https://www.google.com"'
}

好,你在代码里面请求的时候,只需要调用BuildConfig.BASE_URL就可以了,麻麻再也不用担心切换环境了。
gradle3.0以后,需要在defaultConfig里面添加flavorDimensions 属性

  defaultConfig {
        applicationId "com.test"
        minSdkVersion MIN_SDK_VERSION as int
        targetSdkVersion TARGET_SDK_VERSION as int
        versionCode VERSION_CODE as int
        versionName VERSION_NAME
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        flavorDimensions "channel","charge","env"
    }

flavorDimensions是将Flavors中的内容进行分类,比如渠道(百度,360,应用宝等等),比如是否收费免费之类的,比如环境,然后不同分类可以互相组合,比如百度收费,百度免费,360收费,360免费等等
申请这个属性以后,需要在Flavors中声明这是属于哪个分类,所以将之前的改写成

prod{
 dimension "env"
  buildConfigField 'String', 'BASE_URL', '"https://www.baidu.com"'
}
qa{
 dimension "env"
  buildConfigField 'String', 'BASE_URL', '"https://www.google.com"'
}

B.不同的环境不同的签名文件

prod{
  signingConfig signingConfigs.prod
}
qa{
  signingConfig signingConfigs.qa
}

这个signingConfigs.prod和signingConfigs.qa是什么呀?哦,自己在signingConfigs里面添加的啊,欲知后事如何,需缴纳五块钱:

signingConfigs{
  prod{
    keyAlias keystoreProperties['keyAliasStage']
    keyPassword keystoreProperties['keyPasswordStageProd']
    storeFile file("../${keystoreProperties['storeFileStageProd']}")
    storePassword keystoreProperties['storePasswordStageProd']
  }
  qa{
    keyAlias keystoreProperties['keyAliasStageQa']
    keyPassword keystoreProperties['keyPasswordStageProdQa']
    storeFile file("../${keystoreProperties['storeFileStageProdQa']}")
    storePassword keystoreProperties['storePasswordStageProdQa']
  }
}

嗯,看完上诉,你的信用卡已自动扣款五块,感谢各位支持!!😆
你说啥?五块钱还想要手机上同时安装各个环境的包?!
好嘛,applicationIdSuffix了解一下,同样还是在我们的productFlavors里面:

prod{
 applicationIdSuffix ".prod"
}
qa{
 applicationIdSuffix ".qa"
}

你说啥?包名变了第三方库没法用了?唉,你的五块钱好值钱啊。
写在build.gradle里面的,都可以像2那样,放在.properties了,放在AndroidManifest里面的呢,额,不告诉你!

<meta-data
    android:name="**.***.ApiKey"
    android:value="${***_apikey}" />

这个好像JS啊,啊,是啊,我也不知道什么像什么,那value的值写到哪里呢,都跟你说productFlavors了解一下啦,当然这个不写在productFlavors里面,哈哈哈,有本事跟着网线爬过来打我啊,我用无线网,哈哈哈

android {
      buildTypes {
        prod {
            manifestPlaceholders = [**_apikey: "12345664"]
        }
        qa {
            manifestPlaceholders = [**_apikey: "123456677"]
        }
      }
}

不同环境不同的第三方签名,意味着你可以对不同环境发生的各种事情进行监控,嗯,你懂的。

4.configurations 依赖分组
在Gradle中,依赖都被会分配到某一个具体的configuration中。Configuration代表着一个或多个构件及构件所需依赖的一个分组。

系统已经预定义了一些configuration,比如,compile,runtime,testCompile,testRuntime等,这个好像是gradle3.0以前,3.0以后是implementation,testImplementation。

compile/implementation 放在这个configuration下的依赖是在编译产品代码时所使用的,但它作为一个分组,包含产品代码和编译所需的依赖。
runtime 产品代码在运行时需要的依赖,默认,也会包含compile中的依赖。
testCompile 编译测试代码时所需要的依赖,默认,被编译的产品代码和产品代码需要的编译依赖也属于该分组。
testRuntime 运行测试时需要的依赖。默认,包含compile,runtime和testCompile的分组的构建和依赖。

上面👆这一大段都是抄的!感谢复制粘贴让我少些了好多字,废话少说,比如我们又一个监控内存泄漏的leakcanary,这个玩意儿引入以后,会生产一个查看内存泄漏的app,但是在我们版本发布以后我们是不想要这个的,为啥不想要啊?你还买一送一啊?!所以我们经常会区分debug版本和release版本,当然不同环境下可能需求也不一样,所以:

prodDebugCompile "com.squareup.leakcanary:leakcanary-android:1.5"
    prodReleaseCompile "com.squareup.leakcanary:leakcanary-android-no-op:1.5"
    qaDebugCompile "com.squareup.leakcanary:leakcanary-android:1.5"
    qaReleaseCompile "com.squareup.leakcanary:leakcanary-android-no-op:1.5"

然后配置configuration:

configurations {
    prodReleaseCompile
    prodDebugCompile
    qaReleaseCompile
    qaDebugCompile
}

这样,在我们打包的时候,gradle就会根据不同场景打包不同的依赖。

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

推荐阅读更多精彩内容