Включение Multidex в Android-проекте Unity с помощью Crashlytics

У меня очень похожая проблема, описанная здесь: Использование Fabric с Multidex с экспортированным проектом Unity

Как Fabric, так и Multidex (для более старых версий Android) требуют добавления подкласса Application в тег приложения файла AndroidManifest.xml. Но я не могу включить оба без ошибок, и у меня нет доступа ни к одному из этих классов, чтобы изменить их и изменить иерархию наследования.

(I need both of these together.)
<application ... android:name="android.support.multidex.MultiDexApplication">
<application ... android:name="io.fabric.unity.android.FabricApplication">

Наша сборка использует Gradle (достаточно недавно поддерживаемый в Unity), если это открывает какие-либо возможности.

Как я могу обойти эту проблему? Я открыт для декомпиляции и пересборки jar-файлов, но до сих пор все мои попытки декомпилировать Fabric-init.jar (который содержит подкласс Application) не увенчались успехом.


person vargonian    schedule 23.08.2017    source источник
comment
Я считаю, что это дубликат. Похоже, у вас слишком много ссылок на поля*, и по этой причине вы хотите включить Multidex. Другое решение — использовать ProGuard, как это предлагается в другом ответе на этот вопрос. Если ProGuard не уменьшает его в достаточной степени, продолжайте использовать решение Multidex.   -  person Programmer    schedule 24.08.2017
comment
Мы подошли к тому моменту, когда урезали все, что могли, и переходим на Multidex. Моя проблема заключается не просто в том, как включить multidex, а в том, как включить multidex в Android-проекте Unity, который также использует Crashlytics или Fabric. Проблема в том, что включение обоих из них вызывает конфликты с реализацией другого.   -  person vargonian    schedule 24.08.2017
comment
Хорошо, я просто удостоверяюсь, что вы пробовали использовать ProGuard.   -  person Programmer    schedule 24.08.2017


Ответы (1)


Вы можете использовать пользовательский класс Application со следующим содержимым:

protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    // this one is needed to enable multidex in your application
    MultiDex.install(this);
}

public void onCreate() {
    super.onCreate();
    // this one is needed to init the Fabric SDK
    FabricInitializer.initializeFabric(this, FabricInitializer.Caller.Unity);
}

Кроме того, еще одно решение, которое вы можете проверить здесь, я создал небольшой репозиторий GitHub с описанием, как это сделать в несколько кликов.

person Orest Savchak    schedule 02.02.2018