无法将Android应用上传到设备(陈旧的dexed jar)
我正在使用Android Studio开发这个应用程序,今天当我试图上传到我的设备来testing我有一个popup窗口说:
安装失败,因为设备可能具有与当前版本(dexopt错误)不匹配的陈旧分隔jar。 为了继续,你必须卸载现有的应用程序。
警告:卸载将删除应用程序数据!
你想卸载现有的应用程序?
它提供了两个选项,确定或取消。 点击确定后,在运行选项卡中显示以下消息:
DEVICE SHELL COMMAND: pm uninstall my.bundle.id
Unknown failure
该应用程序似乎被卸载,在pipe理应用程序下没有任何痕迹。
我无法上传应用程序。 我试图清理项目和重build,但没有奏效。
我能做什么?
我禁用了即时运行这个项目,并解决了问题。
也许这是Android studio 2.0预览即时运行function中的一个错误。
即时运行是Android Studio 2.0中引入的一项新function。
ps:如果你没有find即时运行,它在:
Android Studio --> Preferences --> Build, execution, deploy --> Instant run.
或者您可以在首选项标签中search它。
转到AVDpipe理器,然后在设备的操作部分select擦除数据。 这工作对我来说,希望它可以帮助….
我发现dex文件比缓冲区大,即使它包含less于64k的方法。 然后,我启用了ProGuard,并帮助大大减less了dex文件的大小。
应用程序dex-method-counts通过检查方法的数量,而不是检查它们属于哪个软件包,可以帮助您debuggingdex文件
我发现我的问题是由旧的SDK构build工具版本,导致干净失败。 我升级了我的SDK构build工具到最新的版本,在清理工作之后,我不再收到陈旧的dexed jars错误。 希望这会帮助别人为这个问题而努力。
这对我工作:
在Android Studio中,可以通过单击Build> Clean Project来完成。 SysadminTips
在Android Studio中,我也遇到了这个问题,从2.0版本的Preview 6一直到2.0 Beta 3,这里提到的解决scheme都没有为我工作。
变成与Instant Run毫无关系。 我所要做的只是增加AVD的内部存储空间,直到下面的通知消失。 我也必须在更改值后执行数据擦除。
在我的项目中,我通过更具体地了解我连接的Google Play服务的哪些部分,从而克服了这个问题。 特别是,我改变了
dependencies { ... compile 'com.google.android.gms:play-services:8.4.0' }
至
dependencies { ... compile 'com.google.android.gms:play-services-maps:8.4.0' }
在我的应用程序模块的build.gradle,因为我真正使用的是地图API。
我所做的是修改build.gradle(模块:应用程序)文件。
最初是这样
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
我改变了
buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
然后重build和部署!
当您的dex文件变大,然后缓冲区大小(即包含超过65k的方法),则会发生此错误。 您可以通过两种方式避免此错误:1.)使用ProGuard删除未使用的代码 – 为您的应用程序configurationProGuard设置以运行ProGuard,并确保您已启用缩小版本版本。 启用收缩function可确保您不会将未使用的代码与APK一起发送。
2.)你可以configuration你的应用程序的multidex支持。 参考这个链接来使用它: https : //developer.android.com/tools/building/multidex.html
为了支持multidex,我在应用程序类中重写了这个方法:
@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); }
并像这样修改我的build.gradle:
android { compileSdkVersion 21 buildToolsVersion "21.1.1" defaultConfig { minSdkVersion 14 //lower than 14 doesn't support multidex targetSdkVersion 21 // Enabling multidex support. multiDexEnabled true } } dependencies { compile 'com.android.support:multidex:1.0.0' }
希望能帮助到你!
EDITS:从代码中拿出文字说明。
在我的情况是因为我的模拟器充满了应用程序。 我看到了模拟器有多less空间,几乎没有,所以我删除了一些应用程序,并与此解决了我的问题
如果您使用的是Android Studio 2.0预览版,请禁用即时运行。
所有的信贷和感谢去救生员https://stackoverflow.com/a/34192979/1413998
没有答案没有解决我的问题
你也应该做progaurd
debugging。 只需将buildtypes
添加到主要的gradle文件即可:
buildTypes { debug { // change release to debug minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } }
在我的情况下,这是由一个名为“dictionary.txt”的文件引起的。 我刚刚删除它,并解决了这个问题。