Android Studio| project| build.gradle (1)

* project| build.gradle

* task 写法 http://blog.csdn.net/xiaoliuliu2050/article/details/53414994

task有两个生命周期,配置阶段和执行阶段。

gradle在执行task时,都会先对task进行配置,task中最顶层的代码就是配置代码,在配置阶段执行,其他代码实在执行阶段执行的;

task关键字实际上是一个方法调用,我们不用将参数放在括号里面。

task Task3 << {

        println name

    }

    // “<<”语法糖,表示追加执行过程,相当于doLast,因此整个代码都是在执行阶段执行的;与之相反的是doFirst。

    //如果代码没有加“<<”,则这个任务在脚本initialization的时候执行(也就是你无论执行什么任务,这个任务都会被执行,“hello”都会被输出);

    //如果加了“<<”,则在输入命令gradle Task3后才执行

参考http://blog.csdn.net/u010818425/article/details/52268126

***********************************************

* project| task * task

Task

参考http://www.cnblogs.com/wxishang1991/p/5532006.html

apihttps://docs.gradle.org/current/dsl/org.gradle.api.Task.html

[build.gradle]

 

//Task是和Project关联的,所以,我们要利用Project的task函数来创建一个Task 

task myTask  <==myTask是新建Task的名字 

task myTask { configureclosure } 

task myType << {task action } <==注意,<<符号是doLast的缩写 

task myTask(type:SomeType) 

task myTask(type:SomeType) { configure closure }

***********************************************

* project| build.gradle

仓库及写法,要先确定仓库路径,再去该路径里找是否存在需要的包

1. 仓库: http://www.mvnrepository.com/artifact/commons-net/commons-net/2.0

2. buildscript {

  repositories {

    jcenter() // https://jcenter.bintray.com/ 浏览器点进去以后,如果显示The requested path was not found.,去掉最后一个文件夹名前面的冒号,如https://jcenter.bintray.com/org/apache/:commons/,手动去掉commons前面的冒号。

  }

  }

3.

buildscript {

    repositories {

        mavenCentral() //https://repo1.maven.org/maven2/

    }

    dependencies {

        classpath'com.android.tools.build:gradle:1.0.+'   }

}

5. 根据以上两个仓库路径,有些compile找不到,例如

compile'com.android.support:multidex:1.0.1'

  compile'org.ros.rosjava_core:rosjava:[0.2,0.3)'

  compile'org.ros.rosjava_messages:diagnostic_msgs:[1.11,1.12)'

  compile'org.ros.rosjava_messages:sensor_msgs:[1.11,1.12)'

4. compile 写法研究

    compile 'com.jakewharton:butterknife:8.5.1'

      ?版本号单独放最后一个冒号后面

      ?版本号的上级目录名单独放两个冒号之间,做名称

      ?名称之前,放所有目录,用点代替斜杠?

 //https://jcenter.bintray.com/com/jakewharton/butterknife/

    /*

    8.2.1/

    8.3.0/

    8.4.0/

    8.5.0/

    8.5.1/

    maven-metadata.xml

     */

    //https://jcenter.bintray.com/com/jakewharton/butterknife/8.5.1/

    /*

    butterknife-8.5.1-javadoc.jar

    butterknife-8.5.1-javadoc.jar.asc

    butterknife-8.5.1-sources.jar

    butterknife-8.5.1-sources.jar.asc

    butterknife-8.5.1.aar

    butterknife-8.5.1.aar.asc

    butterknife-8.5.1.pom

    butterknife-8.5.1.pom.asc

     */

https://jcenter.bintray.com/org/apache/commons/com.springsource.org.apache.commons.codec/

1.3.0/

1.4.0/

1.5.0/

1.6.0/

compile'org.apache.commons:com.springsource.org.apache.commons.codec:1.3.0'

** ros的仓库https://github.com/rosjava/rosjava_mvn_repo 此目录在project| build.gradle-> buildscript.gradle里面

      maven {

            url"https://github.com/rosjava/rosjava_mvn_repo/raw/master"

  }

ros依赖的外部库列表

The RosJava Maven Repo

Maven artifact repositoryfor rosjava dependencies and builds.

Contents

From DependentRepositories

Many of the artifacts hereare collected from a variety of other repositories to provide a single stablesource of artifacts for development of the rosjava/android core stacks. Thislist (hopefully relatively complete) includes:

http://repo1.maven.org/maven2/org/apache/apache/

http://repo1.maven.org/maven2/junit/junit/

http://repo.maven.apache.org/maven2/org/sonatype/oss/oss-parent/

http://repo.jfrog.org/artifactory/libs-releases/org/apache/commons/com.springsource.org.apache.commons.codec/

