将Eclipse代码导入到AndroidStudio时的问题汇总

关于eclipse工程转Android studio 查了下资料,引用了下面的博客
http://www.cnblogs.com/ct2011/p/4183553.html
两种方式,我使用了第二种
使用新的目录结构
转换目录结构

  • 打开Import
  • 新用户:
    这里写图片描述
  • 老用户: File–>Import Project
    这里写图片描述

  • 直接找到原有的Eclipse工程 单一工程直接导入即可。

  • 有库工程的需要注意,导入一定要指向主工程,而不是整个项目的目录。指向项目目录是无法进行转换的。
    这里写图片描述
  • 指定目标路径
    这里写图片描述
  • 这个地方需要详细说一下
    这里写图片描述
    这里上面两个选项暂且不说,勾选上。
    最后一项提一下: 将Module名创建为camelCase风格。
    驼峰式,这个搞Java的都会熟悉,camelCase表示首字母小写的驼峰式风格,CamelCase表示首字母大写的驼峰式风格。
    不勾选这个选项意味着你原先的工程名是啥样,转换完就是啥样。
    这里的AndroidStudio会去分析Eclipse工程下的. project文件,里面的name就是你在Eclipse中看到的工程名。(没有此文件时会使用此工程的文件夹名。)
    这里写图片描述
    当然也有例外,比如countly-sdk-android转换完就成了countlysdkandroid,下划线我就不知道了,这个没有再仔细研究规则,不过CamelCase会保持正常。
    这里我比较喜欢让Module首字母大写(不知道为啥看这首字母小写难受),原来的工程就是CamelCase风格,我就不勾选了。
    当然如果这里没注意直接转换成了camelCase但最后又不喜欢怎么办? 可以看后面《如何更改Module名称》部分。
    OK,配置完点击Finish即可
  • 之后需要经过一段时间的转换。成功后可以看到import-summary.txt,这个文件非常有用,后面会讲到。
    这里写图片描述
    到这里,你的应用其实已经可以通过AndroidStudio正常编译,你也可以写代码去了。
    但我希望你还能继续看下去,因为这个成功后弹出来的import-summary.txt写了些很重要的东西。

带你看懂import-summary.txt
* Manifest Merging*

