开发中遇到的知识点--gradle文件

一、Gradle构建简介

转载来自:Gradle入门系列(1):简介 - 文章 - 伯乐在线http://blog.jobbole.com/71999/

在Gradle中,有两个基本概念:项目任务。请看以下详解:

项目是指我们的构建产物(比如Jar包)或实施产物(将应用程序部署到生产环境)。一个项目包含一个或多个任务。

任务是指不可分的最小工作单元,执行构建工作(比如编译项目或执行测试)。

那么,这些概念和Gradle的构建又有什么联系呢?好,每一次Gradle的构建都包含一个或多个项目

gradle构建项目和Task

我们能够使用以下配置文件对Gradle的构建进行配置:

Gradle构建脚本(build.gradle)指定了一个项目和它的任务。

Gradle属性文件(gradle.properties)用来配置构建属性。

Gradle设置文件(gradle.settings)对于只有一个项目的构建而言是可选的,如果我们的构建中包含多于一个项目,那么它就是必须的,因为它描述了哪一个项目参与构建。每一个多项目的构建都必须在项目结构的根目录中加入一个设置文件。

二、更简短的Gradle插件简介

Gradle的设计理念是,所有有用的特性都由Gradle插件提供,一个Gradle插件能够:

在项目中添加新任务

为新加入的任务提供默认配置,这个默认配置会在项目中注入新的约定(如源文件位置)。

加入新的属性,可以覆盖插件的默认配置属性。

为项目加入新的依赖。

Gradle用户手册提供了一系列标准Gradle插件

在我们为项目加入Gradle插件时,我们可以根据名称或类型来指定Gradle插件。

三、了解Android studio 和 Gradle

请阅读这篇文章---http://blog.csdn.net/lincyang/article/details/43853259

四、解决方法:android 6.0(api 23) SDK,不再提供org.apache.http.*(只保留几个类) - JavAndroid - 博客频道 - CSDN.NET

http://blog.csdn.net/yy1300326388/article/details/48784475

在使用Android-async-http的时候我的apl 更新到了23,我的build version也是23的时候出现了,org.apache.http.Header这个类找不到的情况,原因是在api 23中,不提供org.apache.http.*(只保留几个类)

Android Studion解决办法:

android {    useLibrary'org.apache.http.legacy'}

五、Date().toLocaleString()

toLocaleString()方法可根据本地时间把Date对象转换为字符串,并返回结果。

语法:dateObject.toLocaleString()

=============================================================================

Java代码

System.out.println(newjava.util.Date());

输出:Thu Jan 27 14:43:28 CST 2011

Java代码

System.out.println(newjava.util.Date().toLocaleString());

输出:2011-1-27 14:45:21

不过现在toLocaleString()方法已过时,由DateFormat.format(Date date)取代。

------------------------------------------------------------------------------------------------------------------------------------------

Java代码:

DateFormat ddf = DateFormat.getDateInstance();

DateFormat dtf = DateFormat.getTimeInstance();

DateFormat ddtf = DateFormat.getDateTimeInstance();

Date date =newDate();

System.out.println("日期:"+ ddf.format(date));

System.out.println("时间:"+ dtf.format(date));

System.out.println("日期时间:"+ ddtf.format(date));

SimpleDateFormat sdf = (SimpleDateFormat) DateFormat.getDateTimeInstance();

System.out.println("日期时间:"+ sdf.format(date));

------------------------------------------------------------------------------------------------------------------------------------------

输出:

日期:2011-2-9

时间:11:16:02

日期时间:2011-2-9 11:16:02

日期时间:2011-2-9 11:16:02

六、buildTypes

默认情况下,Android插件自动为项目构建一个debug和一个release版本的应用。这两个版本的不同主要体现在在非开发机上的调试功能以及APK的签名方式。debug版本使用一个用公开的name/password创建的key来签名(这样构建的时候就不需要提示输入密码了)。release版本在构建的时候不会进行签名,而是稍后在做。

这个可以使用gradle中的BuildType对象来进行配置。默认情况下,2个BuildType的实例会被创建,一个debug,一个release。Android插件允许自定义这两个实例,当然你也可以创建其他的build type。配置由buildTypes这个DSL来完成:

android {

     buildTypes {

         debug {

                    applicationIdSuffix".debug"

          }

         jnidebug.initWith(buildTypes.debug)

         jnidebug {

              packageNameSuffix".jnidebug"

                jniDebuggabletrue

         }

        }

 }

上面的代码完成了下列配置:

1.配置默认的debug Build Type

设置debug版本的报名为<应用id>.debug,这样就可以在设备上同时安装debug和release版本了。

2.创建一个新的BuildType,名字是jnidebug,同时配置它是复制自debug Build Type。

配置jnidebug开启debug版本的JNI组件,添加一个不同的包名后缀。

创建一个新的的Build Types非常简单,只需要在buildTypes下面通过调用initWith或者使用闭包添加一个新的元素。下表是可以配置的属性以及默认值:

属性明 debug版本默认值 release或其他版本 默认值

debuggable true false

jniDebuggable false false

renderscriptDebuggable false false

renderscriptOptimLevel 3 3

