摘要:最先嚐試的方法是從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