文档章节

Android Gradle编译学习日记之二(使用 Gradle 编译 Eclipse,引入依赖资源以及迁移 Android Studio)

Kifile
 Kifile
发布于 2014/12/13 19:09
字数 1964
阅读 217
收藏 1

大家如果喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢

转载请标明出处(http://my.oschina.net/u/1785888/blog),再次感谢


Android Gradle编译学习日记(基于 Android Studio 1.0):

 

Android Gradle编译学习日记之一(搭建 Gradle 环境以及编译 Android 应用)



在上一篇文章中,我简单介绍了一个 Gradle 环境变量的搭建,以及如何使用 Gradle 编译 Android 项目,但是对于国内的大部分开发人员来说,我们通常都是使用 Eclipse进行 Android 开发,对于大部分人而言从一个平台迁移到另一个平台所花费的成本太高。因此本文就将介绍如何通过 Gradle 编译 Eclipse 代码结构下的Android 项目,以及将 Eclipse 下的 Andorid 项目迁移到 Android Studio 下,让大家更加轻松的转移项目代码。

一、在 Eclipse 下创建一个 Android 项目

相信大家都不希望我再这里演示如何在 Eclipse 下创建一个 Android 项目,因此我也不再花费时间在这上面,先上传一张创建后的项目结构图:


再来一张 Gradle 的默认目录结构图:


通过对比两个目录结构图,我们可以发现,Eclipse 默认的代码目录结构和 Gradle 支持的代码目录结构是不同的,因此,如果我们使用上一篇文章中的方法直接进行 Android 项目编译,会发现无法进行正常编译,原因就是没有找到对应的 Android 配置文件。


二、配置 Gradle 的资源路径

为了让 Gradle 能够找到响应的源文件和资源文件,我们先看一下Gradle 的目录结构,从第二张图中我们能够发现 Gradle 的默认编译结构中将程序源码分为了几个不同的部分:java、jni、rs、aidl,而 Eclipse 的目录中java 和 aidl 是放置在同一个目录下的,所以我们需要在 build.gradle 文件根据项目结构定义好对应的路径。

定义路径位置的代码如下:

android {
    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')
    }
}


请把 sourceSets 部分添加到 build.gradle 中的 android 域内。

其实 Gradle 默认的源码路径设置位置应该是在最外层,但是由于Andorid 插件拥有自己的代码设置,因此我们将 sourceSets 放置到 android 域内。

之后执行 

gradle check


你现在应该能够进行正常的编译工作了,具体如何编译请查看我上一篇文章。


三、引入项目依赖包

What?你出错了,不可能吧?

当然其实这是可能的,注意查看第一张图,里面除了 TestGradle 目录以外,还有一个 appcompat_v7,这是项目的依赖包,如果你不进行配置,那么 Android 编译时无法找到他,自然会报错。

现在我们来看看如何将依赖包引入 Android,让他能够正常编译

(1)使用 maven 

之前我就说过,Gradle 能够使用 Maven 的几乎所有特性,因此当我们需要使用依赖包的时候,而且该依赖包在 maven 中央库中存在的时候,我们不妨直接在配置文件中配置,配置方法也十分简单地说,以 appcompat_v7包为例,在 build.gradle 的最外层加入以下信息:

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

compile 代表着你希望在编译的时候将某个 maven 包打入程序中,而后面的信息则是对应 maven 包的相关信息,方便从 maven 中央仓库中进行获取。


然后你再执行一下:

gradle check


现在是不是提示你程序能够正常打包了呢。

(2)引入 jar 包

有时候我们在 libs 目录下有存放 jar 包类型或者 so 链接库类型的依赖资源,但是当你进行编译时,你会发现找不到这些资源,原因只有一个: Gradle 不知道你需要编译的资源对象在哪里,因此我们需要手动在 build.gradle 进行路径配置,大致方法与上面的类似,我就简单叙述一下就好了。

打开你的 build.gradle,在 dependencise 域,没错,就是刚才我们添加 appcompa_v7包的那个域,在域中我们加入一下代码:

compile fileTree(dir: 'libs', include: ['*.jar'])


该代码就将所有在 libs 目录下的 jar 包引入了,如果要引入 so 库,再加一句

compile fileTree(dir: 'libs', include: ['*/*.so'])


(3)引入依赖项目

如果你实在找不到对应的 maven 项目或者不能单纯使用 jar 包进行引入,实在需要使用一个依赖工程,那我们就得考虑通过将依赖项目先转换为 Gradle 类型的 Android Library,然后再进行项目关联。

面对这种情况,我们可以像 Eclipse 一样将应用项目和依赖工程放在同一目录下,方便关联。

我们先将 TestGradle 中 build.gradle 中关于 appcompat 依赖包得引用去掉

在顶层目录中,我们建立一个 build.gradle 和 setting.gradle 文件分别存放项目依赖

