从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


猜你喜欢

转载自blog.csdn.net/daxiong25/article/details/69808076