一直以来。公司开发都是用eclipse。可是随着我们应用不断成长。项目结构越来越庞大。项目间依赖关系变得非常复杂。用eclipse管理显得非常吃力,常常一个同事更改依赖项目之后,别人在更新。都会出现故障。由于这些事情浪费非常多时间。

终于决定迁移到Android Studio。

可是迁移的过程中还是遇到了非常多问题,通过这篇博客,把迁移过程中遇到的问题。以及每一个问题的解决方式,记录一下。也希望能帮助到有相同需求的同学。

这里就不具体介绍从eclipse导入到Android Studio的过程了。

1.乱码

用eclipse开发时编码用的是GBK,而android studio中使用的是UTF-8,所以在build的时候,项目中的温度符号,以及一些中文凝视就会出现乱码。

解决方式

统一编码,我们把编码都改成UTF-8. Android studio通过例如以下方式改项目和文件的编码:

File -> Other Settings -> Default Settings -> 搜索File Encodings ->改三个地方的编码(IDE Encoding,Project Encoding,Default encoding for properties files)

2. 反复图片

我们有一个Library是从主项目中抽取出来的。抽取的过程中非常多图片从主项目中copy出来之后。忘记删除了。导入到Android studio之后,build的过程就会出错。只是错误信息中有提示反复的文件。我们仅仅须要依据提示把不用的图片删掉。

3. Unable to execute dex: method ID not in [0, 0xffff]: 65536

对于这个问题,google官方给出了解释。http://developer.android.com/tools/building/multidex.html,大概意思就是:当你的应用以及应用依赖的library达到一定的Size之后,在build的时候就会提示这个错误。说明你的应用已经达到了Android app构建架构的大小限制。android虚拟机限制了每个DEX文件可以引用的method的个数为65536。 它包含Android Framework。Library。以及自己项目中的methods总和。

解决方式
给我们的应用生成多个DEX文件。须要在build.gradle,文件里配置:
android {
defaultConfig {
...
multiDexEnabled = true
}
}

另外,还要使用MultiDexApplication类,假设你的应用中已经有Application类,须要让它继承自MultiDexApplication。再实现attachBaseContext方法,代码例如以下:

protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}

4. OutOfMemoryError: GC overhead limit exceeded

在build.gradle文件里做例如以下配置:
android {
...
dexOptions {
incremental true
javaMaxHeapSize "4g"
}
}

5. java.util.zip.ZipException: duplicate entry during packageAllDebugClassesForMultiDex

报错信息例如以下:
Error:Execution failed for task ':ezweather_original:packageAllDebugClassesForMultiDex'.
> java.util.zip.ZipException: duplicate entry: android/support/annotation/ColorRes.class

解决方式。在build.gradle中加入例如以下配置:

configurations { all*.exclude group: 'com.android.support', module: 'support-v4' }

这时候app最终能执行起来了...

最新文章

  1. 【Win 10 应用开发】在App所在的进程中执行后台任务
  2. js之事件冒泡和事件捕获详细介绍
  3. jquery EasyUI datagrid 的扩展
  4. DirectShowLib directshownet 视频
  5. LightOJ1030 Discovering Gold(概率DP)
  6. login shell 和 non-login shell 的区别
  7. react native listview 一个有用的属性,用作两列布局
  8. visio
  9. [经典] Best Time to Buy and Sell Stock
  10. c++如何使用SOCKET 发送HTTP1.1 GET POST请求包
  11. LInux系统及其文件系统
  12. C# System.Guid.NewGuid() 【转】
  13. win7下JAVA环境变量配置方法
  14. echarts中的option.legend.data has not been defined.
  15. PopupWindow下拉列表
  16. CentOS6.5安装Maven3.2.5
  17. 在TQ2440上运行perf,生成Flame Graph
  18. [LeetCode] Read N Characters Given Read4 I & II
  19. mybatis 之parameterType="Long"
  20. Ionic入门四:卡片

热门文章

  1. WNDCLASS和WNDCLASSEX
  2. CAD交互绘制带颜色宽度的直线(com接口)
  3. 2019年,Linux运维行业的趋势,跟不上学习就被淘汰
  4. 对散列进行sort排序,只是会产生一个顺序,但这顺序和初始化时的顺序不一致
  5. 【VScode】使用VScode 来写markdown时序图
  6. Java中的JVM的内存结构
  7. Java的类加载
  8. 基于Redis的三种分布式爬虫策略
  9. 零基础入门学习Python(13)--元组:戴上了枷锁的列表
  10. CentOS虚拟机挂载Windows共享目录