zoukankan      html  css  js  c++  java
  • android studio gradle plugin 用户指南 选择性翻译

    原文

    http://tools.android.com/tech-docs/new-build-system/user-guide

    构建文件 build.gradle

    Basic Project

    1.最简单的配置:

    apply plugin: 'java'

    使用自带的java插件,用gradle编译java

    2.最常见的android配置:

    buildscript {
        repositories {
            mavenCentral()
        }
    
        dependencies {
            classpath 'com.android.tools.build:gradle:0.11.1'
        }
    }
    
    apply plugin: 'android'
    
    android {
        compileSdkVersion 19
        buildToolsVersion "19.0.0"
    }


    repositories 使用maven central repository

    dependencies 依赖android plugin

    apply plugin 使用android plugin
    android {} 配置android plugin 参数,这个事dsl的入口

    提示:需要 local.properties 设置代表android sdk 路径的sdk.dir属性,或者使用 ANDROID_HOME 环境变量

    项目结构

    1.默认目录结构:

    • src/main/         放源码
    • src/androidTest/  放测试代码

    2.java和android plugin 共有源码目录:

    • java/
    • resources/

    3.android plugin 源码目录

    • AndroidManifest.xml
    • res/
    • assets/
    • aidl/
    • rs/
    • jni/

    配置路径

    修改java plugin默认路径的两种方式

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

    将android plugin 的路径修改为旧的形式

    android {
        sourceSets {
            main {
                manifest.srcFile 'AndroidManifest.xml'
                java.srcDirs = ['src']
                resources.srcDirs = ['src']
                aidl.srcDirs = ['src']
                renderscript.srcDirs = ['src']
                res.srcDirs = ['res']
                assets.srcDirs = ['assets']
            }
    
            androidTest.setRoot('tests')
        }
    }

    构建任务

    常见任务

    • assemble 合并输出
    • check 运行所有检查
    • build 运行 assemble 和 check
    • clean 清空输出

    这几个任务本身不做什么事,具体的事情要往里面插,类似策略模式

    java任务

    • assemble
      • jar
        This task creates the output.
    • check
      • test
        This task runs the tests.

    jar 直接或者间接依赖于其他任务,比如classes 编译java代码

    具体看http://gradle.org/docs/current/userguide/java_plugin.html

    android任务

    • assemble
      The task to assemble the output(s) of the project
    • check
      The task to run all the checks.
    • connectedCheck
      Runs checks that requires a connected device or emulator. they will run on all connected devices in parallel.
    • deviceCheck
      Runs checks using APIs to connect to remote devices. This is used on CI servers.
    • build
      This task does both assemble and check
    • clean
      This task cleans the output of the project

      多了connectedCheck和deviceCheck检查设备连接

      tip:gradle支持任务名简写:比如用gradle aR 代替gradle assembleRelease

    自定义构建过程

    Manifest entries

    android {
        compileSdkVersion 19
        buildToolsVersion "19.0.0"
    
        defaultConfig {
            versionCode 12
            versionName "2.0"
            minSdkVersion 16
            targetSdkVersion 16
        }
    }

    默认值

     Property Name  Default value in DSL object  Default value
     versionCode  -1  value from manifest if present
     versionName  null  value from manifest if present
     minSdkVersion  -1  value from manifest if present
     targetSdkVersion  -1  value from manifest if present
     applicationId  null  value from manifest if present
     testApplicationId  null  applicationId + “.test”
     testInstrumentationRunner  null  android.test.InstrumentationTestRunner
     signingConfig  null  null
     proguardFile  N/A (set only)  N/A (set only)
     proguardFiles  N/A (set only)  N/A (set only) 

    依赖管理

    依赖于本地包

    dependencies {
        compile files('libs/foo.jar')
    }
    
    android {
        ...
    }

    compile的文件都会加入classpath当中,并打包到apk

    可选的compile配置

    • compile: main application
    • androidTestCompile: test application
    • debugCompile: debug Build Type
    • releaseCompile: release Build Type.

    依赖于远程包

    repositories {
        mavenCentral()
    }
    
    
    dependencies {
        compile 'com.google.guava:guava:11.0.2'
    }
    
    android {
        ...
    }

    先把repository加进来,然后在dependencies以maven或者ivy的形式声明artifacts,就可以了

    配置其他maven库

    repositories {
        maven {
            url "http://repo.mycompany.com/maven2"
        }
    }

    http://gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html

    多项目构建

    示例:

    MyProject/
     + app/
     + libraries/
        + lib1/
        + lib2/

    app,lib1,lib2 都是gradle项目
    gradle这么引用他们 :app :libraries:lib1 :libraries:lib2
    每个项目都有build.gradle文件
    根目录有settings.gradle
    结构如下:

    MyProject/
     | settings.gradle
     + app/
        | build.gradle
     + libraries/
        + lib1/
           | build.gradle
        + lib2/
           | build.gradle
     

    为了表示当前目录是一个gradle目录,需要有settings.gradle文件,内容如下:

    include ':app', ':libraries:lib1', ':libraries:lib2'

    app依赖其他项目,依赖关系这么写

    dependencies {
        compile project(':libraries:lib1')
    }

    library项目

    上面 :libraries:lib1 :libraries:lib2可以是java项目,:app使用它们的jar包,

    但是 如果这些库要访问android api 或者其他android资源,它们不能是普通的java项目,必须是Android Library Projects

    创建Android Library Projects

    buildscript {
        repositories {
            mavenCentral()
        }
    
        dependencies {
            classpath 'com.android.tools.build:gradle:0.5.6'
        }
    }
    
    apply plugin: 'android-library'
    
    android {
        compileSdkVersion 15
    }

    使用android-libraray plugin 其他跟普通android项目类似

    输出.aar文件,包含编译代码(.jar/.so)和资源文件(manifest, res, assets)

    引用Library

    dependencies {
        compile project(':libraries:lib1')
        compile project(':libraries:lib2')
    }

    发布Library

    android {
        defaultPublishConfig "debug"
    }

    默认只发布release版本,可以通过上面代码修改

    如果有变体(后面将提到),要加上变体名

    android {
        defaultPublishConfig "flavor1Debug"
    } 

    发布所有版本

    android {
        publishNonDefault true
    }

    引用其他发布的artifact

    dependencies {
        flavor1Compile project(path: ':lib1', configuration: 'flavor1Release')
        flavor2Compile project(path: ':lib1', configuration: 'flavor2Release')
    } 

    构建变体

    变体:类似普通版和高级版

    android {
        ....
    
        productFlavors {
            flavor1 {
                ...
            }
    
            flavor2 {
                ...
            }
        }
    }

    Build Type + Product Flavor = Build Variant

    例如

    • Flavor1 - debug
    • Flavor1 - release
    • Flavor2 - debug
    • Flavor2 - release
  • 相关阅读:
    SQL Server 的事务和锁(一)
    Sql server脏读、更新丢失、不可重复读、幻象读问题及解决方案
    Sql server锁机制
    Windows系统变量列表
    windows运行命令大全
    C# 捕获数据库自定义异常
    sql日期函数
    C# ado.net 操作存储过程(二)
    C# ado.net 操作(一)
    url传参特殊字符问题(+、%、#等)
  • 原文地址:https://www.cnblogs.com/zhangfp/p/4063629.html
Copyright © 2011-2022 走看看