今天搞了差不多一整天,终于成功把原来在Eclipse的项目移植到了Android Studio上面。其实网上关于如何做移植已经有不少文章了,而且Android Develop的官网也有介绍,但是差不多网上的版本都已经过时,因为Android Studio和Gradle的版本更新实在是太快了。。。(仿佛隐隐约约看到了从Swift1开始使用到Swift2.x之后的语法变化导致项目大面积语法修改的悲剧。。。)
好了,言归正传,详细记录一下整个过程。
首先说一下大前提:
我的Eclipse版本是Mars.1,不过这个Eclipse版本应该不是问题,反正导出的Gradle的几个文件还是要手动修改的。
我的Android Studio的版本是1.4,目前已经有1.5了,我就装了差不多有1周,就出了1.5,还没来得及更新,这个问题也不大。建议大家先自己把Studio的环境搭好,然后自己写一个Hello World调试一下,因为后面有些东西如果你事先调试好了,可能会节省一些工作量。
在导出项目前最好备份一下你的工程。我的项目就是导出以后因为多了一些Gradle的文件,所以还用Eclipse编译的时候会出一些error。如果你的也出了一些类似于“In gradle projects always user http://schemas.android.com/apk/res-auto for.....”的错误,不要慌张,你能看到你的工程里面有个绿色图标的Gradle,把那个删除,然后重启Eclipse,应该就ok了。
第一步,从Eclipse导出工程
1. File --> Export
2. 选择Generate Gradle build files,点击Next
3. 这个是告诉我们一些关于导入Studio的Tips,可以直接Next
4. 选中你的工程
这里说一下,我的主项目是 zj_tzqu,然后SlidingMenuLib是一个资源项目,也就是说,在project.properties文件中是这样引入的:
android.library.reference.1=../SlidingMenuLib
5. 勾选 Force overriding of existing files
如果不选中,就有可能会出现上面的提示。当然,这是因为我之前尝试了好多次,所以已经在文件中有相应的Gradle的文件了,保险起见,直接覆盖掉原来的文件。
6. 点击Finish,然后就导出了。
第一步就算完成了,其实第一步基本上没有把你的原程序做一些语法的修改,只是多了一些Gradle的配置的文件,我把他们都截了出来,就是这几个:
第二步:修改Gradle配置文件
主要修改的就是上图中的两个红框标出来的。
1. gradle --> wrapper --> gradle-wrapper.properties
可以看到我通过Eclipse导出来的版本号是1.12,那截止到2015年11月26日,最新的gradle版本是2.9、 1.12是14年12月份的版本,可见Google对Studio的厚爱,就像Apple 对Swift一样。。。
我就把这里改成了gradle-2.9-all.zip,当然你也可以改成官网上提供的任一一个版本(官网在此:https://services.gradle.org/distributions)
2. build.gradle
注意图中的红框内容是我改过的了。为什么改成1.3.0 因为我看了一眼我的Studio的hello world的工程的build.gradle文件,发现里面的gradle是1.3.0,所以就改成了一样的。我没有试验如果改成比如2.9.0这样的行不行。但是既然hello world可以正常运行,那就表示这样的配置是ok的。这也是为什么在开头的时候我建议大家先搭好Studio的环境,然后跑一下hello
world证实你的环境是OK的。
别看第2步很简单,但是其实这是很关键的一步,这里也要感谢下http://blog.csdn.net/bruce_6/article/details/42495705 这篇博主的文章,我也是在他的基础上自己摸索出来的~~
来最后一步,
第3步,导入Android Studio
把我们之前5个和Gradle相关的文件(夹),带上工程的两个文件夹(1.4步骤中选中的两个文件夹)一起拷贝出来,到一个新的文件夹下面。为什么要这样,1是Studio在导入的时候提示我们不要直接导入Eclipse workspace的工程;2是我的Studio是装在Mac上的,Eclipse是在Windows上面的 - -!
1. 我们选择Import project(Eclipse ADT, Gradle, etc.)
我之前在网上查的都是说要选择 Import Non-Android Studio project, 但是估计是Studio的版本不同,Studio 1.4 根本就没有这一项,但是看了一眼前几项也不是,然后注意这里面有Gradle关键字,所以就试一试吧。
2. 选择build.grade 或者settings.gradle都可以,看到界面上面的提示了吧,我选择的是build.grade,就是我们上面改动过的文件。
3. 手动下载grade-2.9-all.zip
其实如果你的Studio环境没问题,就是会开始正常用gradle编译项目了,但是如果你第一次使用,那你一定会出现我的问题,就是Gradle sync的时候出错。原因当时就是我们亲爱的GFW了,即便是我翻墙通过Studio下载grande,速度也是慢的1B啊,所以这里我们可以自己下载gradle版本然后再放到相应的路径下面:
基本上网上都引用了这样一段话,为什么不推荐我们自己下载,因为其实Studio是在路径下面多了一个25位的标识码
在gradle-2.9-all的下面,其实是有一个文件夹的,这个文件夹会根据不同用户生成不同的,你们的肯定不会是我这个。
所以,最好的办法是先让Studio自动生成这个文件夹,也就是我们做完第2步之后,其实Studio已经在试图download我们设定的gradle版本,如果你去文件夹里面看,会发现有一个.zip.lck 和另外一个.zip.park的文件。但是一个是0k,一个是下载了一半的文件,如果没有翻墙,这个过程非常非常慢。
所以,我们看到这个路径已经建好了以后,就可以直接去官网上下载对应的版本了。注意,如果是Mac上,Safiri会自动把zip包解压缩了,如果你重新压缩Safiri下载的文件成zip放到路径下面,会出这样的““Error:Gradle distribution 'https://services.gradle.org/distributions/gradle-2.9-all.zip'
contains too many directories. Expected to find exactly 1 directory.””
所以,要不把safiri的自动解压功能关闭了,要不就换个浏览器下载,总之不要动下载下来的那个gradle-2.9-all.zip的包。
然后把这个包放到25位唯一码的文件夹下面。
重新试一下sync gradle,你就会发现,gradle开始build我们的工程了。之后就很顺利了,很快工程就建立好了。
到此,整个工程的导入就算全部完成了。
在附送两个小Tips:
1. 有的同学可能习惯了Eclipse的样式布局,初次接触Studio会发现work space区域很不习惯
这是系统默认的布局,那我们可以通过切换到Project模式来看,这样就和Eclipse的布局非常像了。
2. 如果你发现移植过来的代码中的注释内容全部都乱掉了,而且在Gradle初次编译的时候,你发现有很多错误提示: “编码 UTF8的不可映射字符”,但是我们的程序没有问题,是可以运行的,就是注释部分看不了。
很简单,在右下角
点击UTF-8 选择 GB2312 就ok了。
注意,可能是这部分的代码是你从第三方拿过来直接凑上去的,很容易出现编码上的问题,只需要改变这个文件的编码格式就可以了。不要动全局的设置。
好了,好好享受Android Studio带给大家极致版的Coding 体验吧~~~