Android Studio中Gradle使用详解
来源:互联网 发布:人民币大小写转换软件 编辑:程序博客网 时间:2024/06/05 19:41
原文出处: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 22
buildToolsVersion
"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 22
buildToolsVersion
"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 22
buildToolsVersion
"22.0.1"
defaultConfig {
applicationId
"com.gradleforandroid.gettingstarted"
minSdkVersion 14
targetSdkVersion 22
versionCode 1
versionName
"1.0"
}
buildTypes {
release {
minifyEnabled
false
proguardFiles 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 22
buildToolsVersion
"22.0.1"
}
}
设置全局参数
ext {
compileSdkVersion = 22
buildToolsVersion =
"22.0.1"
}
在MyApp/app/build.gradle里面使用参数
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion 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 {
@Test
public 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文件大小
使用ProGuard
android {
buildTypes {
release {
minifyEnabled
true
proguardFiles getDefaultProguardFile(
'proguard-android.txt'
),
'proguard-rules.pro'
}
}
}
收缩资源文件 - 自动 (<手动待续>)
android {
buildTypes {
release {
minifyEnabled
true
shrinkResources
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打包 - 进阶
分割apk
android {
splits {
density {
enable
true
exclude
'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
- Android Studio中Gradle使用详解
- Android Studio中Gradle使用详解
- Android Studio中Gradle使用详解
- Android Studio中Gradle使用详解
- Android Studio中Gradle使用详解
- Android Studio中Gradle使用详解
- Android Studio中Gradle使用详解
- Android Studio中Gradle使用详解
- Android Studio中Gradle使用详解
- Android Studio中Gradle使用详解
- Android Studio中Gradle使用详解
- Android Studio中Gradle使用详解
- Android Studio中Gradle使用详解
- Android Studio中Gradle使用详解
- Android Studio中build.gradle文件详解
- Android Studio中build.gradle详解
- Android Studio 使用本地gradle配置详解
- ANDROID STUDIO Gradle详解
- UITextView控件的用法详解
- 多线程例子
- thymeleaf常用的一些标签属性
- iOS开发工具——Reveal:iOS的UI设计分析利器
- (二)使用IDLE进行编程
- Android Studio中Gradle使用详解
- UIView详解
- Facebook开源项目:我们为什么要用Fresco框架?
- OGRE源代码编译超详细步骤
- OGRE学习记录-Dot3Bump例子
- Autodesk FBX
- 《git权威指南》第4章git初始化--读书笔记
- 强制弹出的键盘是系统键盘而不是第三方的键盘
- 漫谈C指针第三讲---指针是什么东西