Подтвердить что ты не робот

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

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

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

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, экспортирован gradle, чтобы получить файл 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'
      }
   }
}

Но ошибка остается прежней: (

4b9b3361

Ответ 1

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

С Android Studio 0.9.2 и Gradle Плагин 0.14.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

Ответ 2

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

1- В вашем gradle вам нужно указать 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():

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

Ответ 3

Согласно документам на 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>