http://repo.jfrog.org/artifactory/libs-releases/org/apache/commons/com.springsource.org.apache.commons.httpclient/

http://repo.jfrog.org/artifactory/libs-releases/org/apache/commons/com.springsource.org.apache.commons.io/

http://repo.jfrog.org/artifactory/libs-releases/org/apache/commons/com.springsource.org.apache.commons.lang/

http://repo.jfrog.org/artifactory/libs-releases/org/apache/commons/com.springsource.org.apache.commons.logging/

http://repo.jfrog.org/artifactory/libs-releases/org/apache/commons/com.springsource.org.apache.commons.net/

http://central.maven.org/maven2/org/apache/commons/commons-parent/

http://central.maven.org/maven2/ws-commons-util/ws-commons-util/

http://central.maven.org/maven2/com/google/guava/guava/

http://central.maven.org/maven2/com/google/guava/guava-parent/

http://central.maven.org/maven2/com/google/code/findbugs/jsr305/

http://central.maven.org/maven2/io/netty/netty/

http://central.maven.org/maven2/io/netty/netty-all/

http://central.maven.org/maven2/xml-apis/xml-apis/

http://central.maven.org/maven2/commons-pool/commons-pool/

http://central.maven.org/maven2/org/apache/commons/commons-pool2/

http://central.maven.org/maven2/dnsjava/dnsjava/

Official RosJava Artifacts

All official rosjavaartifacts that are generated have their official maven home here.

Interesting 3rd PartyDependencies

We also include someesoteric, but useful 3rd party dependencies here that the community may finduseful. Some of these are custom built and added here. Others come from thefollowing list of repositories:

Other Maven Repositories

Some other mavenrepositories that may be of interest to ros users:

http://central.maven.org/maven2/org/bytedeco/javacpp-presets/opencv/

http://central.maven.org/maven2/nu/pattern/opencv/

***********************************************

导入包的各种写法:maven、gradle、builddir,这里要先自定义仓库地址,否则不可用。

http://mvnrepository.com/artifact/commons-logging/commons-logging/1.1.1

builddir

#https://mvnrepository.com/artifact/commons-logging/commons-logging

'commons-logging:commons-logging:jar:1.1.1'

***********************************************

* project| build.gradle

* maven生命周期 Lifecycle

      clean     清理上一次构建生成的文件

      validate 验证项目是否正确,以及所有为了完整构建必要的信息是否可用

      compile 编译src/main/java目录下的java文件至classpath中

      test 测试

      package 打包

      install    安装包至本地仓库,以备本地的其他项目作为依赖使用

      site 生成站点文件

      deploy   复制最终的包至远程仓库,共享给其他开发人员和项目(通常和一次正式的发布相关)

***********************************************

Project| build.gradle  Project级别的build.gradle文件

--

buildscript {

 

//编译Gradle脚本过程中需要的依赖关系.//

 

    repositories {

 

        jcenter()

    }

 

//选择JCenter repository.//

 

    dependencies {

 

        classpath'com.android.tools.build:gradle:1.2.3'

 

//脚本依赖Android plugin for Gradle 1.2.3//

 

    }

}

 

allprojects {

 

//你应用的依赖关系.//

 

    repositories {

        jcenter()

    }

}

 

//应用依赖jCenter repository.//

  ** Android Studio新建项目时都建议使用Gradle Wrapper来构建,这不是必须的,直接指定你本地的安装的Gradle也行。

用wrapper的好处是当别人参与到该项目时,无须事先本地安装Gradle或者Android Studio,当运行./gradlew相关的命令时,wrapper会检查本地相应目录下是否已经有对应版本的Gradle,如果没有会帮你下载正确的版本。还有对于一些持续集成的测试服务器,不一定是安装了Gradle的,这时候使用wrapper就能避免重新配置服务器。

如果你想将Gradle项目转换成基于Gradle Wrapper的,只需要简单的跑一下gradle wrapper即可,也可以加上--gradle-version 2.4选项来指定一个gradle的版本,--gradle-distribution-url选项指定了从哪儿下载gradle,如果没有任何选项,则会从Gradle repository下载你运行wrappertask的gradle版本。你也可以将wrapper这个task写入你的build.gradle文件:

task wrapper(type:Wrapper) {

    gradleVersion = '2.4'

}

wrappertask会在你的项目根目录下生成如下文件:

sample/

  gradlew

  gradlew.bat

  gradle/wrapper/

    gradle-wrapper.jar

    gradle-wrapper.properties

这些文件是都应该加入到版本控制中的。

