迁移ADT/ANT构建的Android项目至Gradle,a walk through。
| LibModule | 配置更新 | 9 months ago | |
| app | 配置更新 | 9 months ago | |
| gradle/wrapper | 配置更新 | 9 months ago | |
| screenshots | readme | a year ago | |
| .gitignore | 重建gradle 结构的示例 | a year ago | |
| LICENSE.TXT | LICENSE | a year ago | |
| README.md | 一些配置更新 | 9 months ago | |
| build.gradle | 配置更新 | 9 months ago | |
| settings.gradle | 加入Module 示例 | a year ago |
README.md
Migrate To Gradle 手动迁移ADT 的ANT结构工程至Gradle
前言
现在Android Studio 已经发布正式版,其带来的新的功能对于原来的eclipse 用户是非常友好的,只需要指定目录就能自动将代码导入并配置好相关的Gradle 脚本。 我们可以用正式版的AS中的可视化插件轻松的将旧工程升级到Gradle 构建系统下,而这个项目旨在向大家介绍Gradle 的Android 工程的结构和常用配置。
工具
1、Android Studio
2、Intellij IDEA
了解Gradle
Gradle 以module 来管理project,在Gradle 构建的Gradle project中通常包含application module(com.android.application),与library module(com.android.library)两种module。
在Gradle 的project 中需要使用,基本上全都使用.gradle 文件来配置,是一个脚本化的工程构建,而非原先ADT中那种eclipse 的或视化构建。
迁移工程
1、创建一个文件夹来放你的工程,比如Migrate to Gradle。
2、Wrapper:你需要Gradle 的Wrapper 来下载和管理当前项目使用的Gradle 的版本,当你的环境中没有配置Gradle 时它可以自动下载Gradle 并配置到你的环境中去。 如果你在天朝,那么配置Gradle 的时间可能会稍长,所以我一般都是直接从Android Studio 新建的工程中拷贝Wrapper 出来使用,以避免重复配置不同版本的Gradle。
而如果你不想使用工具中的版,你还可以进行其它配置,见下一点。
3、在文件夹中建一个app (或者其它什么名字)文件夹来存放你的application module,请将你原先的工程文件拷贝到app 文件夹中去。然后你还需要一个build.gradle 和settings.gradle文件。看起来如下图:

两个文件的配置如下:
build.gradle -- 根目录的build.gradle 文件一般用来配置整个工程
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.14.2'
}
}
allprojects {
repositories {
jcenter()
}
}
// 如果你想配置你自己制定的Gradle 版本,加入以下配置,然后在导入工程时选择use customizable gradle wrapper
task wrapper(type: Wrapper) {
gradleVersion = '2.1'
}
settings.gradle -- 根目录的settings.gradle 文件用来制定哪个文件夹为module,以“:”符号给目录分级
include ':app' // 根目录下的一级目录
//include ':libs:module0' // 根目录下的二级目录,如果你需要这个module 的话
4、配置你的app module:在其中加入build.gradle,具体配置如下:
buildscript {
repositories {
jcenter() //你所使用的仓库
}
dependencies {
classpath 'com.android.tools.build:gradle:0.14.2' // Gradle 的Android 插件版本
}
}
apply plugin: 'com.android.application' // 导入Android Application 插件,将此module 配置成application module
repositories {
jcenter() // 仓库
}
android {
compileSdkVersion 21 // 使用SDK的版本,请配置你SDK中有的最新版本
buildToolsVersion "21.1.1" // buildTools 版本,你SDK中有哪个版本配哪个版本,建议更新到最新的版本
defaultConfig {
applicationId "com.github.ShinChven.migratetogradle" // 原来的包名,现在叫applicationId
minSdkVersion 9
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes { // 配置打包的版本
release { // 发行版
runProguard false // 是否混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' // 默认混淆文件
proguardFiles 'proguard-project.txt' // 自定义混淆文件
}
debug { // debug 版
}
}
sourceSets { // 如果你的工程是从ANT 中迁移过来,可以使用sourceSets 来配置工程结构,如果你使用的是标准Gradle 结构,可以不需要配置。
main {
java.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
jniLibs.srcDirs = ['libs'] // 配置此处才会打包jni 的.so 文件
jni.srcDirs=['jni']
manifest.srcFile 'AndroidManifest.xml'
}
}
}
/**
* https://gradle.org/docs/current/dsl/org.gradle.api.artifacts.dsl.DependencyHandler.html
*/
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.0'
compile 'com.android.support:support-v4:21.0.0'
compile(project(':LibModule')) // 包含module
}
完成这些你的工程就会看起来像这样:

