如何将Eclipse项目导入Android Studio?

使用Android Studio中的“导入项目”获取用于更改项目结构并生成Gradle文件的Eclipse项目,但现在(我正在使用AS 0.5.3)只生成IDEA文件(.iml,.idea),而不是Gradle,它也没有触及文件结构。

如何将Eclipse项目导入Android Studio?

更新:尝试在Eclipse中导出gradle文件不会导出它们的应用程序,它不会显示为Android Studio中的模块。

在较新版本的Android Studio中,引入Eclipse / ADT项目的最好方法是直接将其导入到Android Studio中; 我们曾经build议您先将它从Eclipse导出到Gradle,但我们并没有经常更新ADT来跟上Android Studio的步伐。

无论如何,如果您在启动Android Studio时从文件菜单或欢迎屏幕中select“导入项目”,则应该通过一个专门的向导来提示您打算将文件复制到新的目录结构而不是将它们就地导入,它将提供修复一些常见的东西,比如将依赖转换成Maven风格的包含等等。

看起来你没有得到这个专业化的stream程。 我认为它可能不会将您所导入的项目识别为ADT项目,而且它是默认不了解Gradle的内置IntelliJ行为。 为了使专门的导入工作,以下必须是真实的:

  • 您导入的项目的根目录必须有一个AndroidManifest.xml文件。
  • 或者:
    • 根目录必须包含来自Eclipse的.project.classpath文件
  • 要么
    • 根目录必须包含ressrc目录。

如果你的项目很复杂,也许你不会把它指向想要看到的导入成功的根目录。

从Eclipse导出

  1. 更新你的Eclipse ADT插件到22.0或更高 ,然后去文件| 出口

  2. 现在转到Android,然后点击Generate Gradle build files ,然后它会为您生成gradle文件。

    在这里输入图像说明

  3. select您想要导出的项目

    在这里输入图像说明

  4. 点击完成

    在这里输入图像说明

导入到Android Studio

  1. 在Android Studio中,closures当前打开的任何项目。 您应该看到“欢迎使用Android Studio”窗口

  2. 点击导入项目。

  3. find您从Eclipse中导出的项目,展开它,select它并单击确定。

它更简单与Android Studio所有你需要的是首先select

  1. 导入项目(日食…..) 在这里输入图像说明
  2. 然后select你的文件夹基于Eclipse的项目 在这里输入图像说明

3.基于您使用的项目和库的types(ActionBarSherlock),您可能会提示特殊的导入向导,请继续,然后单击下一步,然后完成。 在这种情况下,它很简单

在这里输入图像说明

你已经完成了。 在这里输入图像说明

但有时debugging或运行选项不起作用 ,错误信息显示

“这个项目结构不是基于gradle或者将其迁移到gradle”

一些解决这个closures打开的eclipse项目,并重新打开相同的过程中,我们以前做过的导入项目(eclipse adt,gradle等),这次android工作室会添加所有必要的gradle文件和绿色debugging选项也将工作。 我不小心做了这个,但它的工作,我只是希望它也适用于你。

尝试这些步骤:1-点击导入项目(Eclipse,ADT,…)

在这里输入图像说明

2-selectEclipse项目的主目录

在这里输入图像说明

3-保持默认值。 前两个选项是将jar文件更改为远程库(依赖项)。 这意味着当build立Android工作室尝试在本地系统或远程存储库中查找库。 最后一个选项是导入后只显示一个文件夹作为应用程序。

在这里输入图像说明

4-然后,你会看到变化的总结

在这里输入图像说明

5-然后,如果您看到Gradle项目同步失败,则应该转到项目视图(左上angular)。 然后,你应该去你的项目 – >应用程序,并打开build.gradle。

在这里输入图像说明

6-然后,你应该把你的compilesdkVersion和targetsdkVersion改成你在buildToolsVersion(我的是23)中看到的最新版本。 例如,在我的项目中,我应该在两个地方改变17到23

7-如果您在依赖项中看到错误,则应更改其版本。 例如,在我的项目中,我需要检查我使用的是哪个版本的Android支持库。 所以,我打开SDKpipe理器,到底部看版本。 然后,我应该使用当前版本replace我的Android Studio版本,然后从右上angular再次单击

