再谈如何将android studio项目转换成eclipse

今日长缨在手,何时缚住苍龙。这篇文章主要讲述再谈如何将android studio项目转换成eclipse相关的知识,希望能为你提供帮助。
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0110/2294.html
编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识、前端、后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过!
更新:虽然本人坚守eclipse很久,但是现在我也不再推荐继续用eclispe了,自己的项目用还没什么问题,但是你如果想用github上的项目,用eclispe会越来越难。如果你仍然感兴趣,继续看下面的内容也没关系。
 
首先,不要因为编译原因而放弃。studio项目是完全可以转换成eclipse的
 
本站的开源代码板块有很多项目都是android studio开发的,很多同学以为必须要先学会studio,才能编译这些源代码,于是花了很长时间学studio,结果发现还是不会。其实任何studio项目都是可以转换成eclipse的,eclipse目前的编译能力比studio只会多不会少。只要你熟练了,一个中等复杂的studio项目转成eclipse也只是分分钟的事情。 在这里我要强调的是开源代码板块的studio项目95%以上都是我亲自编译成功并且运行了的,而剩下我没有验证的极少部分往往是因为该项目在github上已经得到非常多的star,而编译起来又异常复杂,但这是极少数的情况。
转换方法下面来谈谈studio到eclipse的转换问题。在studio项目转换成eclipse项目的过程中,对于studio的知识点只需记住条:studio项目中src/main目录下才是真正的项目代码,main下java目录里面的代码对应的是eclispe项目中的src目录中的代码。至于其他什么乱七八糟的Gradle 代码,完全不要去理会。
比如在twoway-view  项目中在使用方法里面就有如下代码


  1. repositories  {
  2.         maven  {  url  "https://oss.sonatype.org/content/repositories/snapshots/"  }
  3. }
  4.  
  5. dependencies  {
  6.         compile  \'org.lucasr.twowayview:core:1.0.0-SNAPSHOT@aar\'
  7.         compile  \'org.lucasr.twowayview:layouts:1.0.0-SNAPSHOT@aar\'}
看不懂?没关系,我也看不懂。你只要看懂上面红色文字部分的意思就行了。
 
首先要讲的就是项目结构的转换,这一点很基础,我已经在http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0918/1692.html  一文中讲解过。
 
下面是studio项目的目录结构:
打开src 目录
进入main
其实library的所有代码都在这里面了
再谈如何将android studio项目转换成eclipse

文章图片

【再谈如何将android studio项目转换成eclipse】而eclipse的结构是这样的
 
再谈如何将android studio项目转换成eclipse

文章图片

其实studio项目中java目录里面的代码对应的是eclispe项目中的src目录中的代码。而studio中src目录里面包括整个项目的所有代码包括资源文件和xml。
所以:
直接将studio目录里面的src -> main 目录里面的java文件夹名改为src ,
然后将main里面的内容(不包括main)拷贝到一个新的以你项目名称命名的文件夹中
然后用eclipse导入就可以了。如果这是一个library项目导入完成之后 所以需要在项目的的属性中选中如下选项:
再谈如何将android studio项目转换成eclipse

文章图片

再谈如何将android studio项目转换成eclipse

文章图片

 
但是那篇文章没有结合具体的例子来说明,因此对于新手来讲,还是很难开头。其实除了项目的结构之外,项目的依赖关系其实也是一个难点:对于一个studio项目我们如何知道他依赖了哪些东西呢?
一个比较典型的实例一般来讲一个项目如果没有什么新系统的特征,直接转换成eclipse的目录结构然后eclipse import进去就ok了,但是现在很多项目往往使用了Material Design中的一些东西,比如ToolBar,RecyclerView以及appcompat的主题等,这种依赖关系就比较复杂。
下面我以https://github.com/TonicArtos/SuperSLiM  为例讲解如何将它转换成eclipse项目。
更改项目结构
首先下载然后解压:
再谈如何将android studio项目转换成eclipse

文章图片

这么复杂!吓到了是吧,没关系很多文件和目录我可以直接删掉,从文件的名称来看example下面应该是demo代码,library下面是库代码。其他的直接删掉,当然为了保险起见,你还是点击去看下如果里面有src目录基本上就可以确认这是跟项目代码相关的了。删掉其他文件和目录之后我们就只剩下:
再谈如何将android studio项目转换成eclipse

文章图片

心情顿时就好了。
我们先来解决library目录中的问题。打开library
再谈如何将android studio项目转换成eclipse

文章图片

回想上面说的studio项目中src/main目录下才是真正的项目代码。因此我们将src/main中的文件全部copy出来,其他的都可以直接删掉了,至于copy出来放在哪里那是你的事,一般我自己的做法是直接放在library目录下,然后删除掉copy文件之外的所有东西。如果你按照我描述的做,那么到这一步library下面应该是这样的:
再谈如何将android studio项目转换成eclipse

文章图片

再回想上面说的main下java目录里面的代码对应的是eclispe项目中的src目录中的代码。因此我们将java目录改名src目录:
再谈如何将android studio项目转换成eclipse

文章图片

这不就是熟悉的eclipse项目么,其实非常简单,本来我是不想写那么多的,但是有些人就是不会。至此library目录中的项目结构我们就改造完成了。
按照完全一致的方法我们去改造example目录。
导入eclipse
将修正过的项目(此处为SuperSLiM-master目录)下的所有内容导入到eclipse中:
再谈如何将android studio项目转换成eclipse

文章图片

导入之后生成了library和MainActivity两个project:
再谈如何将android studio项目转换成eclipse

文章图片

library是库,而MainActivity中是demo,通常我喜欢将他们的项目名称改成github上的名称,这里我分别更改为:SuperSLiMLibrary和SuperSLiMDemo
解决错误
从上图中可以看到导入的两个project有错误,其实这些错误基本上是依赖关系导致的。因为SuperSLiMDemo是依赖于SuperSLiMLibrary的,所以我们先从SuperSLiMLibrary中的错误入手。
在这个时候我并不知道这些错误具体产生的原因,所以我需要查看具体的错误文件,打开项目的包,发现以下java文件有红叉:
再谈如何将android studio项目转换成eclipse

文章图片

 
随便选择一个文件进去看看,这里我就选择第一个好了找到了第一个错误:
再谈如何将android studio项目转换成eclipse

文章图片

LayoutState的recyclerState方法找不到,LayoutState不就是上图中的第三个文件么,进去很多错误,随便截个图
再谈如何将android studio项目转换成eclipse

文章图片

显然是需要导入RecyclerView包了。期望导入RecyclerView之后就不会有任何问题了。
导入后发现大部分错误不见了,只有LayoutState还有错误,原来是因为LayoutState中有这样的代码

  1.   if  (Build.VERSION.SDK_INT  <   Build.VERSION_CODES.LOLLIPOP)  {
这要求编译环境是5.0才行。将sdk换成5.0的,ok了,SuperSLiMLibrary已经没有任何错误了。
看到这里你可能会想,是不是麻烦了点,确实,事实上我并不是上面的每一步都按部就班,我一般先在每个错误文件中扫描以便错误的地方,很快就可以定位到RecyclerView,然后添加依赖,甚至我都不想去扫描错误直接添加RecyclerView的依赖,因为github中已经说了这个项目是RecyclerView实现的。
SuperSLiMLibrary到这里还有最后一步,将它设置成library,不然SuperSLiMDemo在添加lib的时候是找不到他的。
再谈如何将android studio项目转换成eclipse

文章图片


再来看看SuperSLiMDemo中的错误。
在这之前我首先将刚刚的SuperSLiMLibrary添加到依赖中。然后还是有这些错误:
再谈如何将android studio项目转换成eclipse

文章图片

style中的错误是因为没有依赖appcompat,于是先添加了再说,一定要添加最新版本的appcompat(兼容5.0的appcompat),为什么呢,因为在主题代码中有下面这些属性:

  1.         < style  name="AppTheme.Base"  parent="Theme.AppCompat.Light">
  2.                 < item  name="colorPrimary"> @color/primary< /item>
  3.                 < item  name="colorPrimaryDark"> @color/primary_dark< /item>
  4.                 < item  name="colorAccent"> @color/accent< /item>
  5.                 < item  name="android:windowNoTitle"> true< /item>
  6.                 < item  name="windowActionBar"> false< /item>
  7.         < /style>
当你看到colorPrimary属性的时候肯定需要在appcompat中编译的。
同时因为SuperSLiMLibrary都是在5.0上编译的,因此SuperSLiMDemo我也同样在5.0上编译。
然后你会发现我都没去看src中的java代码,就完全没有错误了。
 
至此SuperSLiM这个项目就完全转换成eclipse版本的项目了。
SuperSLiM不是最好转换的项目,也不是最难转换的项目,这篇文章只是告诉你,studio转eclipse是可行的,遇到问题该怎么解决。文中所描述的步骤完全没必要一一照搬,因为根本就没有什么固定的步骤。
另外我看到有网友对使用了appcompat的项目比较排斥,看到使用了appcompat就不研究了,这是完全错误的思想,现在绝大多数开源项目都用了appcompat,而且因为5.0的出现appcompat还将被越来越多的项目使用,你可以看到在android官方文档上面,5.0的很多新特性更多的是介绍如何用appcompat去实现,而不是标准的sdk中的类。
 
Android Studio项目转Eclipse项目Android Studio项目的目录结构和Eclipse项目不同。如何转换?
以FloatingAction 项目为例:实现向上滑动隐藏悬浮按钮,向上滑动显示悬浮按钮。
GitHub 地址:https://github.com/telly/FloatingAction
解压zip,我们需要的是两个文件夹是demo,library。在Eclipse中需要建两个项目,一个示例代码项目demo,一个lib项目library。
项目library:
1.打开library文件夹中的AndroidManifest.xml,查看到项目的包名为com.telly.floatingaction。
再谈如何将android studio项目转换成eclipse

文章图片

打开gradle.properties配置文件,查看到  lib项目名为 FloatingAction Library。
再谈如何将android studio项目转换成eclipse

文章图片

在Eclipse中创建项目  FloatingAction Library   包名 为com.telly.floatingaction。
2.将编码格式改为UTF-8。
找到项目路径 把src、res、AndroidManifest.xml都替换掉,如果有lib文件夹,或者jniLib文件夹,里面的内容Copy到libs下面然后把项目
设置成isLibrary。
3.项目报错,android.support.annotation.* 资源没有。 原因:Api 要求版本有略高,要21才行,导入支持包即可。 下载地址:http://download.csdn.net/download/liuyaoyue1/8063983 4.刷新项目,如果还有错,就是Eclipse环境的问题,比如你的Target版本 tools 没有下载 , 换一下 Android 版本试一下。   项目demo:和lib项目一样 查看配置包名为:com.telly.floatingaction.demo   src,res,AndroidManefest.xml 替换掉 添加项目引用   如果版本不够的话,记得把xxxh的资源文件删除掉。     自从Android  Studio(后面称AS)推出后,越来越多的项目都使用AS开发,对于很多一直使用Eclipse的同学来说无疑是个很不爽的事情。我就是其中之一,现在公司的项目都是用AS开发的了,但是对于测试来说常用的一些插件,比如MAT、findbugs等都习惯于在eclipse中使用。
 
所以今天研究了下把Android Studio工程导入eclipse中的方法,网上找了下,大部分都是把eclipse工程导入AS的方法,看来大家都在从eclipse往AS迁移了,未来是AS的天下。
回到主题,说AS往eclipse迁移的方法:
其实很简单,代码都是一样的,从AS工程中找到与Eclipse工程对应的文件,放到对应的位置就可以了。
所以我们要做的就是把AS的文件考到eclipse工程中,第一步我们先新建一个eclipse工程当壳,进入workspace,找到刚刚新建的工程。
 
然后按照下面的对应关系依次拷贝:
 
  1. a.替换  as  中src/main/AndroidManifest.xml  ->   eclipse  中的AndroidManifest.xml;    
  2. b.替换  as  中src/main/java  目录下源文件  ->   eclipse  中的src  目录下的源文件;    
  3. c.替换  as  中src/main/res  目录下资源文件  ->   eclipse  中的res  目录下;    
  4. d.拷贝  as  中src/main/jniLibs  中的目录  ->   eclipse  中的libs  目录下;    
  5. d.拷贝  as  中libs  中的目录  ->   eclipse  中的libs  目录下;    
  6. e.拷贝  as  中src/main/assets  中的目录  ->   eclipse  中的assets  目录下   
 

此时检查下lib目录中是否有.arr格式的文件。如果工程中没有引用.arr格式的文件,此工程已经替换完成,在eclipse中刷新工程即可得到一个和AS中一样的工程。 
如果工程引用了.arr格式的文件怎么办呢?先导入我们刚刚得到的主工程再说,导入后发现有很多错误,别怕,是因为依赖的库在arr中,拿过来就是。
首先我们解压这个arr文件,可以发现里面有个class.jar,其他的结构其实与一个eclipse工程很像,我们在解压后得到的文件夹中新建一个libs文件夹,把孤零零的“class.jar”放进去,然后将此工程导入eclipse。导入后右击工程-properties-Android,在Is Library前面打勾,使之变成library project。
然后将这个library project引入我们之前导入的主工程,然后选择project-clean即可。
引入方法:右击工程-properties-Android-add刚刚加入的library project-OK。

    推荐阅读