由于最近将Android Studio-2.2升级至2.3了,一直用测试机编译应用,未发现任何异常,可是今天突然发现一个小意外,也是真令人头疼。

今天直接用我自己的手机Run,Studio一直提示安装失败,提示错误:

Installation failed with message Failed to establish session.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?原文翻译:安装失败,消息未能建立会话。这是可能的,这个问题解决通过卸载APK现有的版本,如果真的存在,然后重新安装。警告:卸载会删除应用程序数据!是否要卸载现有应用程序?
点击确定后会卸载与此应用同包名应用,然后就没有然后了,这时我也很费解,不过想想我的手机是小米5,Android版本7.0,由于MIUI ROM定制原因,我第一时间想到的是MIUI的Bug或者Android7.0的Bug,所以也就没想那么多,直接将apk发送到手机,再次安装,安装成功,正有点小激动呢,结果应用一点开一个更让人费解的事情诞生了:
03-20 12:56:37.933 18274-18274/com.app.chao.chaoapp E/AndroidRuntime: FATAL EXCEPTION: main                                                                      Process: com.app.chao.chaoapp, PID: 18274                                                                      java.lang.RuntimeException: Unable to instantiate application com.app.chao.chaoapp.App: java.lang.ClassNotFoundException: Didn't find class "com.app.chao.chaoapp.App" on path: DexPathList[[zip file "/data/app/com.app.chao.chaoapp-1/base.apk"],nativeLibraryDirectories=[/data/app/com.app.chao.chaoapp-1/lib/arm64, /data/app/com.app.chao.chaoapp-1/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]                                                                          at android.app.LoadedApk.makeApplication(LoadedApk.java:806)                                                                          at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5393)                                                                          at android.app.ActivityThread.-wrap2(ActivityThread.java)                                                                          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1564)                                                                          at android.os.Handler.dispatchMessage(Handler.java:102)                                                                          at android.os.Looper.loop(Looper.java:160)                                                                          at android.app.ActivityThread.main(ActivityThread.java:6143)                                                                          at java.lang.reflect.Method.invoke(Native Method)                                                                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:874)                                                                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:764)                                                                       Caused by: java.lang.ClassNotFoundException: Didn't find class "com.app.chao.chaoapp.App" on path: DexPathList[[zip file "/data/app/com.app.chao.chaoapp-1/base.apk"],nativeLibraryDirectories=[/data/app/com.app.chao.chaoapp-1/lib/arm64, /data/app/com.app.chao.chaoapp-1/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]                                                                          at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)                                                                          at java.lang.ClassLoader.loadClass(ClassLoader.java:380)                                                                          at java.lang.ClassLoader.loadClass(ClassLoader.java:312)                                                                          at android.app.Instrumentation.newApplication(Instrumentation.java:993)                                                                          at android.app.LoadedApk.makeApplication(LoadedApk.java:800)                                                                          at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5393)                                                                           at android.app.ActivityThread.-wrap2(ActivityThread.java)                                                                           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1564)                                                                           at android.os.Handler.dispatchMessage(Handler.java:102)                                                                           at android.os.Looper.loop(Looper.java:160)                                                                           at android.app.ActivityThread.main(ActivityThread.java:6143)                                                                           at java.lang.reflect.Method.invoke(Native Method)                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:874)                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:764) 
这个异常很明显是说,系统试图从nativeLibraryDirectories中加载指定的so文件,但没找到。我原先的想法,如果arm64-v8a中找不到,系统应该到armeabi中去找,毕竟armeabi是个缺省的so目录。但实际结果貌似不会去armeabi中查到。

于是开始各种百度ClassNotFoundException,得到的答案大多是,需要的jar没有引入,或者v4包冲突,这时我也很无奈,只得百度nativeLibraryDirectories=[/data/app/lib/arm64,这时看到很多国外论坛,其中一个国外大大谈到:

建议直接打开(解压缩的形式)生成的apk文件,查看是否有”不合理”的目录存在。在我的情况中的确看到了arm64-v8a目录。目录中有一个其他第三方的so文件,最后问题由于依赖项目有个arm64-v8a目录,所以如果要移除某个类目,一定要删干净。

但是奇怪的是,删除arm64-v8a目录之后,运行也出错。按照简单理解,arm64-v8a目录已经没有了,应该不会在从arm64目录中找so才是。除非,系统根据手机abi指定目录加载,然而实际不是。

于是copy备份项目后,删除so相关的代码和引用,运行依然报错,至此国外大大也帮不了我。

这时我已经在崩溃边缘了,后来总觉得哪里不对,吃了个午饭回来后,直接手动新建一个新的项目,直接运行hello world项目依然报错,这时我基本已经锁定原因了,因为既然这样都不能运行,那么问题很大几率出现在开发工具上,所以直接对比当前版本和旧版本的Android Studio,发现一个神奇的功能,于是就这样问题迎刃而解了,所以,有的坑总是要去填的,如果我们都不抱着想要解决的决心和耐心,那么这个坑也许就永远落脚下了。

更多相关文章

  1. android工程gen目录中R.java包名是怎么确定
  2. win7 cmd终端连接android手机运行adb shell脚本命令
  3. Android应用获取外部盘符时,默认创建Android/data/包名/files目
  4. android 目录下三种尺寸的 drawable 文件夹
  5. Android安装常见错误解决办法
  6. Android(安卓)使用 MuMu模拟器 进行程序调试
  7. Android手机开发ubuntu系统中常用的搜索命令
  8. AndroidStudio在Ubuntu13.10的64位系统报错问题
  9. basic4android 开发 推送功能

随机推荐

  1. 如何快速画出金属的质感?金属质感的画法
  2. 怎么画动漫人物?动漫插画绘画教程
  3. 字符串与数组的 api实例演示
  4. Android(安卓)学习笔记--android――Acti
  5. Android(安卓)Vibrator手机振动 API详解
  6. FFmpeg的Android平台移植—编译篇
  7. Android(安卓)- 绘画出圆并保存为图片(详)
  8. Android(安卓)Interface Definition Lang
  9. Android(安卓)常用RGB值以及中英文名称
  10. Android(安卓)com.android.internal.R 添