Поддержка поддержки мультимедиа для Android

Я попал в лимит магии dex, потому что мое приложение использует много банок (диск api, greendao, текст в pdf, поддержка ..).

Мое настоящее решение состояло в том, что я буквально создал второй apk только для диска Google, с которого я звонил из основного apk. Но теперь я узнал, что андроид, наконец, поддерживает это с помощью этой библиотеки. Моя проблема в том, что я не знаю, как ее реализовать (желательно без градиента). Я не могу найти для него никаких хороших учебников.

Okey Я теряю рассудок, пытаясь реализовать это. Я нашел это: http://blog.osom.info/2014/10/multi-dex-to-rescue-from-infamous-65536.html

И я добавил:

android:name="android.support.multidex.MultiDexApplication" 

К моему файлу манифеста и

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

К моей mainactivity.java

Также установлен плагин gradle для eclipse, экспортированный град, чтобы получить файл build.gradle, который я изменил на:

 apply plugin: 'android' dependencies { compile fileTree(dir: 'libs', include: '*.jar') compile project(':android-support-v7-appcompat') compile project(':Sync') compile project(':gdrive:google-play-services_lib') } android { compileSdkVersion 14 buildToolsVersion "21.1.1" sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src-gen','src'] resources.srcDirs = ['src-gen','src'] aidl.srcDirs = ['src-gen','src'] renderscript.srcDirs = ['src-gen','src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } // Move the tests to tests/java, tests/res, etc... instrumentTest.setRoot('tests') // Move the build types to build-types/<type> // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... // This moves them out of them default location under src/<type>/... which would // conflict with src/ being used by the main source set. // Adding new build types or product flavors should be accompanied // by a similar customization. debug.setRoot('build-types/debug') release.setRoot('build-types/release') } dexOptions { preDexLibraries = false } } afterEvaluate { tasks.matching { it.name.startsWith('dex') }.each { dx -> if (dx.additionalParameters == null) { dx.additionalParameters = ['--multi-dex'] } else { dx.additionalParameters += '--multi-dex' } } } 

Но ошибка все тот же 🙁

Solutions Collecting From Web of "Поддержка поддержки мультимедиа для Android"

Блог был старым решением.

С Android Studio 0.9.2 и Gradle Plugin 0.14.1 вам нужно только:

  1. Добавить в AndroidManifest.xml:

,

 android:name="android.support.multidex.MultiDexApplication" 

или

Добавить

 MultiDex.install(this); 

В методе attachBaseContext вашего пользовательского приложения

Или ваше собственное приложение расширяет MultiDexApplication

  1. Добавьте multiDexEnabled = true в свой build.gradle

,

 android { defaultConfig { ... multiDexEnabled = true } } 

Готово.

Извините за плохой английский

Связанные ресурсы:

http://developer.android.com/tools/building/multidex.html

https://plus.google.com/+XavierDucrohet/posts/1FnzwdcBnyC

Есть несколько вещей, которые вам нужно сделать,

1- В градиенте вам нужно указать multidex и добавить библиотеку поддержки:

 android { defaultConfig { ... multiDexEnabled true ... } } dependencies { ... compile 'com.android.support:multidex:1.0.0' ... } 

2- В манифесте вы должны установить приложение в приложение с несколькими приложениями:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.package.name"> <application ... android:name="com.package.name.my_application"> ... </application> </manifest> 

3.1- В вашем классе приложений вам нужно либо расширить MultiDexApplication :

 public class my_application extends MultiDexApplication { ... } 

3.2- Или attachBaseContext() метод attachBaseContext() :

 public class my_application extends Application { protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } } 

Ограничения библиотеки поддержки мультидексов

В библиотеке поддержки Multidex есть некоторые известные ограничения, о которых вам следует знать и проверить, когда вы включите их в конфигурацию сборки приложения:

  • Установка файлов .dex во время запуска на раздел данных устройства является сложной и может привести к ошибкам Application Not Response (ANR), если дополнительные файлы dex являются большими. В этом случае вы должны применять методы сокращения кода с помощью ProGuard, чтобы свести к минимуму размер файлов dex и удалить неиспользуемые части кода.
  • Приложения, которые используют multidex, могут не запускаться на устройствах, которые запускают версии платформы раньше Android 4.0 (уровень API 14) из-за ошибки Dalvik linearAlloc (проблема 22586). Если вы ориентируетесь на уровни API раньше, чем 14, обязательно выполните тестирование с этими версиями платформы, так как ваше приложение может иметь проблемы при запуске или когда загружаются определенные группы классов. Сокращение кода может уменьшить или, возможно, устранить эти потенциальные проблемы.
  • Приложения, использующие multidex-конфигурацию, которые выполняют очень большие запросы на распределение памяти, могут сбой во время выполнения из-за лимитного ограничения DalvikAlloc (выпуск 78035). Предел распределения был увеличен в Android 4.0 (уровень API 14), но приложения могут по-прежнему работать в этом предел для версий Android до Android 5.0 (API уровня 21).
  • Существуют сложные требования относительно того, какие классы необходимы в основном файле dex при выполнении в среде исполнения Dalvik. Обновления инструмента для сборки Android обрабатывают требования Android, но вполне возможно, что другие включенные библиотеки имеют дополнительные требования к зависимостям, включая использование интроспекции или вызов методов Java из собственного кода. Некоторые библиотеки могут не использоваться, пока средства сборки multidex не будут обновлены, чтобы вы могли указать классы, которые должны быть включены в основной файл dex.

Ресурсов: http://developer.android.com/tools/building/multidex.html

Согласно документам на странице https://developer.android.com/studio/build/multidex.html#avoid

Если вы minSdkVersion равны 21 и выше, все, что вам нужно сделать, это

 android { defaultConfig { ... minSdkVersion 21 targetSdkVersion 25 multiDexEnabled true } ... } 

Если вы minSdkVersion 20 или ниже, вам нужно использовать библиотеку поддержки

 android { defaultConfig { ... minSdkVersion 15 targetSdkVersion 25 multiDexEnabled true } ... } dependencies { compile 'com.android.support:multidex:1.0.1' } 

Вместе с

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