Android 图解向 Android Studio 中导入 Eclipse 工程的步骤

来源:互联网 发布:张予曦淘宝店铺名 编辑:程序博客网 时间:2024/04/30 00:52

转载请注明本文出自 clevergump 的博客:http://blog.csdn.net/clevergump/article/details/50931664, 谢谢!

注意: 
1. 如无特殊说明, 本文中提到的 AS 都是指 Android Studio 这款 IDE. 
2. 如无特殊说明, 本文中提到的 “library工程” 和 “库工程” 是相同的概念. 


一. 前言

如今用 AS 新建的 Android 工程, 都是默认使用 Gradle 系统进行构建的. 而在早期用 Eclipse 开发时, 项目则是用其他系统构建的. 虽然现在我们的 IDE 基本上都已经由 Eclipse 切换到了 AS, 但是, 我们依然无法避免在项目开发中使用先前由 Eclipse 开发的工程, 尤其是一些经典的 library 工程. 所以, 熟练掌握 AS 导入 Eclipse工程的步骤是很有必要的.


二. Android Studio 导入 Eclipse 工程的操作步骤

下面我们就以 Chris Banes 开发的经典的下拉刷新库 Android-PullToRefresh 为例来演示 Eclipse 工程转换为 Gradle 工程并导入到 AS 中的步骤. 这里先简要介绍一下这个著名项目的目录结构. 如下所示:

工程名称是否库工程他所依赖的库library是无PullToRefreshListFragment是libraryPullToRefreshViewPager是librarysamplelibrary, PullToRefreshListFragment, PullToRefreshViewPager


可以看到, 这个项目中包含了三个库工程: library, PullToRefreshListFragment 和 PullToRefreshViewPager. 而后边两个库又都分别依赖于 library 这个库, 最后, 该工程中给出的样例代码 sample 需要依赖于所有这三个库. 这个工程内部的依赖关系相对比较复杂, 但如果你掌握了这个工程导入到 AS 的步骤, 那么我相信, 其他 Eclipse 工程导入到 AS 对你来说也将是轻而易举的事情.

导入主要分为以下两种情况:

1. 直接将整个 Eclipse 工程导入到 AS 中.

