Gradle

今天主要是想说说 Gradle( Gradle Plugin User Guide) 我所知道的一些东西,
老规矩,无图不说话。。。

概念

Gradle构建工具是任务驱动型的构建工具,并且可以通过各种Plugin插件扩展功能以适应各种构建任务。对应Android项目的Gradle插件就是Android Gradle Plugin。

目标

  • 让重用代码和资源变得更加容易。
  • 让创建同一应用程序的不同版本变得更加容易,无论是多个apk发布版本还是同一个应用的不同定制版本。
  • 让构建过程变得更加容易配置,扩展和定制。
  • 整合优秀的IDE

特点

  • 采用了Domain Specific Language(DSL语言)来描述和控制构建逻辑。
  • 构建文件基于Groovy,并且允许通过混合声明DSL元素和使用代码来控制DSL元素以控制自定义的构建逻辑。
  • 支持Maven或者Ivy的依赖管理。
  • 非常灵活。允许使用最好的实现,但是不会强制实现的方式。
  • 良好的API工具供IDE集成。

作用 && 具体用法

引用插件

如下引用 JAVA 或者 Android

apply plugin: 'java'|'android'

重配项目结构

   sourceSets {
        main {
            manifest.srcFile 'src/main/AndroidManifest.xml'
            java.srcDirs = ['src/main/java', '.apt_generated']
            aidl.srcDirs = ['src/main/aidl', '.apt_generated']
            assets.srcDirs = ['src/main/assets']
            res.srcDirs =
                    [
                            'src/main/res/home',
                            'src/main/res/resource',
                            'src/main/res/'
                    ]
        }
    }

注意:srcDir将会被添加到指定的已存在的源文件夹中(这在Gradle文档中没有提到,但是实际上确实会这样执行)。

替换默认的源代码文件夹,你可能想要使用能够传入一个路径数组的srcDirs来替换单一的srcDir。以下是使用调用对象的另一种不同方法:

sourceSets {
    main.java.srcDirs = ['src/java']
    main.resources.srcDirs = ['src/resources']
}

想要获取更多信息,可以参考Gradle文档中关于Java Pluign的部分。

定义逻辑代码

def packageTime() {
    return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}

def versionPropsFile = file("version.properties")
//使用 输出 "version_name_2016_05_15"
fileName = "versionProps['VERSION_NAME'].toString()_packageTime()"

签名配置

可参考:Gradle构建项目时,将敏感信息保存在build.gradle之外

android {
    signingConfigs {
        debug {
            storeFile file("debug.keystore")
        }

        myConfig {
            storeFile file("other.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }

    buildTypes {
        foo {
            debuggable true
            jniDebugBuild true
            signingConfig signingConfigs.myConfig
        }
    }
}

注意:只有默认路径下的debug keystory不存在时会被自动创建。更改debug keystory的路径并不会自动在新路径下创建debug keystory。如果创建一个新的不同名字的SignConfig,但是使用默认的debug keystore路径来创建一个非默认的名字的SigningConing,那么还是会在默认路径下创建debug keystory。换句话说,会不会自动创建是根据keystory的路径来判断,而不是配置的名称。
注意:虽然经常使用项目根目录的相对路径作为keystore的路径,但是也可以使用绝对路径,尽管这并不推荐(除了自动创建出来的debug keystore)。

混淆

android {
    buildTypes {
        release {
            minifyEnabled false  //是否开启混淆编译
            proguardFile getDefaultProguardFile('proguard-android.txt')
        }
    }

    productFlavors {
        flavor1 {
        }
        flavor2 {
            proguardFile 'some-other-rules.txt'
        }
    }
}

混淆规则:android安全——混淆技术小摘

Dependencies,Android Libraries and Multi-project setup(依赖关系,Android库和多项目设置)

后面补上

测试

后面补上

多渠道打包

    productFlavors {
        miui {
        }
        wandoujia {

        }
    }
    ...

参考:Android多渠道打包工具Gradle插件

task管理

后面补上

自定义配置

 resValue "string", "app_name", "name_1"
 buildConfigField "boolean", "IS_LOG", "true"   
   manifestPlaceholders = [
                XG_V2_ACCESS_ID :  versionProps['XG_V2_ACCESS_ID'].toString(),
                XG_V2_ACCESS_KEY: versionProps['XG_V2_ACCESS_KEY'].toString()]

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

解决方法数超标

解决方法数超65536 java.lang.IllegalArgumentException: method ID not in [0, 0xffff]: 65536

Gradle构建功能太强大 ,未完待续…


导读:Google I/O 2016开发者大会
DevTools 新功能:命令菜单快捷键和 HTML 格式化
用 Google Cloud 打造你的私有免费 Git 仓库

参考:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值