Your project uses libraries that provide manifests, and your Eclipse
project did not explicitly turn on manifest merging. In Android Gradle
projects, manifests are always merged (meaning that contents from your
libraries’ manifests will be merged into the app manifest. If you had
manually copied contents from library manifests into your app manifest
you may need to remove these for the app to build correctly.
这段应该都能看懂,无非就是说你Library的清单文件有效啦。
不用手工拷贝到主工程的清单文件中了。以前拷贝过的,要移除才能正确build。

Ignored Files(这个最重要)

之所以说这部分重要,是因为AndroidStudio通过这段文字告诉了你,它导入的时候忽略了哪些文件。
也就是说这部分内容,它没给你拷进来,你要是不去自己拷贝,那这部分你新Gradle工程里面就没有了。
这里选一些典型的ignore文件来看一下:

From SDK:
* proguard-project.txt
* proguard.cfg From UI:
* cert\
* cert\cert From CrosswalkWebview:
* ant.properties
* build.xml From SlidingMenuLibrary:
* LICENSE.txt
* pom.xml
给上面的忽略文件分分类:

  • 确实不需要的:混淆文件、ant的ant.properties与build.xml、maven的pom.xml。
  • 需要再次声明的:LICENSE.txt。不声明属于盗版侵权啊~~
  • 自定义文件夹和文件:cert。这个文件夹是自己创建的,不属于Android规定的目录,所以AndroidStudio没给拷贝。

需要留意你的Ignored Files部分,并根据自己的需要手工拷贝到新工程中。

Replaced Jars with Dependencies & Replaced Libraries with Dependencies

在Replaced Jars with Dependencies部分,有如下文字:

android-support-v4.jar => com.android.support:support-v4:21.0.3
gson-2.3.jar => com.google.code.gson:gson:2.3 joda-time-2.6.jar =>
joda-time:joda-time:2.6

可以看到jar被替换了。 可以看到工程里面没有了当初添加的jar包。那么jar包去哪了呢?
暂时先留个悬念。
我们继续来看 Replaced Libraries with Dependencies部分

ActionbarLibrary =>
com.actionbarsherlock:actionbarsherlock:4.4.0@aar
com.android.support:support-v4:21.0.3

可以看到ActionbarSherlock被替代为了aar(Android ARchive ,jar : Java ARchive)。关于aar的介绍可以看这里,本文就不再详细展开了。

可以看到的是Library和jar都被替换了,可是你在当前工程里再也找不到了。这是为什么?

跟我来看下面的操作:

  • 在Module上右击,选择Open Module Settings
    这里写图片描述
  • 切换到Dependencies
    这里写图片描述
  • 点击右侧的加号添加,选择Library dependency
    这里写图片描述
  • 可以看到这个界面:
    这里写图片描述
    OK,到这里就可以知道真相了,在AndroidStudio中你可以添加在线的库或jar包,添加完成后你就可以和平时一样正常使用。
    而你的同事在打开这个工程的时候会即时下载,保证你们的代码都能正常运行。
    这也是为什么当你的工程转换完毕后,有些jar和Library消失的原因。他们被转成在线的了。
    Moved Files

这部分在讲你的目录结构变化,基本上可以认为他在废话,没什么看的必要了。

Next Steps & Bugs

呵呵,略过吧

最后一句

This import summary is for your information only, and can be deleted
after import once you are satisfied with the results.
你一旦觉得自己的工程没问题了,就可以把这个文件删除了。
导入AndroidStudio工程注意
通过上面的步骤,你的项目已经转换了目录结构,这时候你可以提交代码,供其他同事下载使用了。
其他同事把代码下载下来,他们所需要引入的是一个Android Gradle Project了。

  • 新用户
  • 如果项目中有.idea之类的IntelliJ的文件,开始选择的应该是Open an existing Android Studio
    project,而不是Import Non-Android Studio project。
  • 如果你下载下来的代码里面只有gradle的文件,即使还是要选Import Non-Android Studio project。

  • 老用户依然使用: File–>Import Project

这里需要提醒的是,对于含有库工程的项目而言, 需要指定整个项目的目录,仅仅指定主工程是没用的。

到这里我们需要停下来总结一下:

  • 如果你导入的是一个Eclipse工程,那么指定主工程目录。AndroidStudio通过分析来帮你完成转换。

  • 如果你导入的是一个AndroidStudio工程,那么指定整个项目的目录 。

附: 如何更改Module名称
在Module上右键refactor–> rename ,当然可以看到有快捷键shift + F6, 这样就可以改变Module的名称了。
但是还没有结束,这样没有更改引用这个Module的地方。
如果他是一个库工程,你还需要继续去查看引用它的地方并进行修改。主要是其他Module的Gradle文件。

Tips:
选中Module,ctrl+c即可复制工程名,在相关Gradle文件中ctrl+v替换成新的名称即可。

最后,别忘了,settings.gradle,这里include的module名称也需要更改。 至此,算是修改结束。

一切修改完毕,点击弹出提示中的Sync Now,让工程重新构建
这里写图片描述
构建结束后就一切正常了。
当然你如果对文件夹的名称也看着不顺眼,也可以去修改文件夹名称,改变后记得重新导入即可。

总结
以上就是两种导入的方式的介绍,总体来说第一种适合无奈的时候提前熟悉AndroidStudio,第二种则是更推荐的方式。
无论采用哪一种,都希望你能尽快的接触AndroidStudio,体验它的强大。

好了,以上是转载自大神总结的方法,按照这个流程就能基本实现导入Android studio项目并自动生成配置文件了,但是我的项目报错了。总结了遇到的几个问题附上解决方案。

  • 第一个问题

报错log大致这样:Error:Execution failed for task ‘:app:mergeDebugResources’. > Crunching Cruncher scrollbar_thumb.9.png failed, see logs
这里写图片描述
于是又查了下资料:在Android studio 项目中使用 9patch常见问题解决
http://blog.csdn.net/feipeng_/article/details/50519710
错误是因为.9.png图片检测问题,资源包内有不正确的9png图片导致
到这里,遇到个问题,资源包图片过多,根据log提示又需要一个个修改9png文件,很麻烦。然后请教大佬,提供了以下工具类
main主函数,配置好资源包地址
这里写图片描述

public class ImageUtils {

    /**
     * @fun   输出所有格式和后缀名不相等的图片    输出格式  后缀名:实际格式
     * @param path 文件夹路径
     */
    public static void getNoEqualImageFiles(String path) {

        File file = new File(path);
        File[] tempList = file.listFiles();
        for (int i = 0; i < tempList.length; i++) {
            File f = tempList[i];
            if (f.isFile()) {
                String ss = getFormatInFile(f);
                String fileName=f.getName();
                String prefix=fileName.substring(fileName.lastIndexOf(".")+1);
                if (ss != null && !ss.equals("")&&!prefix.equals(ss)) {

                    System.out.println(f.getName()+":"+ss);

                }

            }
            else if(file.isDirectory())
            {
                path=f.getAbsolutePath();
                getNoEqualImageFiles(path);
            }

        }   
    }


    public static String getFormatInFile(File f) {
        return getFormatName(f);
    }
    /**
     * @fun 获取文件图片格式
     * @param o 文件
     * @return
     */
    private static String getFormatName(Object o) {
        try {
            // Create an image input stream on the image
            ImageInputStream iis = ImageIO.createImageInputStream(o);

            // Find all image readers that recognize the image format
            Iterator<ImageReader> iter = ImageIO.getImageReaders(iis);
            if (!iter.hasNext()) {
                // No readers found
                return null;
            }

            // Use the first reader
            ImageReader reader = iter.next();

            // Close stream
            iis.close();

            // Return the format name
            return reader.getFormatName();
        } catch (IOException e) {
            //
        }

        // The image could not be read
        return null;
    }
}

以上代码控制台输出格式有问题的图片,然后再去资源文件查找不再使用的删除,需要使用的修改一下就ok了。
经过一番修改,终于我又可以ReBuild啦,此时坐等success,然而我想多了。。。你以为一切都是没选好,得到的和想要的对不上号。。。

  • 第二个问题又出现了

‘:app:transformClassesWithDexForDebug’. >
com.android.build.transform.api.TransformException: when i added
Facebook latest SDK in my studio project

这特么什么鬼?
其实之前就见过这个错误了,无非是超了方法数了,可是在eclipse明明没有啊,也不知道为啥,结果还是老老实实的按照大神说的在defaultConfig里面加了一行

multiDexEnabled true

defaultConfig {
applicationId “com.xxxxx”
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName “1.0”
// Enabling multidex support.
multiDexEnabled true
}

ok,继续ReBuild ,success。
就这么简单就结束了?哈哈,并没有,虽然构建成功了,但是还没打包啊亲。。。

  • 然而第三个问题也不约而至
  • android studio 代码混淆打包错误 The same input jar is specified twice

检查了一下build.gradle和libs里的jar包均未发现重复引用。
然后开始问度娘,传送门:http://www.jianshu.com/p/b39af6175b79
其实主要原因就是我们在build.gradle文件中已经配置过jar文件了
这里写图片描述
把日志里报错的对应library配置注释掉或者删掉就好了。
至此,再次打包就不会有问题了。

感谢以上链接博主提供技术支持,如有侵权请联系我删除,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值