如果你想更改Gradle版本,可以直接修改gradle-wrapper.properties文件:

  ** Source Sets

  我们可以在app| src下建立多个source set:

    app/

      androidTest/

      debug/

      demo/

        java/

      res/

      full/

      main/

      ...

每一个set代表一个flavor或者build type,main set所有variants都会用到。在编译某个variants时会选择相应set中的src和res。比如assembleDemoDebug,会组合main,demo和debug set。对于res和manifest文件,内容会合并,如果有重名字段的,其合并优先级从低到高是:libraries/dependencies -> main src ->productFlavor -> buildType。对于src,组合成variants的set中不能存在重名文件,即demo和Debug中不能同时存在一个A.java,但是Debug和Release中可以同时有。 当然我们也可以通过脚本中的sourceSets{ }配置目录结构。 特别对于非约定目录结构的工程(比如Eclipse工程),通过sourceSets{ }加以配置以便Gradle识别:

sourceSets {

        main {

            manifest.srcFile'AndroidManifest.xml'

            java.srcDirs = ['src']

            aidl.srcDirs = ['src']

            renderscript.srcDirs = ['src']

            res.srcDirs = ['res']

            assets.srcDirs = ['assets']

        }

       demo {

                    ...

        }

        instrumentTest.setRoot('tests')

}

  ** Build variants是product flavors和build types的组合。

buildTypes {

    debug {

        debuggable true

    }

    release {

        minifyEnabled true

        proguardFilesgetDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

    }

}

productFlavors {

    demo {

        applicationId"me.zircon.test.demo"

        versionName "1.0-demo"

    }

    full {

        applicationId "me.zircon.test.full"

        versionName "1.0-full"

    }

}

上面的片段会组合成4种variants:demoDebug,demoRelease,fullDebug,fullRelease。

Android Studio正常左下角有一个Build Variants的面板,里面可以选择你最终想编译的版本,当选择run一个模块时,就是编译的这里选择的版本。也可以通过命令行./gradlewassemble<flavor><buildtype>来编译,编译出的apk可以在app/build/outputs/apk里找到,格式是app-<flavor>-<buildtype>.apk。 也有利用productFlavors来打渠道包的例子。

** defaultTasks

List<String>defaultTasks       https://docs.gradle.org/current/dsl/org.gradle.api.Project.html#org.gradle.api.Project:defaultTasks

The names of the defaulttasks of this project. These are used when no tasks names are provided whenstarting the build.

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

  ** Project| build.gradle: gradle插件版本设置,更新Android studio时,这里版本号会变。

  // Top-level build file where you can addconfiguration options common to all sub-projects/modules.

buildscript {

    repositories {

        jcenter()    //此对远程仓库至关重要。它提供在线导入远程仓库里的包File| Project Structure| app| Dependencies| + |Library Dependency。

    }

    dependencies {

        classpath'com.android.tools.build:gradle:2.1.2'

        // NOTE: Do not place your applicationdependencies here; they belong

        // in the individual modulebuild.gradle files

    }

}

allprojects {

    repositories {

        jcenter()

    }

}

task clean(type: Delete) {

    delete rootProject.buildDir

}

    *** 注jcenter():按住Ctrl,点击此函数,可以看到它的返回MavenArtifactRepository jcenter();

    它的注视里写了这些库的来源https://jcenter.bintray.com/,以前用的是https://bintray.com/

    修改仓库:http://www.yrom.net/blog/2015/02/07/change-gradle-maven-repo-url/ 修改项目根目录下的build.gradle,将jcenter()或者mavenCentral()替换掉即可:

      allprojects {

          repositories {

             maven{ url'http://maven.oschina.net/content/groups/public/'}

          }

      }

***********************************************

* project| build.gradle

      jcenter 和 MavenCentral

Gradle会自动从repositories{…}帮你下载编译RemoteDependencies。

旧版本的AndroidStudio默认生成的repositories{}是Maven Central,而新版本已经变成jcenter。这两者都是相互独立的lib仓库,由不同的厂商托管,相较之下,jcenter有以下优势:

jcenter对开发者是友好的,上传自己的lib到jcenter很方便

jcenter利用CDN加速,所以下载lib更快

jcenter类库更全,可以认为是Maven Central的超类

并不是所有类库都host在jcenter或者Maven Central上,有些是host在自己的Maven仓库中,比如我们项目中所使用的twitter的crashlytics库,它host在twitter自己的仓库中:

repositories {

    maven { url 'https://maven.fabric.io/public'}

}

关于如何将自己的类库上传到jcenter可以参考这篇文章https://inthecheesefactory.com/blog/how-to-upload-library-to-jcenter-maven-central-as-dependency/en。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值