如何将android studio项目转换成eclipse
更新:虽然本人坚守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 项目中在使用方法里面就有如下代码
repositories {
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
} dependencies {
compile 'org.lucasr.twowayview:core:1.0.0-SNAPSHOT@aar'
compile 'org.lucasr.twowayview:layouts:1.0.0-SNAPSHOT@aar'}
看不懂?没关系,我也看不懂。你只要看懂上面红色文字部分的意思就行了。
首先要讲的就是项目结构的转换,这一点很基础,我已经在http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0918/1692.html 一文中讲解过。
但是那篇文章没有结合具体的例子来说明,因此对于新手来讲,还是很难开头。其实除了项目的结构之外,项目的依赖关系其实也是一个难点:对于一个studio项目我们如何知道他依赖了哪些东西呢?
一个比较典型的实例
一般来讲一个项目如果没有什么新系统的特征,直接转换成eclipse的目录结构然后eclipse import进去就ok了,但是现在很多项目往往使用了Material Design中的一些东西,比如ToolBar,RecyclerView以及appcompat的主题等,这种依赖关系就比较复杂。
下面我以https://github.com/TonicArtos/SuperSLiM 为例讲解如何将它转换成eclipse项目。
更改项目结构
首先下载然后解压:
这么复杂!吓到了是吧,没关系很多文件和目录我可以直接删掉,从文件的名称来看example下面应该是demo代码,library下面是库代码。其他 的直接删掉,当然为了保险起见,你还是点击去看下如果里面有src目录基本上就可以确认这是跟项目代码相关的了。删掉其他文件和目录之后我们就只剩下:
心情顿时就好了。
我们先来解决library目录中的问题。打开library
回想上面说的studio项目中src/main目录下才是真正的项目代码。因此我们将src/main中的文件全部copy出来,其他的都可以直接删掉了,至于copy出来放在哪里那是你的事,一般我自己的做法是直接放在library目录下,然后删除掉copy文件之外的所有东西。如果你按照我描述的做,那么到这一步library下面应该是这样的:
再回想上面说的main下java目录里面的代码对应的是eclispe项目中的src目录中的代码。因此我们将java目录改名src目录:
这不就是熟悉的eclipse项目么,其实非常简单,本来我是不想写那么多的,但是有些人就是不会。至此library目录中的项目结构我们就改造完成了。
按照完全一致的方法我们去改造example目录。
导入eclipse
将修正过的项目(此处为SuperSLiM-master目录)下的所有内容导入到eclipse中:
导入之后生成了library和MainActivity两个project:
library是库,而MainActivity中是demo,通常我喜欢将他们的项目名称改成github上的名称,这里我分别更改为:SuperSLiMLibrary和SuperSLiMDemo
解决错误
从上图中可以看到导入的两个project有错误,其实这些错误基本上是依赖关系导致的。因为SuperSLiMDemo是依赖于SuperSLiMLibrary的,所以我们先从SuperSLiMLibrary中的错误入手。
在这个时候我并不知道这些错误具体产生的原因,所以我需要查看具体的错误文件,打开项目的包,发现以下java文件有红叉:
随便选择一个文件进去看看,这里我就选择第一个好了找到了第一个错误:
LayoutState的recyclerState方法找不到,LayoutState不就是上图中的第三个文件么,进去很多错误,随便截个图
显然是需要导入RecyclerView包了。期望导入RecyclerView之后就不会有任何问题了。
导入后发现大部分错误不见了,只有LayoutState还有错误,原来是因为LayoutState中有这样的代码
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
这要求编译环境是5.0才行。将sdk换成5.0的,ok了,SuperSLiMLibrary已经没有任何错误了。
看到这里你可能 会想,是不是麻烦了点,确实,事实上我并不是上面的每一步都按部就班,我一般先在每个错误文件中扫描以便错误的地方,很快就可以定位到 RecyclerView,然后添加依赖,甚至我都不想去扫描错误直接添加RecyclerView的依赖,因为github中已经说了这个项目是 RecyclerView实现的。
SuperSLiMLibrary到这里还有最后一步,将它设置成library,不然SuperSLiMDemo在添加lib的时候是找不到他的。
再来看看SuperSLiMDemo中的错误。
在这之前我首先将刚刚的SuperSLiMLibrary添加到依赖中。然后还是有这些错误:
style中的错误是因为没有依赖appcompat,于是先添加了再说,一定要添加最新版本的appcompat(兼容5.0的appcompat),为什么呢,因为在主题代码中有下面这些属性:
<style name="AppTheme.Base" parent="Theme.AppCompat.Light">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/accent</item>
<item name="android:windowNoTitle">true</item>
<item name="windowActionBar">false</item>
</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的项目
1. 找到这个目录:项目名称\app\src\main,并把它导入到Eclipse里 2. 把项目名称\app\libs文件夹拷贝到新生成的项目下,并删除掉.DS_Store文件 3. 这时再看还有什 ...
- 将Maven项目转换成Eclipse支持的Java项目
当我们通过模版(比如最简单的maven-archetype-quikstart插件)生成了一个maven的项目结构时,如何将它转换成eclipse支持的java project呢? 1. 定位到mav ...
- Linux16.04 LTS 环境下将cmake的项目转换成eclipse可导入可调试的工程项目
Linux作为一个开源系统,其中的一个优势就是有效的将各种源码编译得到的库集合在一起,为项目的使用创建了便捷.通常情况下,我们在开发自己的开源项目时,喜欢使用cmake调用各种三方库,如opencv ...
- 把Eclipse项目转换成Maven项目
把Maven项目转换成Eclipse项目只要使用Maven的Eclipse插件就能做到 mvn eclipse:eclipse 其实Maven的Eclipse插件也有把Eclipse项目转换成Mave ...
- Android Studio项目转Eclipse项目
Android Studio项目的目录结构和Eclipse项目不同.如何转换? 以FloatingAction 项目为例:实现向上滑动隐藏悬浮按钮,向上滑动显示悬浮按钮. GitHub 地址:http ...
- 将Eclipse项目转换成AndroidStudio项目过程中遇到的问题以及解决方法
将Eclipse项目转换成AndroidStudio项目也不是第一次了,昨天转的时候遇到几个问题: 首先将项目导入androidstudio,导完后报错: 问题一: Error:java.util.c ...
- 怎样将android studio项目导入eclipse
如今,越来越多的开源项目都是用android studio来开发的,所以源码都与eclipse有所不同. 以下是将android studio项目导入eclipse的一般步骤: 1. 先解压项目: 2 ...
- Maven转换成Eclipse项目后的依赖库更新问题
使用Eclipse的Maven插件创建项目 如果你的Eclipse安装了Maven插件,创建Maven项目相当方便,创建后的项目如: 优势:项目引用的类库名称是"Maven Dependen ...
- struts2.3.4.1转换成eclipse项目的过程
1.在本地安装配置maven. 1.1.从maven官网下载,官网地址:http://maven.apache.org/download.cgi 1.2.配置maven环境变量 例如,我的 ...
随机推荐
- 在JavaScript函数式编程里使用Map和Reduce方法
所有人都谈论道workflows支持ECMAScript6里出现的令人吃惊的新特性,因此我们很容易忘掉ECMAScript5带给我们一些很棒的工具方法来支持在JavaScript里进行函数编程,这些工 ...
- [深入React] 5.MVC
react 是一种典型的MVC框架. 在jquery中,我们都是针对dom编程,由dom事件触发dom改变,MVC三层代码混在一起. 比如点击变颜色 $('#btn').click(function( ...
- Problem with generating association inside dbml file for LINQ to SQL
Question: I have created a dbml file in my project, and then dragged two tables from a database into ...
- swift菜鸟入门视频教程-04-集合类型
本人自己录制的swift菜鸟入门,欢迎大家拍砖,有什么问题能够在这里留言. 主要内容: 数组(Arrays) 字典(Dictionaries) 集合的可变性(Mutability of Collect ...
- ini文件解析c库(iniparser)
一.交叉编译ini解析库 1.官方网站http://ndevilla.free.fr/iniparser 下载iniparser-3.1.tar.gz 2.解压 tar -zxvf iniparser ...
- Form( 表单) 组件
本节课重点了解 EasyUI 中 Form(表单)组件的使用方法, 这个组件不依赖于任何组件.一. 加载方式表单组件只能在 JS 区域设置,首先定义一张表单.<form id="box ...
- 3:url无规律的多页面爬取
试例网站:豆瓣电影TOP250:http://movie.douban.com/top250 关键点:在审查元素下查看后页即可以看到跳转的url.而且最后一页就此属性就没有了. 由于关键是实现分页,所 ...
- (一)Android开发之安卓系统的前世今生
1 什么是Android Android中文名称"安卓",英文含义为"机器人",Android是谷歌旗下的一款基于linux平台的开源操作系统.主要使用于移动设 ...
- Swift 循环、数组 字典的遍历
import Foundation // 数组声明 var arr = [String]() // 数组循环添加项 ...{ arr.append("Item \(index)") ...
- sql_autoload_register() 函数 和__autoload() 的区别
1:__autoload($class) 因为是一个函数,所以只能定义一次,使用多个会冲突报错;而 sql_autoload_register('function') 可定义多个,它有效地创建一个队列 ...