2014-10-10 3 views
1

из-за высокоприоритетного исправления безопасности в кордове для Android. Мы должны обновить нашу версию cordova (от 2.7.0 до 3.6.3) в нашем приложение. Поэтому мы подумали, что было бы лучше создать новый проект.

Я установил кордову и создаю проект с cordova cli api. Также я добавил, что платформа Android добавила много плагинов cordova. Затем я скопировал наш материал sencha touch в папку www.

Затем я позвонил cordova build android.

После этого я импортировал этот проект Android в Android Studio (0.8.11).

Для нашего приложения мне нужно скопировать следующие вещи из нашего старого проекта

  • AndroidManifest.xml
  • Все вещи из Рез/каталога
  • в SRC/каталога я добавил что нам нужно в нашем приложении

В наших собственных файлах java (каталог src /) все было красным. Итак, мы выяснили, что в src/org.apache.cordova/ было только каталоги установленных плагинов cordova. Поэтому я загрузил кордову 3.6.X (от https://github.com/apache/cordova-android/tree/3.6.x) и скопировал все java-файлы в src/org/apache/cordava.

Тогда я узнал, что в библиотеке lib/отсутствует библиотека поддержки android-support-v13.jar. Поэтому я скопировал его из каталога sdk\extras\android\support\v13. После этого почти все красные вещи в коде исчезли, поэтому я попытался запустить его.

Но я получаю эту ошибку:

Error:Execution failed for task ':dexDebug'. 
> com.android.ide.common.internal.LoggedErrorException: Failed to run command: 
    C:\Develop\Android SDK\sdk\build-tools\19.1.0\dx.bat --dex --output D:\www\xxx\native\cordova-project\platforms\android\build\intermediates\dex\debug D:\www\DiLocSyncMobile\native\cordova-project\platforms\android\build\intermediates\classes\debug D:\www\xxx\native\cordova-project\platforms\android\build\intermediates\dependency-cache\debug D:\www\xxx\native\cordova-project\platforms\android\build\intermediates\pre-dexed\debug\android-support-v13-ba93a882b9b887c9c56ff93adba54cb3616bd827.jar D:\www\xxx\native\cordova-project\platforms\android\build\intermediates\pre-dexed\debug\classes-0236632443c0351e54fca9912536c8c02b5ad2b2.jar 
Error Code: 
    2 
Output: 
    UNEXPECTED TOP-LEVEL EXCEPTION: 
    com.android.dex.DexException: Multiple dex files define Lorg/apache/cordova/App$1; 
     at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594) 
     at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552) 
     at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533) 
     at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170) 
     at com.android.dx.merge.DexMerger.merge(DexMerger.java:188) 
     at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439) 
     at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287) 
     at com.android.dx.command.dexer.Main.run(Main.java:230) 
     at com.android.dx.command.dexer.Main.main(Main.java:199) 
     at com.android.dx.command.Main.main(Main.java:103) 

Мой build.gradle файл имеет следующие зависимости:

dependencies { 
    compile fileTree(dir: 'libs', include: '*.jar') 
    for (subproject in getProjectList()) { 
     compile project(subproject) 
    } 
} 

В моем Lib каталоге/это только баночка я добавил вручную.

Пожалуйста, помогите мне/Спасибо заранее! :-)

+0

Проверьте: http://stackoverflow.com/questions/22315834/android-unable-to-execute-dex-multiple-dex-files-define или http://stackoverflow.com/questions/7870265/unable-to -execute-dex-multiple-dex-files-define-lcom-myapp-rarray –

+0

Проверьте эту ошибку, потому что вы получаете ссылку на одну вещь из более чем одной банки. – khurram

+0

Спасибо, я выяснил, в чем была моя проблема: это было потому, что я скопировал файлы java cordova в src/com/apache/cordova/... Они уже существуют в/CordovaLib/... Нет, приложение скомпилировано, но Я все время ошибаюсь: «Кордова exec fail: Class not found», и в моих java-файлах у меня есть такие ошибки, как «Не удается разрешить символ CordovaPlugin» – mbo

ответ

1

Эта ошибка возникает, когда у вас есть несколько ссылок на один и тот же класс в одном пакете.

Например, вы могли бы иметь класс:

com.android.foo.bar.GenericClass

И тогда у вас есть две банки:

tools_library.jar

more_tools_library.jar

И они оба нужен "GenericClass" - но один использует другую версию класса от другой.В псевдокоде, вы могли бы думать о нем, как:

tools_library.jar:com.android.foo.bar.GenericClass != more_tools_library.jar:com.android.foo.bar.GenericClass

и вам нужно быть:

tools_library.jar:com.android.foo.bar.GenericClass == more_tools_library.jar:com.android.foo.bar.GenericClass

Распространенной причиной этой проблемы является использование двух различных версий пакета например, android-support-v13.jar или android-support-v4.jar, что случилось со мной более нескольких раз.

Это также может произойти, если одна из банок включает в себя старую версию android-support-v4.jar и Вам необходима более новая версия или android-support-v13.jar

Хотя это не может конкретно ответить на ваш вопрос (нет достаточно информации, чтобы выяснить, какие конкретный jar или класс вызывает конфликт), я подумал, что, по крайней мере, было бы полезно предоставить более подробное объяснение ошибки по сравнению с «Невозможно выполнить dex», что потребовало много времени для дешифрования, когда я впервые увидел его.

+0

Спасибо, я выяснил, в чем была моя проблема: это было потому, что Я скопировал java-файлы cordova в src/com/apache/cordova/... Они уже существуют в/CordovaLib/... Нет, приложение скомпилировано, но я все время ошибаюсь: «Кордова exec не работает : Class not found "и в моих java-файлах у меня есть такие ошибки, как" Не удается разрешить символ CordovaPlugin " – mbo

Смежные вопросы