在将Eclipse做的Android项目成功导入Android Studio 后,启动生成,遇到一些问题,现总结如下:

问题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  
        }  
    }
}

问题4:warning: Ignoring InnerClasses attribute for an anonymous inner class

  在将Eclipse做的Android项目成功导入Android Studio 后,启动生成,报出错如下图,但是项目可以正常启动运行:      

  

  原因:引入第三方组件jar包后出现该问题,不引入时正常,具体原因不详。

  方案一:

  在 app 目录下 proguard-rules.pro 文件中,加入下面的混淆配置代码(自己测试没有成功):
  -keepattributes EnclosingMethod

  方案二:参考“问题10”解决方法(修改Gradle配置文件,启用MultiDex并包含MultiDex支持)。

  方案三:由于是在加入第三方包时,一编译就报错。最后发现是debug证书的问题。找到 debug.keystore 目录下看到

  

  可以看到debug.keystore的日期是 2017-2-24,而今天是2017-5-26日,如网上所说,debug证书过期了。

  因此删掉这个文件,重新编译运行,问题解决,而此时 该目录又重新生成了debug.keystore,日期是今天。

  如果想重现这个问题,也很简单,必须clear工程,否则它不会再到该目录下装载证书,而clear后,项目会重新装载证书,检测证书的有效期,问题重现。

问题5:权限、activity在 manifest.xml文件中重复申明

  报错信息:Error:Execution failed for task ':yzone:processDebugManifest'.
  > Manifest merger failed with multiple errors, see logs

  详细log:

  F:\kydd\yzone\yzone\src\main\AndroidManifest.xml:93:5-69 Warning:
  Element uses-permission#android.permission.FLASHLIGHT at AndroidManifest.xml:93:5-69 duplicated with element declared at AndroidManifest.xml:91:5-69
  F:\kydd\yzone\yzone\src\main\AndroidManifest.xml:773:9-777:55 Error:
  Element activity#io.rong.imkit.widget.provider.TakingPicturesActivity at AndroidManifest.xml:773:9-777:55 duplicated with element declared at AndroidManifest.xml:674:9-677:52
  F:\kydd\yzone\yzone\src\main\AndroidManifest.xml Error:

  Validation failed, exiting

  解决方法:

  在manifest.xml文件中,去掉重复的即可, AS的检查比eclipse严格

问题6:同一项目,有多个子module时,在两个或以上module中声明同一个meta-data,且值不同时,报错

  报错信息:

  Error:Execution failed for task ':yzone:processDebugManifest'.
  > Manifest merger failed : Attribute meta-data#RONG_CLOUD_APP_KEY@value value=(xxxxxxxx) from AndroidManifest.xml:560:13-42
is also present at [yzone:iMKit:unspecified] AndroidManifest.xml:163:13-42 value=(yyyyyyyyyyy).
  Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:558:9-560:45 to override.

  解决方法:

  [1] 在其中一个 module 中删除,保留正确的那个;

  [2] 或在主module中的meta-data中,加上 'tools:replace="android:value",如下:

<meta-data
  tools:replace="android:value"
  android:name="RONG_CLOUD_KEY"
  android:value="${RONG_CLOUD_KEY}" />

问题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
    ......
  }

问题9:android6.0及以上没有httpclient,报错

  报错信息:

  Error:(9, 30) 错误: 程序包org.apache.http.client不存在
  Error:(218, 14) 错误: 找不到符号
  符号: 类 ClientProtocolException
  Error:(219, 29) 错误: 无法访问HttpRequestBase
  找不到org.apache.http.client.methods.HttpRequestBase的类文件
  Error:(252, 29) 错误: 无法访问HttpEntityEnclosingRequest
  找不到org.apache.http.HttpEntityEnclosingRequest的类文件
  Error:Execution failed for task ':yzone:compileDebugJavaWithJavac'.
  > Compilation failed; see the compiler error output for details.

  解决方法:

  在build.gradle中添加如下配置

  android {
    ......
    //android6.0 没有httpclient了,如用android23编译,需要加上该行,android23以下的不需要加这行
    useLibrary 'org.apache.http.legacy'
    ......
  }