这种情况通常是由于我们需要学习先前由 Eclipse 开发的某个经典库的用法, 而为了学习该库的用法, 通常需要将该库所附带的样例工程连同该库一起导入到 AS 中进行学习. 下面以导入整个Android-PullToRefresh 项目为例来介绍这种情况的导入步骤:

  1. 下载整个工程的代码, 下载地址在这里.
  2. 统计好该工程内, 各个子工程对于其他子工程的依赖关系. 我们在前边已经统计好了, 这里再贴一次:

    工程名称是否库工程他所依赖的库library是无PullToRefreshListFragment是libraryPullToRefreshViewPager是librarysamplelibrary, PullToRefreshListFragment, PullToRefreshViewPager


  3. 将该工程内, 每个子工程对于其他工程的依赖关系注释掉或直接删掉, 也就是将每个子工程的 project.properties 文件中的 “android.library.reference = …” 这样的语句注释掉或直接删掉. 根据我们前边总结的依赖关系表, 需要做如下修改:

    • PullToRefreshListFragment 的 project.properties 文件, 为引用其他工程的语句添加 # 号屏蔽符从而注释掉这句代码, 添加 # 号屏蔽符后的效果如下图所示, 或者直接将红框中的代码删掉: 
      这里写图片描述 
      图 3-1

    • 将 PullToRefreshViewPager 的 project.properties 文件, 为引用其他工程的语句添加 # 号屏蔽符从而注释掉这句代码, 添加 # 号屏蔽符后的效果如下图所示, 或者直接将红框中的代码删掉: 
      这里写图片描述 
      图 3-2

    • 将 sample 的 project.properties 文件, 修改为如下形式, 为引用其他工程的语句添加 # 号屏蔽符从而注释掉这句代码, 添加 # 号屏蔽符后的效果如下图所示, 或者直接将红框中的代码删掉: 
      这里写图片描述 
      图 3-3

  4. 分别导入该工程中所包含的每一个子工程, 将这每一个子工程都作为一个 module 单独导入, 由于该工程一共包含四个子工程, 所以一共需要进行四次导入. 下面介绍导入的步骤:

    (1) 导入项目的主工程, 也就是可以运行的那个工程. 在本例中就是 sample 工程, 导入后会变为名称为 app 的一个可运行的 module. 导入步骤如下:

    点击如下菜单: File > New > Import Project, 如图4-1所示 (如果当前 AS 是在欢迎界面, 那么就点击 “Import project (Eclipse ADT, Gradle, etc.)”, 如图4-2所示):

    这里写图片描述 
    图 4-1

    这里写图片描述 
    图 4-2

    选择 sample 子工程的路径:

    这里写图片描述 
    图 4-3

    选择我们导入后的工程所存放的目标文件夹的路径, 这里我为了演示, 就选择桌面上的文件夹 Android-PullToRefresh, 在实际使用时, 可以选择 AS workspace 中的一个空文件夹.

    这里写图片描述 
    图 4-4

    下面的选项全部勾选:

    这里写图片描述 
    图 4-5

    然后就成功导入了这个 sample 工程, 并且已经将该工程转换为 Gradle工程了, Gradle工程通常是以 module 来表示原先 Eclipse 工程的子工程, 我们导入的这个 sample工程就变成了名字为 app 的 module. 这时会报错是很正常的, 因为这个 sample 工程所依赖的其他工程还没被导入进来呢.

    (2) 分别导入项目中的其他子工程, 每次只导入一个工程. 在本例中就是要分三次分别导入 PullToRefreshListFragment, PullToRefreshViewPager, library 这三个工程. 导入步骤如下:

    在刚才已导入 sample 工程的那个界面内, 点击如下菜单: File > New > Import Module, 注意: 这里点击的是 “Import Module” 菜单, 而不是 “Import Project” 菜单:

    这里写图片描述 
    图 4-6

    其他步骤与导入 sample 工程的剩余步骤都类似, 只是在选择了当前要导入的工程之后, 会多出一个 Module name 的设置, 可以不用管, 保持默认即可, 也就是下图红框中标出的内容:

    这里写图片描述
    图 4-7

    最终, 导入后, 整个工程的结构如下图所示:

    这里写图片描述 
    图 4-8

    再次强调: 在 AS 中, 我们将导入的每一个子工程不再称作 project(工程), 而是称作 module(模块).

  5. 根据 步骤2 中统计的各个工程 (module) 相互之间的依赖关系, 为 AS 中已导入的各个 module 添加各自的依赖. 添加步骤是: 在左边窗口中切换为 Project 视图, 然后选中该 Project 的名称, 按 F4, 在弹出的窗口中, 选择左边列出的某一个module, 选择”Dependencies” 标签, 点击最右边加号, 选择 “3 Module Dependency”, 然后选择该 module 所依赖的其他 module即可. 如图 5-1, 5-2, 5-3 所示:

    这里写图片描述 
    图 5-1

    这里写图片描述
    图 5-2

    这里写图片描述 
    图 5-3

    这样就可以添加各个 module 的依赖包了. 其实, 用这种方式添加依赖的实质, 就是在相应 module 文件夹内的 build.gradle 文件的 dependencies 大括号内添加了相应的代码而已. 以 app module为例, 我们需要将其他三个 module 都添加为他的依赖, 这样其实就相当于在 app module 文件夹内的 build.gradle文件内添加了如下代码:

    这里写图片描述 
    图 5-4     app module 的依赖语句

    所以, 如果你发现在图5-2 最左边的 Modules 列表中只看到 app module, 而看不到其他 module, 例如: 我们在本例中就看不到 pullToRefreshListFragment, pullToRefreshViewPager 和 library 这三个module, 那么我们就无法用这种方式添加依赖了, 我们只能用图 5-4 展示的那样, 直接为每个需要添加依赖的 module 的 build.gradle文件添加相应的依赖语句. 由于 library 这个module不需要依赖其他库或文件, 所以我们只需要为 pullToRefreshListFragment 和 pullToRefreshViewPager 这两个 module 添加依赖, 并且他们都只依赖于 library 这一个module, 没有其他依赖关系了. 所以, 我们可以仿照图 5-4 的代码来分别为这两个 module 添加如下的依赖语句:

    <code class="language-groovy hljs scss has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">compile <span class="hljs-function" style="box-sizing: border-box;">project(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">':library'</span>)</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

    添加完该语句以后, 这两个 module 各自文件夹内的 build.gradle 文件的依赖关系都是如下:

    这里写图片描述 
    图 5-5     pullToRefreshListFragment 和 pullToRefreshViewPager 这两个 module 的依赖语句 

一般来说, 按照上述几个步骤操作, 就能成功导入 Eclipse工程到 AS 中, 导入后然后只需同步该工程, 再运行就能在手机上看到运行后的效果了.

2. 为 Android Studio 中一个已有的工程添加一个 Eclipse 库工程作为原工程的依赖.

这种情况在日常开发中更为常见. 例如: 我们在开发中需要使用下拉刷新库, 如果我们要使用前文提到的 Chris Banes 开发的那个开源库, 那么我们只需要将Android-PullToRefresh 工程中的 library 库工程作为我们当前项目的一个 module 导入即可, 导入时, 为了能见名知意, 我们可以将这个 module 的名称改为类似于 pullToRefresh_library 之类的名称 (在前边图 4-7 的红框中可以设置这个名称). 导入后, 再将我们工程中所有需要依赖于这个库的 module, 都分别添加这个库的 module 为他们各自的依赖. 添加步骤参见前边的图 5-1, 5-2, 5-3, 或者按照图 5-4 的方式, 直接在相应 module 文件夹内的 build.gradle文件内添加相应的依赖代码, 注意添加依赖代码时, 被依赖的 module 名称一定要与我们在图 4-7 的红框中设置的该下拉刷新库的名称一致, 当然其实该名称最终是保存在整个工程根目录下的 settings.gradle 文件中, 我们也可以从这个文件中获取到我们为该下拉刷新库所设定的名称, 并据此来添加依赖代码.


三. 阅读本文的建议

本文是基于 Google 官方 Android Developers 网站上的文章 Migrating from Eclipse ADT 结合实际例子做的介绍, 文中难免有些地方描述不太清晰, 建议读者朋友还是要阅读一下 Google 官方提供的这篇英文原文, 因为只有这篇英文原文才是最完整并且最具有权威性的介绍, 本文的介绍仅供参考.

0 0