Android Studio

&

Gradle

基础

为什么选择Gradle

  • 采用基于Groovy的DSL语言(Domain Specific Language领域特定语言)来描述和控制构建逻辑。
  • 类似Ant和Maven,完全支持 Maven 、 Ivy 的资源库
  • 相对Maven而言提供了更多的可选项,甚至可以使用一个普通的文件夹作为资源库,而仍可拥有依赖传递的特性
  • 良好的API工具供IDE集成。

Gradle是一个优秀的构建系统和构建工具,它允许通过插件创建自定义的构建逻辑。 Google基于Gradle以下的一些特点而选择了它:

Android采用Gradle

作为新构建系统的目标

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

开始

  • Groovy(基于JVM,非常类似Java的一门高级语言)
  • build.gradle、task(dependsOn、defaultTasks)
  • Java plugin(archivesBaseName、version)
  • repositories、dependencies

应用:多渠道包

  • 使用flavor实现多渠道打包
  • 使用flavorGroups实现批量配置(一个包名,多个icon)
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 18
    }

    productFlavors {
        production {
            packageName "be.tamere.gradlebuildtypesexample"
        }

        staging {
            packageName "be.tamere.gradlebuildtypesexample.staging"
        }
    }
}

dependencies {
    compile 'com.android.support:appcompat-v7:18.0.0'
}
├── main
│   ├── AndroidManifest.xml
│   ├── ic_launcher-web.png
│   ├── java
│   │   └── be
│   │       └── tamere
│   │           └── gradlebuildtypesexample
│   │               └── MainActivity.java
│   └── res
│       ├── drawable-hdpi
│       │   └── ic_launcher.png
│       ├── drawable-mdpi
│       │   └── ic_launcher.png
│       ├── drawable-xhdpi
│       │   └── ic_launcher.png
│       ├── drawable-xxhdpi
│       │   └── ic_launcher.png
│       ├── layout
│       │   └── activity_main.xml
│       ├── menu
│       │   └── main.xml
│       ├── values
│       │   ├── dimens.xml
│       │   ├── strings.xml
│       │   └── styles.xml
│       ├── values-v11
│       │   └── styles.xml
│       └── values-v14
│           └── styles.xml
├── production
│   └── java
│       └── be
│           └── tamere
│               └── gradlebuildtypesexample
│                   └── Constants.java
└── staging
    ├── java
    │   └── be
    │       └── tamere
    │           └── gradlebuildtypesexample
    │               └── Constants.java
    └── res
        ├── drawable-hdpi
        │   └── ic_launcher.png
        ├── drawable-mdpi
        │   └── ic_launcher.png
        ├── drawable-xhdpi
        │   └── ic_launcher.png
        ├── drawable-xxhdpi
        │   └── ic_launcher.png
        └── values
            └── string.xml

1.3 代码实现友盟多渠道版本

//替换AndroidManifest.xml的UMENG_CHANNEL_VALUE字符串为渠道名称 By Remex Huang
android.applicationVariants.all{ variant -> 

    variant.processManifest.doLast{
    
        //${buildDir}是指./build文件夹
        //${variant.dirName}是flavor/buildtype,例如GooglePlay/release,运行时会自动生成
        //下面的路径是类似这样:./build/manifests/GooglePlay/release/AndroidManifest.xml
        def manifestFile = "${buildDir}/manifests/${variant.dirName}/AndroidManifest.xml"
        
        //将字符串UMENG_CHANNEL_VALUE替换为当前 ProductFlavor 的名字
        def updatedContent = new File(manifestFile).getText('UTF-8')
                    .replaceAll("UMENG_CHANNEL_VALUE", "${variant.productFlavors[0].name}")

        new File(manifestFile).write(updatedContent, 'UTF-8')
        
        //将此次flavor的AndroidManifest.xml文件指定为我们修改过的这个文件
        variant.processResources.manifestFile = 
                    file("${buildDir}/manifests/${variant.dirName}/AndroidManifest.xml")
    }    
}

2. 实现一个包名多个icon

flavorGroups

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.6.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    flavorGroups "suit", "number"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 19
    }

    productFlavors {

        //number flavours
        ace {
            flavorGroup "number"
        }

        two {
            flavorGroup "number"
        }

        three {
            flavorGroup "number"
        }

        four {
            flavorGroup "number"
        }

        five {
            flavorGroup "number"
        }

        six {
            flavorGroup "number"
        }

        seven {
            flavorGroup "number"
        }

        eight {
            flavorGroup "number"
        }

        nine {
            flavorGroup "number"
        }

        ten {
            flavorGroup "number"
        }

        jack {
            flavorGroup "number"
        }

        queen {
            flavorGroup "number"
        }

        king {
            flavorGroup "number"
        }

        clubs {
            flavorGroup "suit"
        }

        spades {
            flavorGroup "suit"
        }

        diamonds {
            flavorGroup "suit"
        }

        hearts {
            flavorGroup "suit"
        }
    }
}

dependencies {
	compile 'com.android.support:appcompat-v7:+'
}

4 suits x 13 numbers = 52 apks

Android Studio

开始

  • 创建项目、创建依赖项目、添加依赖包,查看build.gradle、tasks视图、控制台、终端操作gradlew
  • 常规使用:项目结构、svn操作、快捷键(参考
  • 智能提示(参考、关注Philippe Breault
  • 建议先使用IntelliJ Idea熟悉环境(注意与eclipse差异:项目依赖的不同)
  • 慢慢用,慢慢熟

显示内存占用情况

自动完成

调试时追加日志

 

调试时追加条件

Made with Slides.com