问题10: 项目函数数超过65535(即 64K 限制)

  报错信息:

  Error:Error converting bytecode to dex:

  Cause:com.android.dex.DexIndexOverflowException: Cannot merge new index 65569 into anon-jumbo instruction!

  Error:Execution failed for task':yzone:transformClassesWithDexForDebug'.

          >com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException:java.util.concurrent.ExecutionException:java.lang.UnsupportedOperationException

  解决方法:

  官方解决方案地址:配置方法数超过 64K 的应用

  在 build.gradle 增加配置,如下:

  (1)如果您的 minSdkVersion 设置为 21 或更高值,您只需在模块级 build.gradle 文件中将 multiDexEnabled 设置为 true,如下所示:

android {
    defaultConfig {
        ...
        minSdkVersion 21
        targetSdkVersion 25
        multiDexEnabled true
    }
    ...
}

  (2)但是,如果您的 minSdkVersion 设置为 20 或更低值,则您必须按如下方式使用 Dalvik 可执行文件分包支持库

  [1] 修改模块级 build.gradle 文件以启用 Dalvik 可执行文件分包,并将 Dalvik 可执行文件分包库添加为依赖项,如下所示:

android {
    defaultConfig {
        ...
        minSdkVersion 15
        targetSdkVersion 25
        multiDexEnabled true
    }
    ...
} dependencies {
  compile 'com.android.support:multidex:1.0.1'
}

  [2] 根据是否要替换 Application 类,执行以下操作之一:

  如果您没有替换 Application 类,请编辑清单文件,按如下方式设置 <application> 标记中的 android:name

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">
    <application
            android:name="android.support.multidex.MultiDexApplication" >
        ...
    </application>
</manifest>

  如果您替换了 Application 类,请按如下方式对其进行更改以扩展 MultiDexApplication(如果可能):

public class MyApplication extends MultiDexApplication { ... }

  或者,如果您替换了 Application 类,但无法更改基本类,则可以改为替换 attachBaseContext() 方法并调用 MultiDex.install(this) 来启用 Dalvik 可执行文件分包:

public class MyApplication extends SomeOtherApplication {
  @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(context);
     Multidex.install(this);
  }
}

  构建应用后,Android 构建工具会根据需要构建主 DEX 文件 (classes.dex) 和辅助 DEX 文件(classes2.dexclasses3.dex 等)。然后,构建系统会将所有 DEX 文件打包到您的 APK 中。

  运行时,Dalvik 可执行文件分包 API 使用特殊的类加载器来搜索适用于您的方法的所有 DEX 文件(而不是仅在主 classes.dex 文件中搜索)。

  查询包函数数的工具:https://github.com/mihaip/dex-method-counts

  查看每个包的函数数,从而着手优化,哪些是废弃代码可以删掉,解决超过65535限制的问题,但如果代码无法再优化了,就只能采用上面的 multiDex打包了。

问题11:Error:(1, 1) 错误: 非法字符: '\ufeff'

  

  首先,用Notepad++打开右下角看下是不是UTF-8,有无BOM,如果有BOM,那就说明是编码的问题。
  方案1:用Notepad++打开 art+m 或者 点击菜单栏的格式选项  选择 无BOM编码 
  方案2:在那个文件下把他修改成其他编码然后在修改回 UTF-8 ,然后重新编译
  方案3:如果还是存在,就ctrl+a   ctrl+x ctrl+s  ctrl+v  这样 让系统再次读下代码
  注:网上有以上三种方案,由于我使用的是 Android Studio ,所以我采用的方案二,问题得以解决。

  问题原因:源代码是 GBK 格式,Android Studio Encoding 方式是 UTF-8。

  解决方案:
    此问题出现在导入后为 UTF-8 编码,包含中文字符且中文字符显示正常的文件。
    Android Studio 下方修改编码格式:GBK Convert → UTF-8 Reload(Reload AnyWay) → GBK Reload → UTF-8 Convert

问题12:文件为 UTF-8 编码格式,中文字符显示乱码

  

  问题描述:此问题出现在导入后为 UTF-8 编码,包含中文字符且中文字符显示为乱码的文件。

  问题原因:源代码是 GBK 格式,Android Studio Encoding 方式是 UTF-8。

  解决方案:Android Studio 下方修改编码格式:GBK Reload → UTF-8 Convert
 
 

