2016-10-06 153 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