Android Studio 之 导入Eclipse项目常见问题及解决方案
2017-03-24 17:02
846 查看
在将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)文件中加入,如下配置:
问题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",如下:
问题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
解决方法:修改最低版本号,满足要求即可
问题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)如果您的
(2)但是,如果您的
[1] 修改模块级
[2] 根据是否要替换
如果您没有替换
如果您替换了
或者,如果您替换了
构建应用后,Android 构建工具会根据需要构建主 DEX 文件 (
运行时,Dalvik 可执行文件分包 API 使用特殊的类加载器来搜索适用于您的方法的所有 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
问题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.dex和
classes3.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项目常见问题及解决方案 在将Eclipse做的Android项目成功导入Android Studio 后,启动生成,遇到一些问题,现总结如下:
- 安卓Eclipse项目导入Android Studio完美解决方案
- Android studio导入eclipse项目遇到的错误解决方案
- 一个笨鸟在使用Eclipse导入Maven项目遇到的问题及解决方案
- Android Studio更新后 Eclipse项目导入问题
- Android Studio的导入Eclipse项目
- eclipse项目导入Android Studio中加入.so 文件
- 以非gradle方式将 Eclipse 项目导入Android Studio
- 看到一篇关于eclipse导入项目,java文件中文乱码的解决方案,先mark下
- Eclipse项目导入到android studio
- Android Studio 导入Eclipse的android项目出现:gradle: 警告:编码 euc_cn 的不可映射字符
- Eclipse 导入其他项目library时出现红叉解决方案
- Android studio导入eclipse项目且不改变目录结构
- Eclipse导入项目,java文件中文乱码的解决方案
- Android Studio导入GitHub上的项目常见问题(以图片轮播开源项目为实例)
- 【原】Eclipse中Java项目导入时出现的错误解决方案
- 看到一篇关于eclipse导入项目,java文件中文乱码的解决方案,先mark下
- eclipse项目(java project)如何导入jar包的解决方案列表?
- Android Studio绝对实用的新手教程(1)导入第三方包或者运行eclipse项目
- Eclipse项目导入到android studio