在这里输入图像说明 在这里输入图像说明 在这里输入图像说明 在这里输入图像说明 在这里输入图像说明

我希望它有帮助。

自发布此问题以来,Android Studio得到了改进,最新版本的Android Studio(截至撰写本文时为2.1.1)具有相当不错的Eclipse导入function,因此将Eclipse项目直接导入到Android Studio中是最好的将项目从Eclipse迁移到Android Studio的方法。

我将在下面描述如何做到这一点,包括可能遇到的一些陷阱。 我将特别介绍如何导入一个包含多个应用程序的Eclipse工作区,这些应用程序共享一个或多个项目库(到目前为止发布的方法似乎仅限于导入一个Eclipse应用程序项目及其项目库)。 虽然我没有处理每一个可能的问题,但是我对其中的一些细节进行了大量的细节,我希望这些细节能够帮助那些第一次经历这个过程的人。

我最近从Eclipse工作区导入了项目。 这个工作空间包括四个图书馆项目,每个项目最多可以共享九个项目。

一些背景:

Eclipse工作区包含多个项目,可能是库项目或应用程序。

Android Studio 项目类似于Eclipse 工作区 ,因为它可以同时包含库项目和应用程序。 然而,一个库项目或应用程序在Android Studio中由“模块”表示,而在Eclipse中则由“项目”表示。

所以,总结一下:Eclipse工作空间最终会成为Android Studio项目,而工作空间内的Eclipse项目将最终成为项目中的Android Studio模块。

您应该通过创build一个Android Studio项目(文件/新build/新build项目)来启动导入过程。 您可能会为您的Eclipse工作区提供与此项目相同(或类似)的名称。 这个项目最终将包含所有的模块,每个Eclipse项目(包括项目库)将会导入一个模块。

导入过程不会更改您的原始Eclipse文件,只要您将导入的文件放置在不同的文件夹层次结构中,那么您应该为该项目select一个不在原始Eclipse层次结构中的文件夹。 例如,如果您的Eclipse项目全部位于名为Android的文件夹中,则可以创build名为AStudio的兄弟文件夹。

然后,您的Android Studio项目可以创build为这个新文件夹的子文件夹。 新build项目向导会提示你input这个顶层项目文件夹,它将创build你的项目。

然后,Android Studio的新项目向导会要求您在创build项目时configuration一个模块。 起初可能有点混乱,因为他们从来没有告诉过你正在创build一个模块,但你是; 您正在创build一个包含单个模块的项目。 显然,每个项目都需要至less有一个模块,因此,由于您依靠Eclipse来提供您的模块,您的初始模块将是一个占位符,以真空满足正式要求。

因此,你可能会想为你的项目创build一个尽可能less的初始模块。 因此,select手机和平板电脑作为您的模块的types,接受默认的最低SDK(API级别8),并为您的模块select添加无活动。

接下来,select工作区中需要最多库的Eclipse应用程序项目作为第一个要导入的项目。 这样做的好处是,当您导入该项目时,所有使用的库项目(如果某些库项目本身需要其他库项目,则直接或间接)将作为导入过程的一部分与其一起导入。

这些导入的项目中的每一个都将在Android Studio项目中获得自己的模块。 所有这些模块将是彼此的兄弟姐妹(无论是在您的项目层次结构中,还是在其文件所在的文件夹层次结构中),就像分别导入模块一样。 但是,作为导入过程的一部分,模块之间的依赖关系将为您创build(在应用程序的build.gradle文件中)。

请注意,在完成导入,testing和debugging这个“最依赖的”Eclipse项目及其支持的库项目之后,您将继续导入第二个Eclipse应用程序项目(如果在工作区中有第二个项目) 及其库项目模块(先前导入的导入程序已经被导入向导find,作为现有的模块,并重新用于这个新的模块,而不是被复制)。

所以,你不应该直接从Eclipse直接导入一个库项目。 他们都将被间接引入,基于他们对你导入的应用项目的依赖。 这是假设您在工作区中的所有库项目都是为了满足同一工作区中的一个或多个应用程序项目的需求而创build的。

