摘要:最先尝试的方法是从eclipse导出项目时选择Generate Gradle build files,然后在Android Studio导入,需要更新gradle的版本,保留了原始的目录结构,后来在更新gradle时遇到了很多问题,也记不清了,后来使用的是直接将项目导入到Android Studio,由Android Studio来重新构造目录结构.1
导入
Import
- 选择工程在的路径,然后finish,等待Android Studio构造项目
简单介绍一下import summary
在导入工程后,会在第一时间出现import summary
Ignored Files(最重要的部分)
Android Studio会在这一步忽略掉不属于Android标准目录的文件,比如用户自定义文件夹,混淆文件,所以必须要检查一下是否有重要文件在这一步被Android Studio忽略掉
Replaced Jars with Dependencies
在Android Studio中你可以添加在线的jar或者库,所以常见的android-support-v4.jar兼容包都会转化com.android.support:support-v4:19.1.0,当然由于兼容包多样化,在这一步转换可能会遇到一些问题,以后会提到
Moved Files
- 将so文件移动到app/src/main/jniLibs目录下,Android Studio默认会识别这个目录
- 将lib目录下的jar移动到app/libs/下
- 将项目中引用的其他资源例如html都移动到app/src/main/resources/
Next Steps和Bugs略过
常见问题
9-patch
在Android Studio对9-patch的检查非常严格,不允许存在bad patches,也不允许不是9-patch的图片命名为9.png
错误日志
9-patch image /Users/liuende/Documents/test/app/src/main/res/drawable-mdpi/btn_style_zero_presse.9.png malformed.
AAPT: Frame pixels must be either solid or transparent (not intermediate alphas).
AAPT: Found at pixel #6 along top edge.
解决方案
- 关闭Android Studio对png图片合法性的检查,在app/build.gradle中的android后的大括号中添加下述代码,然后sync now,rebuild
aaptOptions{
cruncherEnabled=false
useNewCruncher=false
}
- 如果仍然存在报错,对报错的图片重命名,例如test.9.png重命名为test.png
文件含有BOM
错误日志
Error:(1, 1) 错误: 非法字符: '\ufeff'
错误原因
类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符,即BOM,但是在很多代码中不会忽略,导致错误
简单介绍一下BOM
注:Java在读取Unicode文件的时候,会统一把BOM变成“\uFEFF”.2
BOM —— Byte Order Mark,中文名译作“字节顺序标记”。
UTF-8 不需要 BOM 来表明字节顺序,但可以用 BOM 来表明编码方式,其中字符 “Zero Width No-Break Space” 的 UTF-8 编码是 EF BB BF。所以如果接收者收到以 EF BB BF 开头的字节流,就知道这是 UTF-8编码了。
对于UTF-16或者更高,字符U+FEFF如果出现在字节流的开头,则用来标识该字节流的字节序,是高位在前还是低位在前。
解决方案
* Eclipse可以自动把UTF-8+BOM文件转为普通的UTF-8文件,但AndroidStudio需要手动修改*
方法一
利用Android Studio将文件编码改为GBK,再转为UTF-8即可以解决,操作位置在Android Studio右下角
- 选择编码
- 点击convert
- 再重复执行1和2,转化为UTF-8
方法二
利用Android Studio自带的终端打开问题文件,然后使用vim打开文件,在命令模式下set nobomb
文件编码不正确
错误日志
Error:(6, 4) 错误: 编码UTF-8的不可映射字符
错误原因
文件原先是使用GBK或者其他非UTF-8的编码格式,在导入Android Studio时以UTF-8编码格式加载所以产生乱码
解决方案
先将文件以GBK的格式加载,再转化为utf-8
选择文件原先的编码
点击Reload
在通过第一步选择utf-8,点击convert,转化文件编码格式为utf-8
包引用出现问题
jre中的rt.jar没有被引用到项目中国
错误日志
Error:(44, 28) 错误: 程序包javax.imageio.stream不存在
错误说明
目录jre下的jar包并不会默认引用到项目中
解决方法
注:compile 意味着你需要编译和运行应用程序的JAR。对于一个web应用程序,例如,JAR将被放置在web - inf / lib目录中。provided意味着你需要为编译JAR提供,但在运行时环境已经提供,对于一个web应用程序,这意味着JAR文件将不会被放置到web - inf / lib目录中
- 在app/gradle.build下dependencies中添加下述配置
provided files('/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/rt.jar')
打包apk时报错
错误日志
注:Android Lint是SDK Tools 16 (ADT 16)之后才引入的工具,通过它对Android工程源代码进行扫描和检查,可发现潜在的问题,以便程序员及早修正这个问题
Execution failed for task ':app:lintVitalRelease'.
> Lint found fatal errors while assembling a release target.
错误说明
Android Studio在打包成release版时,默认会对代码进行扫描和检查,发现潜在的代码,而由于eclipse和Android Studio的代码检查不同,导致很多在eclipse警告的代码,在打包时直接报错
解决方案
- 在app/gradle.build中添加下述配置
android {
lintOptions {
checkReleaseBuilds false
// Or, if you prefer, you can continue to check for errors in release builds,
// but continue the build even when errors are found:
abortOnError false
}
}
build时内存不够
永久解决办法
- 新建文件~/.gradle/gradle.properties
org.gradle.jvmargs=-Xmx1536M
org.gradle.daemon=true
org.gradle.parallel=true