Android Studio 之 导入Eclipse项目常见问题及解决方案的更多相关文章

  1. 如何从Eclipse 迁移到Android Studio 且保持Eclipse项目结构

    本文demo下载:http://www.wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=531 Android项目 Eclipse与A ...

  2. Android Studio在导入eclipse的项目时一直卡在gradle:Configure project

    学Java的时候用的是eclipse,写android代码的时候用了疯狂android讲义推荐的AS.在用AS的时候出了很多问题,比如我想从别人那里拷贝eclipse写的工程的时候就遇到了Gradle ...

  3. Android studio导入eclipse项目且不改变目录结构

    Android studio的安装与配置论坛当中已经有很多在此就不在细说了,现在开始说下如何在Android studio当中导入eclipse的项目且不改变其目录结构和配置,让使用eclipse的同 ...

  4. Android Studio导入Eclipse项目和一些常见的问题

    Android Studio版本 Eclipse项目工程:一个主工程,一个Emojicon依赖库. 有两种方式导入Eclipse工程: 1.兼容Eclipse 2.全新的Android Gradle ...

  5. Android Studio导入Eclipse项目的两种方法

    Android Studio导入Eclipse项目有两种方法,一种是直接把Eclipse项目导入Android Studio,另一种是在Eclipse项目里面进行转换,然后再导入Android Stu ...

  6. Android Studio(AS)-->导入项目

    1:首先,你必须要有一个工程(Project), 才可以打开项目(Module); (注意:Eclipse中的Workspace对应Android Studio 中的Project, Eclipse中 ...

  7. Android studio:从Eclipse迁移到Android Studio【一】

    转载:http://www.apkbus.com/forum.php?mod=viewthread&tid=255061&extra=page%3D2%26filter%3Dautho ...

  8. Android Studio中导入第三方库

    之前开发Android都是使用的eclipse,近期因为和外国朋友Timothy一起开发一款应用,他是从WP平台刚切换使用Android的,使用的开发环境时Android Studio,为了便于项目的 ...

  9. 解决 RecyclerView 在Android Studio已经导入情况下还无法实例引用问题

    系统:Windows 10 IDE::android studio 1. 问题:RecyclerView 在Android Studio已经导入情况下还无法实例引用问题 由于RecyclerView是 ...

随机推荐

  1. C#编程(十三)----------方法重载

    C#支持方法的重载---方法的几个版本有不同的签名即可(即,方法名相同,但是参数个数和/或类型不同).为了冲在方法,只需要声明同名单参数个数或类型不同的方法即可. 注意:两个方法不能仅在返回类型上有区 ...

  2. eclipse 中 import sun.misc.BASE64Decoder; 报错

    from://http://blog.sina.com.cn/s/blog_48964b120101ahrf.html 在android做3DES加密功能时 eclipse 中 import sun. ...

  3. weblogic 12c集群性能测试(与guava13以上版本兼容性问题仍然存在)

    测试了5000并发:

  4. Android scrollbar的设置

    insideOverlay:默认值,表示在padding区域内并且覆盖在view上 insideInset:表示在padding区域内并且插入在view后面 outsideOverlay:表示在pad ...

  5. JAVA中对List<map<String,Object>>根据map某个key值进行排序

    方法compareTo()比较此对象与指定对象的顺序.如果该对象小于.等于或大于指定对象,则分别返回负整数.零或正整数.返回整数,1,-1,0:返回1表示大于,返回-1表示小于,返回0表示相等. 普通 ...

  6. [Hook] 免root,自己进程内,binder hook (ClipboardManager)

    cp from : http://weishu.me/2016/02/16/understand-plugin-framework-binder-hook/ Android系统通过Binder机制给应 ...

  7. JAVAWEB开发之HttpServletResponse和HttpServletRequest详解(上)(各种乱码、验证码、重定向和转发)

    HttpServletResponse简介 Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象 request和re ...

  8. Visual Studio提示“无法启动IIS Express Web服务器”的解决方法 vs调试显示无法显示此页面 ,vs调试浏览器白页

    有时,在使用Visual Studio运行ASP.NET项目时,会提示“无法启动IIS Express Web服务器”,无法运行,如图: 这一般出现在重装系统之后,或者项目是从别的电脑上复制过来的.解 ...

  9. android自己定义换行居中CenterTextView

    在我们开发app时,TextView一定是使用最多的控件了,android自带的TextView的功能也十分强大.但还是有些小的地方不能满足我们的需求.几天要说的这个功能也是开发中非经常见的.就是,在 ...

  10. 标识符(IDentifier)

    ylbtech-Miscellaneos:标识符(IDentifier) A,返回顶部 1, 标识符(IDentifier)是指用来标识某个实体的一个符号.在不同的应用环境下有不同的含义. 在日常生活 ...