要执行此第一个应用程序项目的导入,请回到Android Studio,在您刚刚创build的项目中selectFile / New / New Module。 你可能会认为你应该使用文件/新build/导入模块,但是应该,因为如果你这样做,Android Studio将创build一个新的项目来保存你导入的模块,它会导入你的模块到项目。 你实际上可以用这种方式创build你的第一个模块,但是第二个到第N个模块仍然需要你使用这个其他方法(用于将模块导入到一个现有的项目中),所以我认为只是从一个“空”项目开始(或者说,有一个拥有自己空洞的,无所作为的占位符模块),然后将每个Eclipse项目作为一个新模块导入到项目中(即我们正在采用的方法),可能不那么容易混淆。

所以,你要把你实际上空的新项目,并在其中执行一个文件/新/新模块。 这个调用的向导会给你一个你想要创build什么样的模块的select。 您必须select“导入Eclipse ADT项目”。 这就是访问知道如何将Eclipse项目转换为当前Android Studio项目中的Android Studio模块(以及它所依赖的库模块)的向导。

当提示input源文件夹时,应该为您的Eclipse项目(这是包含该项目的AndroidManifest.xml文件的文件夹)input文件夹。

然后,导入向导将显示它打算创build的模块名称(类似于您的原始Eclipse项目名称,但使用小写的第一个字母,因为这是一个将模块名称与项目名称区分开来的约定(以大写字母开头)大写字母),通常可以很好地接受这个默认值。