运行工程
1、open project

2、选中build.gradle 文件

3、导入:
project 中包含Wrapper 选Use default gradle wrpper
在project 的task 配置来自动配置gradle 选Use customizable gradle wrapper
Use local Gradle distribution 为使用系统变量中配置的gradle

4、如果你是第一次运行Android Studio ,那么请先感谢郭嘉,然后等待配置完成
jar包去重
如果你运气不好遇到了下图,说明你的工程中包含的v4 包或者其它什么包在你的dependencies 配置中出现了重复引用的冲突,你需要去重:

如果使用Gradle 构建工程,建议将libs 文件夹中的jar 包都转换成gradle dependencies(依赖),而不是直接存放在文件夹中。两者不可同时存在,否则因为包名、文件重复则报错。
例如,android-support-v4.jar 你可以在build.Gradle 中这样配置
dependencies { // 依赖配置
compile 'com.android.support:support-v4:21.0.0'
}
去除冲突的依赖
你所添加的那些依赖(dependencies)中的项目的可能会引用同一个项目,却是不同版本,在build 的时候可能会出错,如果要去除冲突,配置如下
compile ('com.github.xxx:1.0'){
exclude module: 'appcompat-v7'
}
build.Gradle 另外的一些配置,Good luck.
配置中的版本号,请根据最新sdk 中的版本进行配置
bBuildscript { // 这段配置如果放入project 级的build.gradle 中则可以在module 中省掉。
repositories {
jcenter()
}
dependencies { // 加入android build tools
classpath 'com.android.tools.build:gradle:1.1.1'
}
}
apply plugin: 'com.android.application'
repositories { // 配置仓库
jcenter()
}
android { // android 工程配置
compileSdkVersion 22
buildToolsVersion "22.0.1"
signingConfigs { // 签名,你可以配置多个签名,然后再在buildTypes 进行指定。
release {
storeFile file("keystore\\key.jks") // 签名文件存放路径
storePassword "your.password"
keyAlias "your.alias"
keyPassword "password"
}
}
packagingOptions { // 打包配置
exclude 'META-INF/LICENSE' // 排除一些文件
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
lintOptions { // 打包时,也不因为出错中断。
checkReleaseBuilds false
abortOnError false
}
defaultConfig { // SDK 和版本号配置
minSdkVersion 8
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes { // 打包版本配置
release {
signingConfig signingConfigs.release // 指定签名配置
runProguard false // 是否进行Proguard
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
debug {
// signingConfig signingConfigs.release // 如果你的debug版本也需要签名,请将这一行配置解开注释
}
}
sourceSets { // 工程结构配置
main {
java.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
jniLibs.srcDirs = ['libs'] // 配置此处才会打包jni 的.so 文件
manifest.srcFile 'AndroidManifest.xml'
}
}
}
dependencies { // 依赖配置
compile fileTree(dir: 'libs', include: ['*.jar']) // 整合所有libs 文件夹中的jar 包
compile 'com.android.support:support-v4:21.0.0'
compile 'com.android.support:gridlayout-v7:21.0.0'
compile 'com.android.support:appcompat-v7:20.0.0'
compile 'com.loopj.android:android-async-http:1.4.5' // Maven 中存在的项目
compile('com.fasterxml.jackson.core:jackson-databind:2.4.1.3') {
// 需要配置 packagingOptions 'META-INF/LICENSE' NOTICE
transitive = true
}
}
apply plugin: 'idea' // 加载idea 插件
idea {
module {
downloadJavadoc = true // 下载依赖项目的文档
downloadSources = true // 下载依赖项目的源码
}
}
library modue build.gradle 文件示例
请注意,以下的配置的某些版本号已经过时,请根据自己的sd配置最新的版本号
apply plugin: 'com.android.library' // 配置为library
repositories {
jcenter()
}
android {
compileSdkVersion 21
buildToolsVersion "21.1.1"
defaultConfig {
minSdkVersion 9
targetSdkVersion 21
}
sourceSets { // 工程结构配置
main {
java.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
jniLibs.srcDirs = ['libs'] // 配置此处才会打包jni 的.so 文件
manifest.srcFile 'AndroidManifest.xml'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.0'
compile 'com.android.support:support-v4:21.0.0'
}
local.properties文件
在OS X 系统中,你的工程需要这个文件来告诉工具的gradle 插件,你的sdk在哪。如果不进行配置的话将不能使用gradle 插件中的clean build 等方便的功能。
echo sdk.dir=$ANDROID_HOME >local.properties
迁移ADT/ANT构建的Android项目至Gradle,a walk through。的更多相关文章
- 加速 Gradle 构建大型 Android 项目的方法[转]
加速 Gradle 构建大型 Android 项目的方法 时间 2016-03-14 20:38:00 Mystra 原文 http://www.wangchenlong.org/2016/03/ ...
- Ant—使用Ant构建简单Java项目(三)
博客<Ant-使用Ant构建简单Java项目(二)>我们简化了运行Test类中main方法须要运行的命令,本博客来介绍一下如何使build.xml文件和当中使用property标签定义的属 ...
- Android应用开发高效工具集1---ant构建简单Android项目
本文转载于:http://blog.csdn.net/lincyang/article/details/40950153 在java编译那些事儿中提到了用ant去编译Java项目,今天扩展到用它来构建 ...
- Ant构建和部署项目(转)
原文地址: http://www.blogjava.net/amigoxie/archive/2007/11/09/159413.html Ant是一个Apache基金会下的跨平台的构件工具,它可以实 ...
- JQuery Mobile+cordova构建一个Android项目
1.安装Android开发环境 Android开发环境的安装,现在主要是由于不能访问谷歌站点,在windows下在host文件中添加一个对应的74.125.195.190 dl-ssl.goo ...
- cocos构建的android项目的返回键相应
@Override public boolean dispatchKeyEvent(KeyEvent event) { //返回键 cocosActivity不相应onbackPressed和onKe ...
- 为android项目集成maven
为什么要为android项目增加maven集成功能呢?这里我想到几个主要理由: 部署测试人员和开发人员的角色分离,让他们摆脱eclipse开发环境设置android sdk环境,直接在服务器上运行一个 ...
- 项目androidAnt编译打包Android项目
时间紧张,先记一笔,后续优化与完善. Ant编译打包Android项目 在Eclipse中对Android项目停止编译和打包如果项目比较大的话会比较慢,所以改为Ant工具来停止编译和打包 Ant环境配 ...
- [Android] 基于 Linux 命令行构建 Android 应用(一):关于 Android 项目
关于 Android 项目 项目是保存源代码和资源文件的容器. 谷歌提供的 Android SDK 工具只能对具有固定目录结构的项目进行编译和打包.因此强烈建议使用 Eclipse + ADT 或者 ...
随机推荐
- python环境准备
一.环境准备. 1.安装python3.5.2(勾选环境变量),python2.7.12 2.设置环境变量 (要求命令行输入python,进入python2命令行,打python3时,进入python ...
- Python之路,Day26-----暂无正在更新中
Python之路,Day26-----暂无正在更新中
- jquer “$” 扩展(笔记)
/** * Created by shanruo on 16-03-10. */ (function ( $ ){ $.extend ({ /* * 根据参数名获取参数 @name String 参数 ...
- Java编程思想-泛型-简单泛型例子
基本类型无法做为类型参数 代码如下: /** * */ package test.thinkinjava.Generics; import java.util.ArrayList; import ja ...
- Web弹框类
using System; using System.Text; namespace Core { /// <summary> /// MessageBox 的摘要说明. /// < ...
- 使用第三方框架 Masonry 实现自动布局
使用第三方框架 Masonry 实现自动布局 时间:2015-02-10 11:08:41 阅读:4595 评论:0 收藏:0 [点我收藏+] 标签: 由于前两 ...
- MySQL 序列使用
MySQL 序列使用 MySQL序列是一组整数:1, 2, 3, ...,由于一张数据表只能有一个字段自增主键, 如果你想实现其他字段也实现自动增加,就可以使用MySQL序列来实现. 本章我们将介绍如 ...
- emmt html生成
html:5 或 ! html:5 或!:用于HTML5文档类型 html:xt:用于XHTML过渡文档类型 html:4s:用于HTML4严格文档类型 常用过渡文档类型 html:xt 直接c ...
- gulpfile的结构
使用了 yargs 用于获取启动参数,针对不同参数,切换任务执行过程时需要,本项目中的useCache和useSess path 不明,貌似是用来将某个目录中的文件 ...
- fedora 安装nginx+php+mysql
环境 fedora 最新版 20 参考:http://www.cnblogs.com/beceo/archive/2012/08/21/2648378.html ------------------- ...