2015-04-24 114 views
2

如果我在gradle這個文件寫代碼程序兼容性-V7:22.1.0不工作

apply plugin: 'com.android.library' 

    android { 
     compileSdkVersion 22 
     buildToolsVersion '22.0.1' 

     defaultConfig { 
      minSdkVersion 9 
      targetSdkVersion 22 
      versionCode 1 
      versionName "1.0" 
     } 
     buildTypes { 
      release { 
       minifyEnabled false 
       proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
      } 
     } 
    } 

    dependencies { 
     compile fileTree(include: ['*.jar'], dir: 'libs') 
     compile 'com.android.support:appcompat-v7:22.0.0' 
    } 

所有工作涼爽。但如果我改變

compile 'com.android.support:appcompat-v7:22.1.0' 

我的應用程序崩潰。 Android工作室推薦我更換版本爲22.1.0但如果我chage版本 - 崩潰。

Error:Execution failed for task ':app:dexDebug'. 
> com.android.ide.common.internal.LoggedErrorException: Failed to run command: 
    C:\Users\zen_75\AppData\Local\Android\sdk\build-tools\22.0.1\dx.bat --dex --no-optimize --output C:\projects\android-customer\app\build\intermediates\dex\debug --input-list=C:\projects\android-customer\app\build\intermediates\tmp\dex\debug\inputList.txt 
Error Code: 
    2 
Output: 
    UNEXPECTED TOP-LEVEL EXCEPTION: 
    com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536 
     at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:502) 
     at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:277) 
     at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:491) 
     at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:168) 
     at com.android.dx.merge.DexMerger.merge(DexMerger.java:189) 
     at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454) 
     at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303) 
     at com.android.dx.command.dexer.Main.run(Main.java:246) 
     at com.android.dx.command.dexer.Main.main(Main.java:215) 
     at com.android.dx.command.Main.main(Main.java:106) 

我該如何修復它,或者離開它?

編輯:

apply plugin: 'com.android.library' 

android { 
    compileSdkVersion 22 
    buildToolsVersion '22.0.1' 

    defaultConfig { 
     minSdkVersion 15 
     targetSdkVersion 22 
     versionCode 1 
     versionName "1.0" 
     multiDexEnabled true 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.android.support:appcompat-v7:22.1.0' 
} 

更改文件 - 不行!

+0

可能重複[錯誤,當我的gradle包括圖書館(http://stackoverflow.com/questions/29839332/error-when-i-include-gradles-library) – Yurets

+0

你在一次旅行。 –

+0

[問題更新到最新的appcompat和支持庫]的可能重複(http://stackoverflow.com/questions/26515378/issue-updating-to-latest-appcompat-and-support-library) – mmlooloo

回答

1

您的項目中有Over 65K Methods,好像谷歌已經爲appcomapt-v21.1庫增加了很多現在的方法。

反正現在你有這些選擇:
1.使用Multidex,按照下面的說明,更多信息here
2.使用ProGuard
3.砍掉你在你的項目有方法的數量

你必須記住:

  • Multidex可能無法在設備[R工作unning的Android v3.x-,檢查所有限制here
  • ProGuard不能保證解決問題
  • 重新寫你的代碼削減的方法的數量是不容易的。

添加multidex支持:

的build.gradle

android { 
    ... 
    ... 

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

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

的manifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="x.xxx.xx"> 
    <application 
     ... 
     android:name="android.support.multidex.MultiDexApplication"> 
     ... 
    </application> 
</manifest> 

PS:您可以使用dex-method-counts來計算您在項目中使用的方法數量,它可以讓您清楚瞭解您的情況。

+0

考慮到'Multidex'支持只有4.0 +以可靠的方式,我不認爲這是一個有效的選項。 – EpicPandaForce

+0

不錯,我會更新我的回答 – JafarKhQ

+0

我也有4個模塊,也有gradle feles。我可以在它們中做同樣的事情,還是隻在主模塊中做? – ip696

0

一個可能的解決方案是開始使用ProGuard的minify功能。請注意,它在版本1.0.1上打破了Dagger依賴注入。

buildTypes { 
     debug { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 

以可擴展的方式測試您的應用程序,因爲這樣可以刪除未使用的方法,並執行其他許多操作。的

http://developer.android.com/tools/help/proguard.html

相關問題