2016-10-06 127 views
0

当我运行在它的工作原理模拟器的应用程序,但是当我要生成一个签名的APK我收到以下错误信息:了产生签名APK错误

[Error:Execution failed for task ':app:transformClassesWithDexForRelease'. > com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536]

这是什么错误讯息,是有一种解决这个问题的方法?

Screenshot of error

+0

的Eclipse和Android Studio是完全不同的东西,你用哪一个使用proguard的规则follow the link for an example的最佳实践? –

+0

尝试的建议和更新,如果有任何问题 –

回答

1

DexIndexOverflowException:溢出意味着已达到极限。

dex文件大小已经达到它的极限也就是64K,所以你需要实现Multidex支持到项目follow the official link of docs

下面添加到的build.gradle使multidex支持

defaultConfig { 
    ... 
    // Enabling multidex support. 
    multiDexEnabled true 
} 

设置应用程序的名称multidex支持您的清单应用程序标记

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.android.multidex.myapplication"> 
    <application 
     ... 
     android:name="android.support.multidex.MultiDexApplication"> 
     ... 
    </application> 
</manifest> 

如果你有那么一个应用程序类实现DEX前super.onCreate

MultiDex.install(getTargetContext()); 
super.onCreate(arguments); 

有些技巧可能会派上用场:删除不需要的依赖关系,文件,并使用特定的谷歌游戏的依赖像大湄公河次区域等,而不是将它添加的作为一个整体,再加上你可以

+0

另外,我想补充,Progaurd是删除未使用的代码,并保持低于65K的方法限制 – Shmuel

+0

@Shmuel是啊,有用的,但最多可以删除日志代码或一些类似的事情的选项否则progaurd做的工作非常有效,虽然很多时候我们要progaurd告诉不缩水此(POJO等等),并且,:P:P所以它可能会或可能不会有效取决于该项目,但仍然会增加更多的效率 –

+0

Progaurd是真正有用的萎缩第三方库。我从一个项目中删除了超过20万行的代码。 – Shmuel