将现有的android项目迁移到gradle (范例)
Zas12357386
・9 分钟阅读
Android ant
在引入Android Studio之前,android应用程序使用ant (在Eclipse和思想中)构建,
我已经有了使用ant构建的现有android应用程序,接下来我将演示如何将应用程序迁移到Gradle中,
我已经为基于ant的项目使用IntelliJ IDEA,并将Android Studio与Gradle android项目一起使用,
现有构思项目
- 下面是我的退出项目(使用ant构建)
- 项目名称是SenZors,它包含src,res,lib,assert等,
基于Gradle的项目结构
- 基于Gradle的项目如下所示
└── project/
└── module/
└── build.gradle/
└── build.gradle
└── settings.gradle
主项目包含
build.gradle
和settings.gradle
文件,每个模块包含单独的
build.gradle
文件,
项目与模块
项目是完整的Android应用。 项目可以由一个或多个模块组成。
模块是可以独立生成。测试或调试的项目的组件,
有三种类型的模块
- Java库模块
- Android库模块
- Android应用程序模块
在上面的项目结构
module
是一个应用程序模块,许多Android应用程序只包含一个应用程序模块。 构建系统为应用程序模块生成一个APK包,
更多信息- http://developer.android.com/sdk/installing/studio-build.html,
settings.gradle文件
- 这个文件告诉gradle要构建哪些模块,例如,SenZors,
include ':senz'
- 这指定在构建SenZors项目时包含
senz
模块,
顶层build.gradle文件
它是顶级gradle构建文件,它可以用来定义所有子模块通用的配置选项,
我将在以后给出有关此
build.gradle
文件内容的详细信息,
模块文件的build.gradle
每个模块包含单独的
build.gradle
文件,因此模块可以独立构建,它可以定义android特定的设置,依赖设置。
我将在以后讨论有关此文件内容的更多详细信息,
Gradle应用程序模块结构
- 我的主应用程序模块名是
senz
,
└── senz/
└── build/
└── libs/
└── src/
└── main/
└── java/
└── res/
└── asserts/
└── build.gradle
- 将现有ant项目迁移到gradle时,我们需要根据gradle项目结构移动ant项目内容,
将SenZors迁移到gradle
- 主要项目是
SenZors
,我使用senz
作为主要应用模块,
定义项目结构
- 下面是创建项目结构的步骤
1. Create new application module directory `senz` in `SenZors`
mkdir -p SenZors/senz/src/main/java
2. Move source codes to senz
mv SenZors/src/com SenZors/senz/src/main/java
3. Move res and asserts
mv SenZors/res SenZors/senz/src/main
mv SenZors/asserts SenZors/senz/src/main
4. Move libs
mv SenZors/libs SenZors/senz/
5. Move AndroidManifest
mv SenZors/AndroidManifest.xml SenZors/senz/src/main
6. Create gradle build files
touch SenZors/build.gradle
touch SenZors/settings.gradle
touch SenZors/senz/build.gradle
定义settings.gradle
- 定义要在settings.gradle文件(我们只有一个应用程序模块senz )中生成的模块,
include ':senz'
顶层build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.9.+'
}
}
allprojects {
repositories {
mavenCentral()
}
}
# Gradle wrapper task
task wrapper(type: Wrapper) {
gradleVersion = '1.12'
}
- 这里有两个主要部分
buildscript设置
在这里
buildscript {. .. }
配置驱动生成的代码它声明它使用Maven中央存储库,并且在Maven工件上存在类路径依赖项,
这个工件是包含Gradle插件的库在版本
0.9.+
中包含了,
Gradle包装任务
Gradle包装器是启动Gradle构建的首选方式,
Gradle包含用于Windows支持的批脚本和shell script支持os x和Linux,
这些脚本允许你在不需要在系统(这对于实现与
jenkins
的集成非常有帮助)上安装Gradle的情况下运行Gradle构建,在上面的gradle中,我们定义了gradle包装器,带有gradle版本1.12 (
gradleVersion
是你希望项目使用的版本),现在执行以下命令
gradle wrapper
- 此命令将在项目的root中生成更多的文件,
└── SenZors
└── gradlew
└── gradlew.bat
└── gradle
└── wrapper
└── gradle-wrapper.jar
└── gradle-wrapper.properties
. ..
└── build.gradle
└── settings.gradle
第一次运行指定版本的Gradle包装器时,它会下载,并且缓存该版本的Gradle二进制文件,
这些Gradle包装器文件被设计为提交到源代码管理。
然后,谁可以在不需要首先安装和配置特定版本的Gradle的情况下构建项目,
现在你可以使用
./gradlew build
来构建项目,有关Gradle包装器的更多信息- http://www.gradle.org/docs/current/userguide/gradle_wrapper.html,
senz模块build.gradle文件
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion" 19.1.0"
defaultConfig {
minSdkVersion 14
targetSdkVersion 19
versionCode 1
versionName" 1.0"
}
buildTypes {
release {
runProguard false
debuggable false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
debug {
debuggable true
}
}
}
dependencies {
compile 'com.android.support:appcompat-v7:19.1.0'
compile 'com.android.support:support-v4:19.1.0'
compile 'com.google.android.gms:play-services:5.+'
compile fileTree(dir: 'libs', include: ['*.jar'])
}
- 这里有几个有趣的东西
应用插件:'android"'
- 它应用
Android plugin for Gradle
到此版本
Android特定生成选项
android %7B...%7D配置所有android特定的构建选项,
它指定SDK版本,发布/调试生成配置。
依赖项
依赖项元素在android元素的外部和之后
此元素声明此模块的依赖项
与项目同步
打开Android Studio并导入SenZors项目。 它将同步gradle android项目
一定要打勾
use default gradle wrapper
Android Studio首选项中的选项
- Finalised项目目录结构如下所示
生成自
# build project from command line
./gradlew build
# list all available gradle tasks
./gradlew tasks
引用
- http://ryanharter.com/blog/2013/07/17/migrating-android-projects-to-gradle/,
- http://developer.android.com/sdk/installing/studio-build.html,
- http://spring.io/guides/gs/gradle-android/,
- http://gmariotti.blogspot.it/2013/10/common-tips-about-gradle.html,
- http://tools.android.com/tech-docs/new-build-system/user-guide,