從Eclipse導入工程到Android Studio 遇到的問題和解決方法

背景:

到公司剛接手的項目是12年開發的,還是使用的 Eclipse,對於用慣AS 的安卓猿無法忍受,在趕完需求進度,完成驗收後開啓了我的開發環境遷移之旅,下面是遷移的流程步驟和遇到的一些問題的解決方法(經實際驗證),文末有當時參考的一些的資料。


從Eclipse導入工程到Android Studio

  1. 首先升級ADT到最新版本,目前爲版本號爲22(注意和ADT相關的組件最好一併升級,避免後期可能出現的錯誤)
  2. 選擇需要從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中並沒有勾選這個選項。


仔細對比了下無法添加遠程依賴的項目和正常項目的 build.gradle文件配置,發現從Ecplice 轉過來的項目的配置文件 buildscript 閉包中少了allprojects 配置項,添加上後,同步通過 出錯工程的build.gradle文件配置:

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章