Android Studio中Gradle使用详解
转自:http://www.jianshu.com/p/02cb9a0eb2a0
一)基本配置
build配置
buildscript {repositories {jcenter() }dependencies {classpath 'com.android.tools.build:gradle:1.2.3'} }
Android脚本
apply plugin: 'com.android.application'
Android配置
android {compileSdkVersion 22buildToolsVersion "22.0.1" }
项目结构
MyApp ├── build.gradle ├── settings.gradle └── app├── build.gradle├── build├── libs└── src└── main├── java│ └── com.package.myapp└── res├── drawable├── layout└── etc.
Gradle Wrapper结构(这些新建项目时都添加给了用户,不需要重新添加)
myapp/├── gradlew ├── gradlew.bat└── gradle/wrapper/├── gradle-wrapper.jar└── gradle-wrapper.properties
运行build任务 - 列出所有可用任务
$ ./gradlew tasks
生成App-debug.apk任务
$ ./gradlew assembleDebug# Apk路径: MyApp/app/build/ outputs/apk
手动导入Eclipse-Android项目(自动导入请连续点“下一步”)
在项目路径下创建build.gradle文件:buildscript {repositories {jcenter() }dependencies {classpath 'com.android.tools.build:gradle:1.2.3'} } apply plugin: 'com.android.application' android {compileSdkVersion 22buildToolsVersion "22.0.1"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')} } dependencies {compile fileTree(dir: 'libs', include: ['*.jar']) }
PS 也可以复制粘贴Eclipse-Android项目的源代码到Android Studio的项目里
二)自定义配置
Gradle所有文件结构
MyApp ├── build.gradle ├── settings.gradle └── app└── build.gradle
settings.gradle
include ':app'
MyApp/build.gradle
buildscript {repositories {jcenter()}dependencies {classpath 'com.android.tools.build:gradle:1.2.3'} } allprojects {repositories {jcenter() } }
MyApp/app/build.gradle
apply plugin: 'com.android.application' android {compileSdkVersion 22buildToolsVersion "22.0.1"defaultConfig {applicationId "com.gradleforandroid.gettingstarted"minSdkVersion 14targetSdkVersion 22versionCode 1versionName "1.0"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}} } dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])compile 'com.android.support:appcompat-v7:22.2.0' }
基础任务
$ ./gradlew assemble -为所有构建类型创建apk $ ./gradlew check 运行所有的检查,比如说Android Lint,如果发现问题可终止任务 $ ./gradlew build 运行以上两个任务 $ ./gradlew clean -清除生成的apk ++++ $ ./gradlew connectedCheck - 在设备上运行测试 $ ./gradlew deviceCheck - 远程设备运行测试 $ ./gradlew installDebug/installRelease - 在设备商安装指定版本 $ ./gradlew uninstall - 卸载
Build Types不同版本的参数设置 - BuildConfig/Resource Value
android {buildTypes {debug {buildConfigField "String", "API_URL","\"http://test.example.com/api\""buildConfigField "boolean", "LOG_HTTP_CALLS", "true"resValue "string", "app_name", "Example DEBUG"}release {buildConfigField "String", "API_URL", "\"http://example.com/api\""buildConfigField "boolean", "LOG_HTTP_CALLS", "false"resValue "string", "app_name", "Example"}} }
全局设置(项目根目录的build.gradle)
allprojects {apply plugin: 'com.android.application'android {compileSdkVersion 22buildToolsVersion "22.0.1"} }
设置全局参数
ext {compileSdkVersion = 22buildToolsVersion = "22.0.1" }
在MyApp/app/build.gradle里面使用参数
android {compileSdkVersion rootProject.ext.compileSdkVersionbuildToolsVersion rootProject.ext.buildToolsVersion }
默认任务(MyApp/build.gradle)
defaultTasks 'clean', 'assembleDebug'
三) 依赖管理
仓库
预设配置仓库repositories {mavenCentral()jcenter()mavenLocal() }
远程仓库
repositories {maven {url "http://repo.acmecorp.com/maven2"credentials {username 'user'password 'secretpassword'}}ivy {url "http://repo.acmecorp.com/repo"} }
本地仓库
repositories {maven {url "../repo"} }
本地依赖
项目文件依赖dependencies {compile fileTree(dir: 'libs', include: ['*.jar']) }
原生库结构与配置
# 结构: app├── AndroidManifest.xml└── jniLibs├── armeabi│ └── nativelib.so├── armeabi-v7a│ └── nativelib.so├── mips│ └── nativelib.so└── x86└── nativelib.so # 配置: android {sourceSets.main {jniLibs.srcDir 'src/main/libs'} }
Libray项目
# 修改Android插件: apply plugin: 'com.android.library' # settings.gradle新增libray项目: include ':app', ':library' # app内引用library项目: dependencies {compile project(':library') }
依赖概念
<待续>
Android Studio内添加依赖
四)构建变体
<待续>
五)多模块构建管理
- 加速构建
在gradle.properties里面添加: org.gradle.parallel=true
六) 测试
单元测试
使用JUnit# 结构: app └─── src ├─── main │ ├─── java│ │ └─── com.example.app│ └───res└─── test└─── java└─── com.example.app # 依赖: dependencies {testCompile 'junit:junit:4.12' }
使用Robolectric
# 依赖: apply plugin: 'org.robolectric'dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])compile 'com.android.support:appcompat-v7:22.2.0'testCompile 'junit:junit:4.12'testCompile'org.robolectric:robolectric:3.0'testCompile'org.robolectric:shadows-support:3.0' } # Demo: @RunWith(RobolectricTestRunner.class) @Config(manifest = "app/src/main/AndroidManifest.xml", sdk = 18) public class MainActivityTest {@Testpublic void clickingButtonShouldChangeText() {AppCompatActivity activity = Robolectric.buildActivity(MainActivity.class).create().get();Button button = (Button) activity.findViewById(R.id.button);TextView textView = (TextView) activity.findViewById(R.id.label);button.performClick();assertThat(textView.getText().toString(), equalTo(activity.getString(R.string.hello_robolectric)));} }
功能测试
使用Espresso<待续>
测试覆盖度
使用Jacoco<待续>
七)创建任务与插件
<待续>
八)配置CI
<待续>
九)自定义配置 - 进阶
- 缩减apk文件大小
使用ProGuardandroid {buildTypes {release {minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}} }
收缩资源文件 - 自动 (<手动待续>)
android {buildTypes {release {minifyEnabled trueshrinkResources true}} }
加速构建
org.gradle.parallel=true # 并行构建 org.gradle.daemon=true # 开启Gradle守护进程 org.gradle.jvmargs=-Xms256m -Xmx1024m # 配置JVM<参照下图>
使用Profiling
<待续>
使用Jack(Java Android Compiler Kit) and Jill(Jack Intermediate Library Linker)
<待续>
忽略Lint
android {lintOptions {abortOnError false} }
使用Ant
<待续>
app打包 - 进阶
分割apkandroid {splits {density {enable trueexclude 'ldpi', 'mdpi'compatibleScreens 'normal', 'large', 'xlarge'}} } 生成结果: app-hdpi-release.apk app-universal-release.apk app-xhdpi-release.apk app-xxhdpi-release.apk app-xxxhdpi-release.apk
引用:
- 《Gradle for Android》
Android Studio中Gradle使用详解相关推荐
- Android Studio build.gradle配置详解
Android Studio是采用gradle来构建项目的,gradle是基于groovy语言的,如果只是用它构建普通Android项目的话,是可以不去学groovy的.当我们创建一个Android项 ...
- android studio gradle3.3,Android studio 3.2 升级详解及Gradle配置
Android studio 3.2 升级详解及Gradle配置 发布时间:2018-09-29 15:36, 浏览次数:618 , 标签: Android studio Gradle 一直在使用An ...
- 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)
. 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...
- 《Android Studio应用开发实战详解》——导读
本节书摘来自异步社区<Android Studio应用开发实战详解>一书中的目录,作者 王翠萍,更多章节内容可以访问云栖社区"异步社区"公众号查看 目 录 第1章 An ...
- libraries 和android runtime之间的关系,《Android Studio应用开发实战详解》——第1章,第1.3节Android系统架构...
本节书摘来自异步社区<Android Studio应用开发实战详解>一书中的第1章,第1.3节Android系统架构,作者 王翠萍,更多章节内容可以访问云栖社区"异步社区&quo ...
- 《Android Studio应用开发实战详解》——第1章,第1.2节Android系统基础
本节书摘来自异步社区<Android Studio应用开发实战详解>一书中的第1章,第1.2节Android系统基础,作者 王翠萍,更多章节内容可以访问云栖社区"异步社区&quo ...
- 《Android Studio应用开发实战详解》——第1章,第1.4节Android和Linux的关系
本节书摘来自异步社区<Android Studio应用开发实战详解>一书中的第1章,第1.4节Android和Linux的关系,作者 王翠萍,更多章节内容可以访问云栖社区"异步社 ...
- 《Android Studio应用开发实战详解》——第1章,第1.5节Android开发学习路线图
本节书摘来自异步社区<Android Studio应用开发实战详解>一书中的第1章,第1.5节Android开发学习路线图,作者 王翠萍,更多章节内容可以访问云栖社区"异步社区& ...
- 《Android Studio应用开发实战详解》——第1章,第1.1节移动智能设备系统发展现状...
本节书摘来自异步社区<Android Studio应用开发实战详解>一书中的第1章,第1.1节移动智能设备系统发展现状,作者 王翠萍,更多章节内容可以访问云栖社区"异步社区&qu ...
最新文章
- 中国研制量子计算机成功,中国宣布研发量子计算机,这次很可能真的要领先世界!速度太快!...
- python爬虫提取人名_python爬虫—爬取英文名以及正则表达式的介绍
- 目标检测学习笔记--DSSD算法
- 分享大麦UWP版本开发历程-03.GridView或ListView 滚动底部自动加载后续数据
- 检查本地服务器是否配置成功
- oracle awr报告提取,oracle AWR报告提取分析
- MySQL 中的重做日志,回滚日志以及二进制日志的简单总结
- LeetCode 518. 零钱兑换 II(动态规划)
- 【计算机网络复习 数据链路层】3.4.1 流量控制与可靠传输机制
- Spring Boot中使用模板引擎参数化传参数
- Ubuntu环境搭建一:安装tftp服务器程序
- Python3基础12(collections、struct、itertools、chardet等的使用)
- ASP.NET MVC 利用Razor引擎生成静态页
- 实验12:Problem A: 你会定义类吗?
- python ide_Python id()
- Code snippet of the day : Get Chinese Spell in C#
- 关于艾宾浩斯曲线的一点思考
- Java中成员变量和局部变量在内存中的分配
- 建筑企业“出租脚手架”究竟如何缴纳增值税
- 弧齿锥齿轮零件图_弧齿锥齿轮画法类别
热门文章
- 触底事件_福建双外到位欲触底反弹,李宁回应易建联扔鞋事件,吉林主帅表态...
- mysql root 注入_sql注入入门之mysqlroot权限下的注入利用方式
- 文件不能自动求和_Excel求和公式函数的使用方法教程
- no判断 python yes_Python 内置类型全解析(1)
- flutter offset_牛笔!自己用Flutter撸一个天气APP
- Hadoop入门进阶步步高(二)-目录介绍
- 大数据学习笔记53:Flume Sink Processors(Flume接收器处理器)
- 大数据学习笔记27:MR案例——多输入源处理成绩
- 大数据学习笔记20:MR案例——按电影热度值排序
- VB讲课笔记07:控制结构