在将Eclipse做的Android项目成功导入AndroidStudio后,启动生成,遇到一些问题,现总结如下:
问题1:图片命名问题
AS对图片命名要求比eclipse严格,图片名称只能有"小写字母、数字及下划线组成".
报错信息如下:
F:\kydd\yzone\yzone\src\main\res\drawable-hdpi\common_listview_headview_red_arrow.png.pngError:Error:'.'isnotavalidfile-basedresourcenamecharacter:File-basedresourcenamesmustcontainonlylowercasea-z,0-9,orunderscore
问题原因:图片名称中包含"小写字母、数字及下划线"以外的字符,所以报错
解决方法:重命名图片,"小写字母、数字及下划线"以外的字符。
重命名快捷键“Shift+F6”,或“右键→Refactor→Rename...”
问题2:.9图错误
AndroidStudio中,.9图必须是规范的.9图,否则就会报错;
[1]如果一张图不是.9图,则图片名称中不要包含.9;
[2].9图必须对四个边都进行了描点,AS才能进行识别;
报错信息:
Error:java.lang.RuntimeException:CrunchingCruncherchat_to_bg_normal.9.pngfailed,seelogs
或者:
Error:java.util.concurrent.ExecutionException:com.android.ide.common.process.ProcessException:Error:Executionfailedfortask':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:启动后显示安装失败信息,如下:
InstallationfailedwithmessageINSTALL_FAILED_NO_MATCHING_ABIS.
Itispossiblethatthisissueisresolvedbyuninstallinganexistingversionoftheapkifitispresent,andthenre-installing.
WARNING:Uninstallingwillremovetheapplicationdata!
Doyouwanttouninstalltheexistingapplication
这个问题出现在模拟器上的概率更大,原因是某些应用使用了原生库(NDK,NativeLib),这些库的编译目标通常是arm架构的cpu,在x86上运行就会报这样的错误。
网上解决办法有如下两个:
1、换一个arm架构的模拟器;
2、在build.gradle(Moudule:app)文件中加入,如下配置:
android{......splits{abi{enabletruereset()include'x86','armeabi-v7a','x86_64'universalApktrue}}}问题4:warning:IgnoringInnerClassesattributeforananonymousinnerclass
在将Eclipse做的Android项目成功导入AndroidStudio后,启动生成,报出错如下图,但是项目可以正常启动运行:
原因:引入第三方组件jar包后出现该问题,不引入时正常,具体原因不详。
方案一:
在app目录下proguard-rules.pro文件中,加入下面的混淆配置代码(自己测试没有成功):-keepattributesEnclosingMethod
方案二:参考“问题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:Executionfailedfortask':yzone:processDebugManifest'.>Manifestmergerfailedwithmultipleerrors,seelogs
详细log:
F:\kydd\yzone\yzone\src\main\AndroidManifest.xml:93:5-69Warning:Elementuses-permission#android.permission.FLASHLIGHTatAndroidManifest.xml:93:5-69duplicatedwithelementdeclaredatAndroidManifest.xml:91:5-69F:\kydd\yzone\yzone\src\main\AndroidManifest.xml:773:9-777:55Error:Elementactivity#io.rong.imkit.widget.provider.TakingPicturesActivityatAndroidManifest.xml:773:9-777:55duplicatedwithelementdeclaredatAndroidManifest.xml:674:9-677:52F:\kydd\yzone\yzone\src\main\AndroidManifest.xmlError:
Validationfailed,exiting
在manifest.xml文件中,去掉重复的即可,AS的检查比eclipse严格
Error:Executionfailedfortask':yzone:processDebugManifest'.>Manifestmergerfailed:Attributemeta-data#RONG_CLOUD_APP_KEY@valuevalue=(xxxxxxxx)fromAndroidManifest.xml:560:13-42isalsopresentat[yzone:iMKit:unspecified]AndroidManifest.xml:163:13-42value=(yyyyyyyyyyy).Suggestion:add'tools:replace="android:value"'to
[1]在其中一个module中删除,保留正确的那个;
[2]或在主module中的meta-data中,加上'tools:replace="android:value",如下:
项目中使用了个视频播放的第三方库,最低版本号支持14,而我们的build.gradle文件中,最低版本号设置了13,则报错。
Error:Executionfailedfortask':yzone:processDebugManifest'.>Manifestmergerfailed:uses-sdk:minSdkVersion13cannotbesmallerthanversion14declaredinlibrary[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.xmlSuggestion:usetools:overrideLibrary="com.volokh.danylo.video_player_manager"toforceusage
解决方法:修改最低版本号,满足要求即可
defaultConfig{......minSdkVersion14targetSdkVersion23......}问题8:compileSdkVersion设置过低
F:\kydd\yzone\yzone\build\intermediates\res\merged\debug\values-v23\values-v23.xmlError:(3)Errorretrievingparentforitem:Noresourcefoundthatmatchesthegivenname'android:TextAppearance.Material.Widget.Button.Inverse'.Error:(18)Errorretrievingparentforitem:Noresourcefoundthatmatchesthegivenname'android:Widget.Material.Button.Colored'.Error:(3)Errorretrievingparentforitem:Noresourcefoundthatmatchesthegivenname'android:TextAppearance.Material.Widget.Button.Inverse'.Error:(18)Errorretrievingparentforitem:Noresourcefoundthatmatchesthegivenname'android:Widget.Material.Button.Colored'.Error:Executionfailedfortask':yzone:processDebugResources'.>com.android.ide.common.process.ProcessException:Failedtoexecuteaapt
compileSdkVersion设置为24
android{......compileSdkVersion24......}
在build.gradle中添加如下配置
问题10:项目函数数超过65535(即64K限制)
Error:Errorconvertingbytecodetodex:
Cause:com.android.dex.DexIndexOverflowException:Cannotmergenewindex65569intoanon-jumboinstruction!
Error:Executionfailedfortask':yzone:transformClassesWithDexForDebug'.
>com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException:java.util.concurrent.ExecutionException:java.lang.UnsupportedOperationException
在build.gradle增加配置,如下:
(1)如果您的minSdkVersion设置为21或更高值,您只需在模块级build.gradle文件中将multiDexEnabled设置为true,如下所示:
[1]修改模块级build.gradle文件以启用Dalvik可执行文件分包,并将Dalvik可执行文件分包库添加为依赖项,如下所示:
如果您没有替换Application类,请编辑清单文件,按如下方式设置
publicclassMyApplicationextendsSomeOtherApplication{@OverrideprotectedvoidattachBaseContext(Contextbase){super.attachBaseContext(context);Multidex.install(this);}}构建应用后,Android构建工具会根据需要构建主DEX文件(classes.dex)和辅助DEX文件(classes2.dex和classes3.dex等)。然后,构建系统会将所有DEX文件打包到您的APK中。
运行时,Dalvik可执行文件分包API使用特殊的类加载器来搜索适用于您的方法的所有DEX文件(而不是仅在主classes.dex文件中搜索)。
查看每个包的函数数,从而着手优化,哪些是废弃代码可以删掉,解决超过65535限制的问题,但如果代码无法再优化了,就只能采用上面的multiDex打包了。
问题11:Error:(1,1)错误:非法字符:'\ufeff'
问题原因:源代码是GBK格式,AndroidStudioEncoding方式是UTF-8。
问题12:文件为UTF-8编码格式,中文字符显示乱码
问题描述:此问题出现在导入后为UTF-8编码,包含中文字符且中文字符显示为乱码的文件。