2016-08-25 27 views
0
Error:Execution failed for task ':app:transformClassesWithDexForDebug'. 
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 

我試圖與這裏提到 DexIndexOverflowException issue after updating to latest appcompat and support library方法ID未在[0,爲0xFFFF]建立錯誤

的解決方案,但我得到這個誤差

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity 

我也嘗試的解決方案,這從這裏 You need to use a Theme.AppCompat theme (or descendant) with this activity

但是沒有工作

身邊,我不認爲我的應用程序是大到包含65536種在另一邊方法 我得到的錯誤,當我用一些簡單的方法創建新類

我試圖跟蹤它

Error:D:\games\games\ANDROID\HealMe\app\src\main\java\com\kareem\healme\Gui\DoctorMain.java:56: warning: [deprecation] setDrawerListener(DrawerListener) in DrawerLayout has been deprecated 
    drawer.setDrawerListener(toggle); 
     ^
D:\games\games\ANDROID\HealMe\app\src\main\java\com\kareem\healme\Gui\DoctorPersonalInformation.java:52: warning: [deprecation] getPreferenceScreen() in PreferenceActivity has been deprecated 
    getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); 
    ^
D:\games\games\ANDROID\HealMe\app\src\main\java\com\kareem\healme\Gui\DoctorPersonalInformation.java:58: warning: [deprecation] getPreferenceScreen() in PreferenceActivity has been deprecated 
    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); 
    ^
D:\games\games\ANDROID\HealMe\app\src\main\java\com\kareem\healme\Gui\DoctorPersonalInformation.java:124: warning: [deprecation] findPreference(CharSequence) in PreferenceActivity has been deprecated 
      findPreference(s).setSummary(sharedPreferences.getString(s, "")); 
      ^
D:\games\games\ANDROID\HealMe\app\src\main\java\com\kareem\healme\Gui\DoctorPersonalInformation.java:128: warning: [deprecation] findPreference(CharSequence) in PreferenceActivity has been deprecated 
      findPreference(s).setSummary(sharedPreferences.getString(s, "")); 
      ^
D:\games\games\ANDROID\HealMe\app\src\main\java\com\kareem\healme\Gui\DoctorPersonalInformation.java:132: warning: [deprecation] findPreference(CharSequence) in PreferenceActivity has been deprecated 
      findPreference(s).setSummary(sharedPreferences.getString(s, "")); 
      ^
D:\games\games\ANDROID\HealMe\app\src\main\java\com\kareem\healme\Gui\DoctorPersonalInformation.java:136: warning: [deprecation] findPreference(CharSequence) in PreferenceActivity has been deprecated 
      findPreference(s).setSummary(sharedPreferences.getString(s, "")); 
      ^
D:\games\games\ANDROID\HealMe\app\src\main\java\com\kareem\healme\Gui\DoctorPersonalInformation.java:140: warning: [deprecation] findPreference(CharSequence) in PreferenceActivity has been deprecated 
      findPreference(s).setSummary(sharedPreferences.getString(s, "")); 
      ^
D:\games\games\ANDROID\HealMe\app\src\main\java\com\kareem\healme\Gui\DoctorPersonalInformation.java:158: warning: [deprecation] findPreference(CharSequence) in PreferenceActivity has been deprecated 
      findPreference(s).setSummary(name); 
      ^
D:\games\games\ANDROID\HealMe\app\src\main\java\com\kareem\healme\Gui\DoctorPersonalInformation.java:162: warning: [deprecation] findPreference(CharSequence) in PreferenceActivity has been deprecated 
      findPreference(s).setSummary(sharedPreferences.getString(s, "")); 
      ^
    D:\games\games\ANDROID\HealMe\app\src\main\java\com\kareem\healme\Gui\DoctorPersonalInformation.java:166: warning: [deprecation] findPreference(CharSequence) in PreferenceActivity has been deprecated 
      findPreference(s).setSummary(sharedPreferences.getBoolean(s, false) + ""); 
      ^
D:\games\games\ANDROID\HealMe\app\src\main\java\com\kareem\healme\Gui\PatientMain.java:84: warning: [deprecation] setDrawerListener(DrawerListener) in DrawerLayout has been deprecated 
    drawer.setDrawerListener(toggle); 
     ^
    D:\games\games\ANDROID\HealMe\app\src\main\java\com\kareem\healme\Gui\PatientMain.java:325: warning: [deprecation] isLocationProviderEnabled(ContentResolver,String) in Secure has been deprecated 
      .isLocationProviderEnabled(contentResolver, 
      ^
13 warnings 
FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':app:transformClassesWithDexForDebug'. 

com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException:java.util.concurrent.ExecutionException:com.android.dex.DexIndexOverflowException:方法ID不在[0, 0xffff]:65536

* Try: 
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 

所有的代碼運行之前正確因此與特定的類或活動沒有錯誤

怎麼能解決這個問題? 感謝

回答

3

根據Android developer documentation

如果你已經建立了一個Android應用程序,並收到此錯誤,那麼恭喜你,你有很多的代碼!本文檔介紹瞭如何克服此限制並繼續構建您的應用程序。

有時,使用gradle dependency導入庫可能會導致此錯誤。您的應用中是否有谷歌播放服務庫?如果有,而不是compile com.google.android.gms:play-services:9.4.0,則可以導入僅用於例如要使用谷歌地圖的庫,只需導入com.google.android.gms:play-services-maps:9.4.0而不是com.google.android.gms:play-services:9.4.0。這將有助於減少生成的dex數量。您也可以使用proguard來消除未使用的代碼。

在6.5之前的Google Play服務版本中,您必須將整個API包編譯到您的應用程序中。在某些情況下,這樣做會使得應用程序中的方法數量(包括框架API,庫方法和自己的代碼)在65,536的限制之下變得更加困難。

從版本6.5開始,您可以選擇性地將Google Play服務API編譯到您的應用中。例如,只包括谷歌飛度和Android Wear的API,替換下面的行中您的build.gradle文件:

您可以參考Android Guide如何選擇編譯API整合到你的可執行文件

4

你代碼庫的方法多於65,536,並且它不能捆綁在一個dex文件中。

在這種情況下,您必須添加multidex支持。

所有你需要做的就是添加:

android { 
    ... 

    defaultConfig { 
     ... 

     // Enabling multidex support. 
     multiDexEnabled true 
    } 
} 

dependencies { 
    compile 'com.android.support:multidex:1.0.1' 
} 

,這給AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<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> 

或者如果你有自己的實現Application類的,覆蓋內部ApplicationattachBaseContext方法即:

@Override 
protected void attachBaseContext(Context base) { 
    super.attachBaseContext(base); 
    MultiDex.install(this); 
} 

* MultiDex僅適用於Android 5.0及以上版本。它沒有向後兼容性。

+0

這正是我以前試過,沒有工作。斯蒂德給了我一個nother error..仔細閱讀我的問題。 –

0

檢查你正在編譯什麼Google Play Services。對於我來說什麼固定這是從

compile 'com.google.android.gms:play-services:10.2.0' 

包括整個播放服務庫,更改爲

compile 'com.google.android.gms:play-services-places:10.2.0' 

只包括了Places API的。

2

如果您正在使用multiDex ...:

在您的清單。如果你不重寫,則應用類:

<application android:name="android.support.multidex.MultiDexApplication" > 

如果覆蓋它,請確保您而不是從應用程序擴展,而應該從MultiDexApplication擴展,並在您的清單應該是這樣的:

<application android:name="yourOverridingClass" > 
相關問題