applicationIdSuffix null null

versionNameSuffix null null

signingConfig android.signingConfigs.debug null

zipAlignEnabled false true

minifyEnabled false false

proguardFile N/A (set only) N/A (set only)

proguardFiles N/A (set only) N/A (set only)

出了这些属性,Build Types还可以用来配置代码和资源文件。针对每一个Build Type,一个新的对应的sourceSet会被创建,这个sourceSet使用一个默认的路径src//。这就意味着Build Type的名字不能是main或者androidTest(这是由插件强制的),同时每个Build Type的名字必须是唯一的。

和其他的source sets一样,Build Type中的source set路径也是可以配置

android {

sourceSets.jnidebug.setRoot('foo/jnidebug')

}

另外,对每一个Build Type,一个新的assemble任务会被创建.前面我已经讲过assembleDebug和assembleRelease任务了,这里就可解释这两个任务的来源了.当debug和release Build Types被预先创建的时候,他们对应的assemble任务也会被一起创建.

上面的build.gradle代码片段还会创建一个assembleJnidebug任务,assemble任务也会添加对assembleJniDebug任务的依赖,正如它对assembleDebug和assembleRelease任务的依赖一样。

小提示:你可以使用 gradle aJ命令来运行assembleJnidebug任务。

可能是使用场景:

仅在debug模式下使用的权限,release模式不使用。

debug时使用不同的实现

debug模式使用不同的资源(比如当一个资源的值依赖于签名的时候)

BuildType中的 代码/资源文件 将会被按照下列方式处理:

manifest配置会被merge到app manifest中

代码不会被merge,会被当做另一个代码目录(source folder)来使用

资源文件会覆盖同名的main中的资源文件

参考资料:http://www.open-open.com/lib/view/open1439216256770.html

使用Gradle构建Android项目的一些自定义配置

Android Gradle manifestPlaceholders 的妙用

manifestPlaceholders 可以替换androidmanifest文件中的标签,可作为快速渠道打包替换渠道名的一种方式,也可以自定义标签用来替换需要的文本,多作为不同环境不同key的修改。

七、ext

gradle 完整配置

https://github.com/WuXiaolong/Gradle4Android

如果有很多项目,可以设置全局来统一管理版本号或依赖库,根目录下build.gradle下:

ext {

compileSdkVersion = 23

buildToolsVersion = "23.0.2"

minSdkVersion = 14

targetSdkVersion = 23

}

app/build.gradle

android {

compileSdkVersion rootProject.ext.compileSdkVersion

buildToolsVersion rootProject.ext.buildToolsVersion

defaultConfig {

applicationId "com.wuxiaolong.gradle4android"

minSdkVersion rootProject.ext.minSdkVersion

targetSdkVersion rootProject.ext.targetSdkVersion

versionCode 1

versionName "1.0"

}

可以在根目录下建个config.gradle,然后只需在根目录下build.gradle最顶部加上下面一行代码,然后同步下,意思就是所有的子项目或者所有的modules都可以从这个配置文件里读取内容。

apply from: "config.gradle"

config.gradle

ext {

android = [

compileSdkVersion: 23,

buildToolsVersion: "23.0.2",

minSdkVersion    : 14,

targetSdkVersion : 22,

]

dependencies = [

appcompatV7': 'com.android.support:appcompat-v7:23.2.1',

design      : 'com.android.support:design:23.2.1'

]

}

app/build.gradle

android {

compileSdkVersion rootProject.ext.android.compileSdkVersion

buildToolsVersion rootProject.ext.buildToolsVersion

defaultConfig {

applicationId "com.wuxiaolong.gradle4android"

minSdkVersion rootProject.ext.android.minSdkVersion

targetSdkVersion rootProject.ext.android.targetSdkVersion

versionCode 1

versionName "1.0"

}

...

dependencies {

compile fileTree(dir: 'libs', include: ['*.jar'])

testCompile 'junit:junit:4.12'

compile rootProject.ext.dependencies.appcompatV7

compile rootProject.ext.dependencies.design

}

自定义BuildConfig

实际开发中服务器可能有正式环境和测试环境,gradle可以通过buildConfigField来配置。

defaultConfig {

buildConfigField 'String','API_SERVER_URL','"http://wuxiaolong.me/"'

}

buildConfigField 一共有3个参数,第一个是数据类型,和Java的类型是对等的;第二个参数是常量名,这里是API_SERVER_URL;第三个参数就是你要配置的值。

如图路径下就有个常量API_SERVER_URL,如何在代码取得这个常量值:

Log.d("wxl", "API_SERVER_URL=" + BuildConfig.API_SERVER_URL);

启用proguard混淆

一般release发布版本是需要启用混淆的,这样别人反编译之后就很难分析你的代码,而我们自己开发调试的时候是不需要混淆的,所以debug不启用混淆。对release启用混淆的配置如下:

android {

buildTypes {

release {

minifyEnabled true//是否启动混淆

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

}

}

}

minifyEnabled为true表示启用混淆,proguardFile是混淆使用的配置文件,这里是module根目录下的proguard-rules.pro文件

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

推荐阅读更多精彩内容