背景:
到公司剛接手的項目是12年開發的,還是使用的 Eclipse,對於用慣AS 的安卓猿無法忍受,在趕完需求進度,完成驗收後開啓了我的開發環境遷移之旅,下面是遷移的流程步驟和遇到的一些問題的解決方法(經實際驗證),文末有當時參考的一些的資料。
從Eclipse導入工程到Android Studio
- 首先升級ADT到最新版本,目前爲版本號爲22(注意和ADT相關的組件最好一併升級,避免後期可能出現的錯誤)
- 選擇需要從Eclipse導出的工程,右鍵選擇Export並選擇Android下的Generate Gradle Build Files(如下圖):
選擇完畢後並不會導出到其他地方,而是在本地工程生成了一個build.gradle文件,在Eclipse工程中也可以看到,這個文件是Android Studio識別的,如下圖:
3.隨後進入Android Studio並選擇Import Project,可以看到剛剛在Eclipse中的項目圖標變成了一個Android機器人圖標,說明轉換成功,這時候選擇工程導入即可:
問題1:圖片命名問題
AS對圖片命名要求比eclipse嚴格,圖片名稱只能有"小寫字母、數字及下劃線組成".
報錯信息如下:
F:\kydd\yzone\yzone\src\main\res\drawable-hdpi\common_listview_headview_red_arrow.png.png
Error:Error: '.' is not a valid file-based resource name character: File-based resource names must contain only lowercase a-z, 0-9, or underscore
問題原因: 圖片名稱中包含"小寫字母、數字及下劃線"以外的字符,所以報錯
解決方法:重命名圖片,"小寫字母、數字及下劃線"以外的字符。
重命名快捷鍵“ Shift + F6 ”,或“ 右鍵→Refactor→Rename... ”
問題2: .9圖錯誤
AndroidStudio 中,.9圖必須是規範的.9圖,否則就會報錯;
[1] 如果一張圖不是.9圖,則圖片名稱中不要包含.9;
[2] .9圖必須對四個邊都進行了描點,AS才能進行識別;
報錯信息:
Error:java.lang.RuntimeException: CrunchingCruncher chat_to_bg_normal.9.png failed, see logs
或者:
Error:java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException:
Error:Execution failed for task ':yzone:mergeDebugResources'.
> Error: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException:
解決方法:
[2] 如果不是.9圖,則把名稱中的.9去掉,如果是.9圖,那麼重新制作一下;
[3] 也可以把圖片合法性檢查關閉,在build.gradle增加如下(這個好像不起效)
android {
...
aaptOptions.cruncherEnabled = false
aaptOptions.useNewCruncher = false
...
}
問題3:啓動後顯示安裝失敗信息,如下:
Installation failed with message INSTALL_FAILED_NO_MATCHING_ABIS.
It is possible that this issue is resolved by uninstalling an existing version of the apk if it is present, and then re-installing.
WARNING: Uninstalling will remove the application data!
Do you want to uninstall the existing application?
這個問題出現在模擬器上的概率更大,原因是某些應用使用了原生庫(NDK,Native Lib),這些庫的編譯目標通常是arm架構的cpu,在x86上運行就會報這樣的錯誤。
網上解決辦法有如下兩個:
1、換一個arm架構的模擬器;
2、在 build.gradle(Moudule:app)文件中加入,如下配置:
android{
......
splits {
abi {
enable true
reset()
include 'x86', 'armeabi-v7a','x86_64'
universalApk true
}
}
}
問題7:最低版本號設置過低,報錯
項目中使用了個視頻播放的第三方庫,最低版本號支持14,而我們的build.gradle文件中,最低版本號設置了13,則報錯。
報錯信息:
Error:Execution failed for task ':yzone:processDebugManifest'.
> Manifest merger failed : uses-sdk:minSdkVersion 13 cannot be smaller than version 14 declared in library [com.github.danylovolokh:video-player-manager:0.2.0] F:\kydd\yzone\yzone\build\intermediates\exploded-aar\com.github.danylovolokh\video-player-manager\0.2.0\AndroidManifest.xml
Suggestion: use tools:overrideLibrary="com.volokh.danylo.video_player_manager" to force usage
解決方法:修改最低版本號,滿足要求即可
defaultConfig {
......
minSdkVersion 14
targetSdkVersion 23
......
}
問題8: compileSdkVersion 設置過低報錯信息:
F:\kydd\yzone\yzone\build\intermediates\res\merged\debug\values-v23\values-v23.xml
Error:(3) Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Inverse'.
Error:(18) Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Material.Button.Colored'.
Error:(3) Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Inverse'.
Error:(18) Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Material.Button.Colored'.
Error:Execution failed for task ':yzone:processDebugResources'.
> com.android.ide.common.process.ProcessException: Failed to execute aapt
compileSdkVersion 設置爲24
android {
......
compileSdkVersion 24
......
}
2.項目中包含jar包
在app文件夾下新建libs文件夾,將jar包放入libs文件夾中,並在項目的build.gradle 文件中的dependencies下添加如下語句 :
compile fileTree(dir:'libs',include: ['*.jar'])
3.項目中包含so文件
在libs文件中放入so文件,並在項目的build.gradle 文件中的dependencies下添加如下語句
sourceSets {
main {
jniLibs.srcDirs= ['libs']
}
}
2.修改build.gradle文件(推薦)
這種方式對於遷移到studio的項目很適用(比如eclipse項目)
打開項目的”build.gradle”文件,並加入如下行,將so文件路徑(jniLibs)指向"libs"路徑,這樣就可以把so文件打包到APK的lib文件夾中
eclipse安卓項目轉成android studio的項目不能添加遠程依賴包的問題
最近解決了一個被一個AS的glide文件sync困擾好久的問題,即在引入遠程依賴包的時候,會出現一個sync錯誤,提示找不到這個類庫。然而,並不是所有的工程都會出現這個問題,有的工程引入同樣的類庫卻沒有問題。
網上查了下說是設置了offline work,需要將gradle設置裏的offline work去掉,然而我的AS中並沒有勾選這個選項。
apply plugin: 'android'
buildscript {
repositories {
jcenter {
url "http://jcenter.bintray.com/"
}
}
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
}
}
正確工程的build.gradle文件配置:
apply plugin: 'android'
buildscript {
repositories {
jcenter {
url "http://jcenter.bintray.com/"
}
}
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
}
}
allprojects {
repositories {
jcenter()
}
}
buildscript中的聲明是gradle腳本自身需要使用的資源。可以聲明的資源包括依賴項、第三方插件、maven倉庫地址等。而在build.gradle文件中直接聲明的依賴項、倉庫地址等信息是項目自身需要的資源。
“allprojects”這個配置項在Android Studio默認生成的工程中的build.gradle文件中是存在的,我這個工程之所以沒有,是由於我的工程是從Eclipse工程轉換來的。
參考資料:
http://blog.csdn.net/zqr772791008/article/details/53395634
http://blog.csdn.net/vpractical/article/details/52053985
http://www.jianshu.com/p/a0fd23afe39f
http://www.cnblogs.com/vanezkw/p/4182917.html
http://www.cnblogs.com/zhchoutai/p/6928591.html