build.gradle 用于存放通用的配置信息,例如通用依赖:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}


setting.gradle 用于存放项目信息,例如这里,我们可以像这样命名:

include ':TestGradle',':appcompat_v7'


TestGradle 和 appcompat_v7分别为应用项目和依赖工程的名称,如果你的工程是在某个子目录下,那么你可以使用类似于‘:libraries:lib1'这种形式标明在 libraries 文件夹下的 lib1文件夹也是一个 Gradle 项目

之后我们进入 appcomp_v7目录,建立对应的 build.gradle 配置文件,由于我们在上层目录中已经创建了一个 build.gradle 并且配置了通用的依赖信息,因此在这个配置文件中我们可以不必写入 buildscript 的相关属性。

apply plugin: 'com.android.library'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"
}


这里需要留意的是,这里的插件类型是' com.android.library' 标明他是一个依赖包。另外如果你的项目配置是 Eclipse 目录类型,请根据上文,配置对应的源码位置。

如此一来,你已经配置好了相关的依赖工程,接下来我们需要将这个依赖工程配置到主工程中。

方法为在主工程 build.gradle 中加入

dependencies {
    compile project(':appcompat_v7')
}

之后你再使用 Gradle 命令行就能够针对本地的依赖库进行编译。


四、使用 Android Studio 引入工程

这里简单说说如何通过 Android Studio 使用 Eclipse 的项目目录结构进行开发。

其实方法并不复杂,通过上面的步骤我们已经成功的配置好了一个 Gradle 工程的相关环境,因此我们只需要通过点击 File->ImportProject,选中 appcompat_v7和 TestGradle 所在的父目录即可,然后一路 Next,之后,你能看到你的项目被引入到了 Android Studio 中


除了代码结构以外,与 Android Studio 建的一模一样有没有!!!


本篇博文就到这里,主要介绍了如何通过建立 Gradle配置文件将 Eclipse 项目彻底导入 Android Studio。希望大家喜欢,看到这里的点个赞可好。

© 著作权归作者所有

Kifile
粉丝 0
博文 2
码字总数 3353
作品 0
深圳
程序员
私信 提问
Android Studio vs Eclipse:你需要知道的那些事

转用Android Studio开发前,你需要知道 我写的这个指引里,包含了一些当你要把Eclipse项目转到Andorid Studio前需要知道的基本信息。如果你有一个大型项目还没完成从Eclipse到Android Studi...

oschina
2014/03/12
11.5K
23
android项目两种构建方式的整合(Eclipse/idea和Android Studio)

github文章备份,获得更好的阅读体验 android的两种构建方式 目前android主要有两种构建方式,一种基于ant(传统的),另一种是13年Google/IO上新推出基于Gralde的构建(Android Studio)。从...

龙凯
2014/02/07
8.7K
0
android studio 项目结构解析

1、android系统架构 android的系统结构一共可以分为四个,分别为:Linux内核层、系统运行库层、应用框架层和应用层 1.1 Linux内核层 Android系统是基于Linux内核的,这一层为Android设备的底...

西米小娅
2018/09/12
99
0
Gradle和Gradle插件

文章是翻译整理的官网文档developer.android/studio/build/ 一、Gradle和Gradle插件 Gradle:Gradle是一款帮助开发人员更快更好的编译、自动化运行和分发软件的工具。Gradle具有无与伦比的通...

都有米
2018/06/19
0
0
error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己
2018/06/21
64
0

没有更多内容

加载失败,请刷新页面

加载更多

golang-字符串-地址分析

demo package mainimport "fmt"func main() {str := "map.baidu.com"fmt.Println(&str, str)str = str[0:5]fmt.Println(&str, str)str = "abc"fmt.Println(&s......

李琼涛
今天
4
0
Spring Boot WebFlux 增删改查完整实战 demo

03:WebFlux Web CRUD 实践 前言 上一篇基于功能性端点去创建一个简单服务,实现了 Hello 。这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD WebFlux 应用,让开发更方便。这里...

泥瓦匠BYSocket
今天
6
0
从0开始学FreeRTOS-(列表与列表项)-3

FreeRTOS列表&列表项的源码解读 第一次看列表与列表项的时候,感觉很像是链表,虽然我自己的链表也不太会,但是就是感觉很像。 在FreeRTOS中,列表与列表项使用得非常多,是FreeRTOS的一个数...

杰杰1号
今天
8
0
Java反射

Java 反射 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的 Class,Class 类 用于表示.class 文件(字节码)) 一、反射的概述 定义:JAVA 反射机制是在运行状态中,对于任...

zzz1122334
今天
5
0
聊聊nacos的LocalConfigInfoProcessor

序 本文主要研究一下nacos的LocalConfigInfoProcessor LocalConfigInfoProcessor nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/impl/LocalConfigInfoProcessor.java p......

go4it
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部