在模块名称下面有一个标题为“其他所需模块”的部分。 这将列出您正在导入的模块(或其任何库等)所需的每个库。 由于这是您导入的第一个模块,因此这些模块都不会包含在您的项目中,因此每个模块都将默认情况下已经选中了“导入”框。 你应该离开这些检查,因为你需要这些模块。 (请注意,当您导入更高版本的 Eclipse应用程序项目时,如果他们需要的库已经被导入,这些库仍然会出现在这里,但会有一个提示“Project已经包含具有该名称的模块”,并且导入框将被取消选中,在这种情况下,您应该不选中该框,以便导入器将新导入的模块连接到已经导入的库上,可能是接受默认值Android Studio为您的模块创build的名称对于允许IDE查找和重用这些库模块非常重要。

接下来,导入程序将提供用Gradle依赖关系replace任何JAR和库源,并为任何依赖模块创buildcamelCase模块名称,默认情况下检查所有这些选项。 通常应该选中这些选项并继续。 但请阅读警告,以了解可能出现的问题。 请记住,您始终可以删除导入的一个或多个模块(通过“项目结构”对话框)并重新开始导入过程。

我得到的下一个显示(YMMV)声称Android支持信息库没有安装在我的SDK安装。 它提供了一个button来打开Android SDKpipe理器来安装它。 但是,那个button不适合我。 我手动打开SDKpipe理器作为一个单独的应用程序,发现Android支持信息库已经安装。 有一个更新,但是。 我安装了它,并点击导入对话框中的刷新button,但是什么都没做。 所以,我继续说,这个知识库的缺乏似乎并没有损害导入过程(虽然我确实收到了一些信息,这些信息后来不时被丢失,同时使用导入的代码,我可以安抚它通过点击提供的链接纠正问题 – 至less暂时)。 最后,当我安装了更新到存储库时,这个问题就消失了,所以你可能根本没有经历过。

在这一点上,你将点击完成,稍后,它应该创build你的模块,并build立它们。 如果一切顺利,您应该在您的Gradle控制台中收到BUILD SUCCESSFUL消息。

一个怪癖是,如果构build失败,你可能看不到你的导入模块在项目层次结构。 看来你需要在新模块出现之前到达第一个有效的版本(我的经验,无论如何)。 您仍然可以在“文件/项目结构”对话框中看到新模块(例如,如果要删除它们并开始导入)。

请记住,因为您并未更改原始Eclipse项目,所以您可以随时删除刚才导入的模块(如果导入不好),然后重新开始。 您甚至可以在删除Android Studio模块后对Eclipse进行更改,如果这样会使导入第二次变得更好(只要保留了在Eclipse下构build现有源的后备function)。 正如您在下面讨论版本控制时所看到的,您可能需要保留在Eclipse下构build的能力,因为项目结构在Android Studio下发生了变化,所以如果您需要返回到您之前的提交转移到Android Studio(例如,修正错误),您将希望有能力在Eclipse中构build早期的提交。

要删除一个模块,必须select文件/项目结构,然后从对话框的左边select模块,然后点击删除键。 出于某种原因,我无法直接删除项目层次结构中的模块; 必须使用此“项目结构”对话框完成。

导入向导会生成一个import-summary.txt文件,其中包含可能遇到的任何问题的详细列表以及解决这些问题的操作。 您应该仔细阅读,因为如果您在构build或运行导入的代码时遇到问题,可能会提供有关正在发生的情况的线索。 它还将帮助您find导入器移动以适应Android Studio项目的不同结构。

如果一切都不顺利的话,那么看看你可能遇到的这些可能的问题,以及解决这些问题的方法:

一般来说,我遇到的主要有两类问题:

  1. Proguard问题
  2. 清单问题

当Proguard混淆时,库中方法的(模糊)名称可能与用于从应用程序中调用它们的名称不匹配,并且会出现类似“error:can not find symbol class …”的编译器错误。

在Eclipse中,对于图书馆项目,Proguard的东西几乎被忽略了,Proguard的东西对于你正在构build的任何应用程序项目来说,不仅仅是它本身,而是处理它所依赖的所有库。 而这通常是你想要的。

但是,在Android Studio中,您需要进行一些更改才能获得相同的效果。 基本上,在你的每个库项目模块的build.gradle文件中,你会想要这样的东西:

 buildTypes { release { minifyEnabled false consumerProguardFiles 'proguard.cfg' } } 

proguard.cfg是你的库模块自己的proguardconfiguration文件。

“consumerProguardFiles”中的术语“消费者”显然是指使用该库模块的应用程序模块。 因此,来自该应用程序的proguard命令优先于库模块本身的proguard命令,显然这会导致混淆,协调和兼容,从而使app模块对其库模块的所有调用都使用匹配的符号。

这些“consumerProguardFiles”条目不会在导入过程中自动创build(至less这是我自己的经验),所以如果在导入过程中没有为您创build的库模块的build.gradle文件。

如果你想分散你的库项目,混淆,那么你将需要一个单独的proguard文件; 我自己也没有这样做,所以超出了这个答案的范围。

在应用程序模块中,您将需要这样的东西:

 buildTypes { release { minifyEnabled true proguardFiles 'proguard.cfg' } } 

(顺便说一下,在写这篇文章的时候,虽然我的应用程序运行的很好,但我还没有直接确认使用这种方法实际上已经混淆了,所以请自己检查一下 – 比如使用像apktool这样的反编译器。稍后检查,当我得到这个信息时将编辑这个答案)。

第二种问题是由于Eclipse在编译使用这些库项目的应用程序项目时几乎忽略了库项目的清单文件,而在Android Studio中,这两者之间存在交错,显然不一致优先该应用程序的清单超过了它的库。

我遇到过这个问题,因为我有一个库清单(仅用于文档目的)抽象Activity类作为主要活动。 在我的应用程序中有一个派生自这个抽象类的类,它在每个使用该库的应用程序的清单中声明。

在Eclipse中,这从来没有引起任何问题,因为库清单被忽略。 但在Android Studio中,我最终将该抽象类作为应用程序的活动类,导致运行时错误,当代码尝试实例化该抽象类时。

在这种情况下你有两个select:

  1. 使用工具语法来覆盖应用程序清单中的特定库清单内容 – 例如:
 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.goalstate.WordGames.FullBoard.trialsuite" xmlns:tools="http://schemas.android.com/tools" . . <application tools:replace="android:name" 

要么,

  1. 几乎从您的库模块清单中删除所有的东西,并依靠应用程序模块的清单来提供每个值。 请注意,您确实需要为每个库模块都有一个清单,但是只有头文件和一个只包含一个包属性的清单清单元素不需要太多。

我尝试了两种方法,并以上面的方法2结束,作为更简单的方法。 但是,如果您想单独分发库模块,则需要创build一个更有意义的清单文件,以反映每个库模块自己的个别需求。

有可能是一个更“正确”的方式来做到这一点,它为库清单本身的每个库放置需求(例如,权限),并允许自动交叉处理将这些与为应用程序声明的那些进行组合。 但是,由于Eclipse忽略了图书馆的清单,至less在开始时完全依靠应用程序清单,并将图书馆清单剥离到裸露的骨头上似乎更安全。

请注意,Eclipse项目中的一些项目属性以及清单属性将用于构buildbuild.gradle文件的一部分。 具体来说,build.gradle中的compileSdkVersion被设置为Eclipse项目属性中的项目构build版本,applicationId是应用程序清单中的软件包名称,而minSdkVersion和targetSdkVersion也是从应用程序的清单文件中复制的。 build.gradle的dependencies部分来自项目属性中的库项目依赖关系。

请注意,这可能会使您的一些AndroidManifest.xml值变得冗余,甚至可能会残留(即未使用)。 这可能会造成混乱。 我的理解是,build.gradle值是实际有效的值,而像targetSdkVersion这样的清单值不再用于构build目的。 不过,Google Play等app store仍然可能会使用这些商店; 我不知道这个或那个,所以在这一点上,我只是把他们联系在一起。

除了上述两种问题之外,在Android Studio中只安装SDK级别23的情况下,还有更多的常规操作,比如导入一个项目编译级别为22的项目。 在这种情况下,编辑应用程序模块的build.gradle文件以将compileSdkVersion从22(导入的值)移动到23将比为22级安装SDK要好,但这两种方法都应该可行。

在整个过程中,如果某些东西不能正确构build,并且尝试解决问题,则可能需要尝试使用Gradle文件构build/重build项目和/或工具/ Android /同步项目和/或文件/无效caching/重新启动,以确保您的更改已完全合并。 我不知道这些是什么时候真正有必要的,因为我不知道你还没有成功build造的时候增量多less,但是我作为一种迷信的仪式,相当肯定的是它有帮助。 例如,当我得到一个资源$ NotFound运行时错误,似乎是由于无法find启动图标资源,我试了所有三个,问题已修复。

当您为第一个Eclipse项目执行了上述操作并获得了成功的构build时,如果幸运的话,可以从Android Studio显示顶部的下拉列表中select您的应用程序模块到播放button的左侧,然后单击播放button本身,然后select一个设备或Android虚拟设备,应用程序应加载运行。

同样,您应该可以使用Build / Generate Signed APKfunction创build应用程序的签名副本。 请注意,在运行签名副本时,可能会出现一些与导入相关的错误,这些错误在使用播放button时不会显示,因此在决定导入完成之前需要确认两者都正常工作。

在此之后,您可能会想打开版本控制。 我自己使用git,但还有其他一些选项可用。

版本控制大多超出了这个答案的范围,但有一些东西会受到导入过程的影响。 首先,在Eclipse中,您可能会将各种文件夹中的各种项目粘贴到各处,但是当您导入到Android Studio中时,所有模块都将作为主项目文件夹的直接子文件夹创build。 因此,如果您在Eclipse中为每个项目分别设置了git文件夹,或者为每个组在父文件夹下组织相关的项目组(就像我一样),但是这并不能很好地转换为Android Studio。

我对这方面的知识是有限的,因为我还没有在Android Studio中使用过版本控制,所以也许有办法解决这个问题,但是似乎Android Studio中的所有版本控制都是在项目级统一的,所以所有的模块将在一个单一的git档案。

这意味着您可能需要放弃旧的git存档,并使用导入的源代码的新存档重新开始。 这意味着你会想要保留旧的git存档,这样它就可以和Eclipse一起用来执行任何所需的错误修复等等,至less在一段时间内。 而且你也会希望它保存你的项目的历史。

如果你有幸把所有的项目都组织在一个Eclipse工作区中,并且如果你正在使用一个git文件夹来处理这些项目,那么你可能只需要复制旧的git归档文件Eclipse工作区文件夹,以在您的Android Studio项目文件夹中。 然后,您可以将您的Eclipse项目中任何仍然相关的.gitignore项目编辑到您的Android Studio项目的自动生成的.gitignore文件中,让git弄清楚在导入过程中更改了哪些内容(有些内容已经四处移动 – 例如,清单文件不再位于模块的顶层)。 其他人则报告说,git在弄清楚发生了什么变化的时候非常好。 我自己没有尝试过。

但即使你这样做了,回到从Eclipse到Android Studio之前的提交将会回到一个只能在Eclipse内部有意义的文件集。 所以听起来好,“很难”合作。 特别是因为Eclipse仍然会指向它的原始项目文件夹。

我个人有多个相关项目的git档案,所以我决定干脆rest一下,然后在Android Studio中重新开始。 如果你必须这样做,这可能会影响你的规划,因为在这种情况下,在你的代码开发之前,你会希望处于一个非常稳定的位置,因为在你的版本控制中,你会失去一些旧代码的可访问性系统(例如,能够合并后导入代码),一旦你已经转移到Android Studio。

与git有关的这个答案的一部分是部分推测性的,因为我还没有在导入的项目文件中使用版本控制,但我想包含它以提供一些有关挑战的想法,并且计划更新我的答案之后我在Android Studio中使用了更多的版本控制。

根据http://tools.android.com/tech-docs/new-build-system/migrating-from-eclipse-projects ,你有几个select
– 只需导入
– 预先从Eclipse中导出。

如果您的项目包含很多与Eclipse相关的关系,那么从eclipse预输出可能是更好的select。 AS不能“翻译”Eclipse可以生成的所有东西。 如果你想继续在这个项目代码中使用Eclipse和AS,这是更好的select。 如果你select这个方法,请阅读上面的链接,有一些重要的先决条件。

简单地导入AS将让AS“翻译”并重新排列项目,并且是推荐的方法,特别是如果您不想返回到Eclipse。 在这种情况下,您让AS向导执行所有操作,而不需要手动生成gradle文件。

这是一个更简单的迁移方法:

从示例Android Studio项目开始。 打开android工作室并创build一个新的项目(或)只需在这里下载一个'示例'工作室项目: https : //github.com/AppLozic/eclipse-to-android-studio-migration 。 现在,按照以下说明在Android Studio中打开下载的项目。

将eclipse项目模块导入到Android Studio中。 select文件 – >新build – >导入模块图像标题

接下来,selecteclipse项目的path并导入模块。 如果您看到消息“无法同步Gradle项目”,请单击“安装构build工具并同步项目…”

现在,按照以下简单步骤删除示例项目模块:

打开settings.gradle并删除“include”:app“”右键单击“app”模块并“删除”它。 现在,我们所拥有的是在Android Studio中使用Gradle构build的Eclipse项目。

这里有几个其他的链接可能会帮助你:

http://developer.android.com/sdk/installing/migrate.html资料来源:; http : //www.applozic.com/blog/migrating-project-from-eclipse-to-studio/

除了上面Scott Barta的回答,如果有对Eclipse工作区库文件的引用,则可能仍然存在导入问题,例如

 /workspace/android-support-v7-appcompat 

是常见的。

在这种情况下,导入将暂停,直到你提供一个引用(如果你从一个git repo克隆,它可能不会在那里),甚至指向你自己的安装(例如/ android-sdk-macosx / extras / android / m2repository / com / android / support / appcompat-v7)将不会被识别,并会停止导入,让你在无人地带。

为了解决这个问题,从Eclipse项目中findproject.properties或.classpath文件中的refs,并删除/注释掉它们,例如

 <classpathentry combineaccessrules="false" kind="src" path="/android-support-v7-appcompat"/> 

这会让你通过导入阶段,然后你可以添加这些refs在你的build.gradle(模块:应用程序)如Android教程中所示 ,如下所示:

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

Simple steps: 1.Go to Android Studio. 2.Close all open projects if any. 3.There will be an option which says import non Android Studio Projects(Eclipse ect). 4.Click on it and choose ur project Thats't it enjoy!!!

The best way to bring in an Eclipse/ADT project is to import it directly into Android Studio. At first GO to Eclipse project & delete the *project.properties** file.After that, open the Android studio Tool & import Eclipse project(Eclipse ADT, Gradle etc).

— Thanks and Regards

Rakesh Kumar Jha Android Developer