Eclipse项目迁移到Android Studio记录

本文分享了从Eclipse迁移到Android Studio过程中遇到的各种问题及解决方案,包括R文件问题、.9.png图处理、依赖冲突解决等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

这个标题就说明了这篇文章是一个踩坑之旅,相当蛋疼的一周。虽说这一周也不是只做这一件事,全力做的话,差不多两天这样子。我只想说一句话:珍爱生命,远离Eclipse,前提是还是作为一个Android开发者的角度,Eclipse不管从哪方面来说,都是一个优秀的IDE,但是仅就对Android来说,我们拥有更好的选择, 那就是Android Studio

填坑之旅

其实我已经不知道如何开始讲起了,碰到的坑太多了,我也不能说全部回忆起来,只能说,按照我当时的做法进行回忆记录吧。

大家都知道Eclipse有个export功能,其中有这么一个选项:

eclipse export

这么导出的话会得到一个gradle构建的project,但是我个人是不推荐这么做的,因为看似直接导入这么一个project会大大缩短移植的时间,但是就我的经验来说,这么引入之后,只会带来更多的问题与坑,所以我所推荐的做法是先新建一个Android Studio Project:

as project

随便说一下,关于文件树,最好是选择project这个选项,这也是最直观,最详细的。
在建立好一个新的project之后,就可以根据文件夹的对应关系。开始将Eclipse之中的文件一一对应对Android Studio的项目之中了,当然AS在这期间,无数的错误会报出来,但是没有关系,在全部的文件都导入完毕之后再说。

在导入完毕之后,我首先遇到的问题就是R文件的问题,原因在于我新建AS的project的时候,目录结构和原来的Eclipse工程不一样造成的,后面必须一一更正。所以,这里要提醒一点,如果想要简化操作,代码全部移植过来就可以使用,最好在创建包名时,同原Eclipse工程保持一致。

再接下来,对于从Eclipse上移植过来的工程,十有八九会 报关于XX.9.png这样的错误。报错的原因在于AS对于图片的检查要比Eclipse严格许多,所以不标准的.9.png图是不能逃过AS的法眼的,既然是因为严格的原因造成的,那么我们可以自定义让AS不那么严格,在build.gradle中配置如下:

aaptOptions{
cruncherEnabled = false
useNewCruncher = false
}

配置完成之后,对于大部分这方面的问题,我认为应该是能够解决了,但是就我个人而言,这么做还是不够,还是会报错,这时候,只能采取最直接的办法:使用AS自带的.9.png处理工具将不标准的图重新绘制一次,至于哪些图不标准,AS会提示我们的,这个不用担心。还比较好的是,虽然工程中有这么多的图片资源,实际上需要改的就那么几张,我并没有花费太多的精力在这上面。可是若是你的project需要修改的量有点大,那还是最好找美工进行确认,重新切图比较好。

上一步完成之后,继续重新build,如果你的项目和我一样,有不同的依赖库依赖了相同的Jar包,那么AS在这里会提示关于包重复,冲突的问题,这个问题我也烦恼了好久。这个问题主要就是gradle本身的机制规定不能重复造成,也不是就是这么做有错,就是如果想要使用gradle构建,那么就必须遵守它的规定罢了。解决的方法有两种:

  • 使用AS 提供的包
    以support.v4包为例,先将重复依赖v4包的module中的v4.jar删除:

    v4

将此包删除之后,必然又是报错,但是没有关系,我们先不理会,在将重复依赖的v4包都删除之后,进行如下的操作:

library

选择Project Structure之后,切换到Dependencies中,选择’+’号,导入AS自带的v4包即可。对于其余重复依赖的module,也都采取此种办法来进行依赖。

这里多说一句,以上的所有操作都是可以在build.gradle中使用代码进行构建的,完全没有问题,我也是一般会采用代码来构建。这里AS提供了相应的图形化的配置,更加直观。这里没有哪种方式更好的分别,开发者自己选择适合自己的方式就可以了。

  • 自定义Library module依赖
    我个人是比较推荐这一种方式的,因为比较灵活,适用于多种情况。
    同样以v4包为例进行说明。在删除了module中重复的v4.jar之中,按如下操作:

library module

点击选择新建module,然后新建一个module,类型为Android Library。接下来的按照提示操作即可。正如我之前所说的那样,这一步同样可以在build.gradle进行配置。只需输入以下代码:

apply plugin: 'com.android.library'

然后将v4.jar导入到这个module的libs目录下即可。
最后,打开Project Structure之后,切换到Dependencies,选择’+’号,选择导入module依赖,选择我们导入v4.jar包的module即可。

在进行了如上的操作之后,包依赖重复的问题英应该就能够得到解决了。

jar,module依赖完成之后,肯定就轮到了.so动态链接库的依赖的,在现在版本的AS之中,这是一个非常简单的步骤,如下:

jni

在如下所示的固定的目录层级下,将.so文件直接拷入就可以了。这里顺带说一句,AS中的aidl文件是单独存放的,和主代码文件夹java平级。同时,你也可以自定义你的.so的目录:

sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}

这样就可以自定义你的.so目录了,但是实际上不是很推荐自己去自定义.so的目录文件夹,一般来说,直接在AS规定的文件夹下导入即可。

按照常理来说,都这一步应该没有问题了,但是就我遇到的问题,即使这样也没有解决.so的注入问题,后来我发现是我在armeabi/armeabi-v7a包下的处理有问题导致的。同时还有一点需要提示,如果以上均不能解决你的.so问题的话,要大胆进行尝试,将.so文件夹导入libs包下,有时候你可能会发现惊喜。

到这里的话,基本来说,构建就已经基本完成了,剩下的就是编译相关的问题。对于编译相关问题,感觉问题就比较独特了,对于不同的人,不同的项目,AS虽然可能报同样的错误,但是实际上的错误可能有着大大的区别。

比如,遇到编译莫名其妙的问题,你可以尝试在build,gradle中添加如下语句:


dexOptions{
javaMaxHeapSize"4g"
}

增加可使用的内存可解决一些莫名其妙的问题。

再举个例子,如果你的项目是大型项目,那么极有可能你的方法数超过了65k的限制,那么现在这个问题的解决在AS中的解决也显得如此简单:

defaultConfig {

        multiDexEnabled true

    }

编译中出现的错误可以说是最恶心人的,没有一种非常通用的解决方法,所以需要具体分析,这里我推荐大家在编译的时候都加上 –debug选项进行编译,然后就可以在gradle 控制台看到打印的编译日志了,我们的工作就是在这些编译日志中,找到各种错误的蛛丝马迹,这是一个枯燥的过程却也是解决问题最直接可行的解决方式。

添加debug选项,有两种方式

  • gradlew 命令行

  • 在AS中使用图形化全局配置

debug

同样地,选择自己喜欢的方式即可。

最后,忘了说 关于proguard混淆的事情。对于Eclipse移植过来的项目,一般来说,proguard配置文件是直接可以使用的,但是或多或少会出现一些错误,但是都不是什么大问题的,观察编译日志一般都可以比较轻松的解决。还有一个点需要注意的,若是你的build.gradle已经声明依赖了jar包了,那么就不要在proguard中再次进行声明了。

以上就是我能回忆到的一些东西,我感觉我遇到的坑应该远不止以上的问题,但是主要问题就是以上这些问题吧,具体问题需要具体分析,对于编译错误一定要仔细查看编译日志,这样做是非常好的解决问题的方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值