Столкнулись с двумя ошибками при создании Unity для Android, firebase SDK

#android #firebase #unity3d

#Android #firebase #unity3d

Вопрос:

Я получаю обе ошибки:

Не удалось создать задачу ‘:processDebugGoogleServices’.

Не удается создать прокси-класс для абстрактного класса ‘GoogleServicesTask’.

 // GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN

buildscript {
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.0'
        classpath 'com.google.gms:google-services:4.3.4'
**BUILD_SCRIPT_DEPS**}
}

allprojects {
    repositories {
        google()
        jcenter()
        flatDir {
            dirs 'libs'
        }
    }
}

// Android Resolver Repos Start
([rootProject]   (rootProject.subprojects as List)).each {
    ext {
        it.setProperty("android.useAndroidX", true)
        it.setProperty("android.enableJetifier", true)
    }
}
([rootProject]   (rootProject.subprojects as List)).each { project ->
    project.repositories {
        def unityProjectPath = $/file:///**DIR_UNITYPROJECT**/$.replace("\", "/")
        maven {
            url "https://maven.google.com"
        }
        maven {
            url "https://deltadna.bintray.com/android" // Assets/DeltaDNA/Editor/Android/Dependencies.xml:8
        }
        maven {
            url (unityProjectPath   "/Assets/GeneratedLocalRepo/Firebase/m2repository") // Assets/Firebase/Editor/AnalyticsDependencies.xml:18, Assets/Firebase/Editor/AppDependencies.xml:22
        }
        mavenLocal()
        jcenter()
        mavenCentral()
    }
}
// Android Resolver Repos End
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
**APPLY_PLUGINS**

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
// Android Resolver Dependencies Start
    implementation 'com.android.support:appcompat-v7:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
    implementation 'com.android.support:cardview-v7:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
    implementation 'com.android.support:customtabs:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
    implementation 'com.android.support:support-v4:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
    implementation 'com.deltadna.android:deltadna-sdk-notifications:4.10.0' // Assets/DeltaDNA/Editor/Android/Dependencies.xml:8
    implementation ('com.facebook.android:facebook-applinks:[5,6)') {
        exclude group: 'com.google.zxing'
    }// Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:6
    implementation ('com.facebook.android:facebook-core:[5,6)') {
        exclude group: 'com.google.zxing' 
    }// Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:5
    implementation ('com.facebook.android:facebook-login:[5,6)') {
        exclude group: 'com.google.zxing'
    } // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:7
    implementation ('com.facebook.android:facebook-share:[5,6)') {
        exclude group: 'com.google.zxing'
    } // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:8
    implementation 'com.google.android.gms:play-services-base:17.4.0' // Assets/Firebase/Editor/AppDependencies.xml:17
    implementation 'com.google.firebase:firebase-analytics:17.6.0' // Assets/Firebase/Editor/AppDependencies.xml:15
    implementation 'com.google.firebase:firebase-analytics-unity:6.16.0' // Assets/Firebase/Editor/AnalyticsDependencies.xml:18
    implementation 'com.google.firebase:firebase-app-unity:6.16.0' // Assets/Firebase/Editor/AppDependencies.xml:22
    implementation 'com.google.firebase:firebase-common:19.3.1' // Assets/Firebase/Editor/AppDependencies.xml:13
    implementation 'com.parse.bolts:bolts-android:1.4.0' // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:4
// Android Resolver Dependencies End
    // ** revenuecat **
    implementation ('com.revenuecat.purchases:purchases-hybrid-common:1.2.0') {
        exclude group: 'com.android.billingclient', module: 'billing'
    }
    implementation 'com.android.support:multidex:1.0.3'
**DEPS**}

// Android Resolver Exclusions Start
android {
  packagingOptions {
      exclude ('/lib/armeabi/*'   '*')
      exclude ('/lib/mips/*'   '*')
      exclude ('/lib/mips64/*'   '*')
      exclude ('/lib/x86/*'   '*')
      exclude ('/lib/x86_64/*'   '*')
  }
}
// Android Resolver Exclusions End
android {
    compileSdkVersion **APIVERSION**
    buildToolsVersion '**BUILDTOOLS**'

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    defaultConfig {
        minSdkVersion **MINSDKVERSION**
        targetSdkVersion **TARGETSDKVERSION**
        multiDexEnabled true
        applicationId '**APPLICATIONID**'
        ndk {
            abiFilters **ABIFILTERS**
        }
        versionCode **VERSIONCODE**
        versionName '**VERSIONNAME**'
    }

    lintOptions {
        abortOnError false
    }

    aaptOptions {
        noCompress = ['.unity3d', '.ress', '.resource', '.obb'**STREAMING_ASSETS**]
        ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~"
    }**SIGN**

    buildTypes {
        debug {
            minifyEnabled **MINIFY_DEBUG**
            useProguard **PROGUARD_DEBUG**
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'**USER_PROGUARD****SIGNCONFIG**
            jniDebuggable true
        }
        release {
            minifyEnabled **MINIFY_RELEASE**
            useProguard **PROGUARD_RELEASE**
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'**USER_PROGUARD****SIGNCONFIG**
        }
    }**PACKAGING_OPTIONS****SPLITS**
**BUILT_APK_LOCATION**
**EXTERNAL_SOURCES**
    bundle {
        language {
            enableSplit = false
        }
        density {
            enableSplit = false
        }
        abi {
            enableSplit = true
        }
    }
}**SPLITS_VERSION_CODE****REPOSITORIES****SOURCE_BUILD_SETUP**

  

Я видел несколько потоков, в которых говорилось, что я должен удалить apply plugin: 'com.google.gms.google-services'
или обновить classpath 'com.android.tools.build:gradle:3.4.0' classpath 'com.android.tools.build:gradle:4.0.0' , но это не помогло мне и только вызвало больше проблем.

Также запуск ./gradlew :dependencies ничего не показал.

Комментарии:

1. Можете ли вы поделиться более подробным журналом ошибок, какой версией Unity и какой версией Firebase SDK вы используете? У меня есть несколько догадок, но я не знаю, какие из них помогут догадкам: плагин Firebase Unity позволяет службам Google работать за вас, удаление apply plugin: 'com.google.gms.google-services' может это исправить. Убедитесь, что у вас есть google-сервисы. json в ваших ресурсах / каталоге и принудительное разрешение зависимостей в Unity 2020.1 и Firebase <= 6.15.2, строка useAndroidX не будет работать. Используйте это обходное решение: firebase.googleblog.com/2020/08 /…

2. Я использую Unity 2019.1.13 и firebase 6.16.0. Я несколько раз пытался добавить firebase, используя firebase.google.com/docs/unity/setup но безуспешно. Сегодня я нашел ваш учебник на YouTube youtube.com /… но все равно получил те же результаты. удаление apply plugin: 'com.google.gms.google-services' , как вы предложили, дает мне много ошибок «повторяющегося класса» между firebase analytics и google.gms Кроме того, я могу сказать, что я не использую EDM4U, потому что это не помогло несколько раз и добавило другую зависимость, которую я там не хотел.

3. Итак, вы захотите запустить EDM4U хотя бы один раз, чтобы он мог выполнять свою работу (зависимости для Unity не совпадают с зависимостями для Android в целом). Это обработает все материалы play services за вас (возможно, сбросит файл gradle и снова заполнит его). Убедитесь, что в настройках EDM4U у вас включены Jetifier и patch mainTemplate.gradle (хотя, похоже, у вас есть зависимости от Unity). Я предполагаю, что дублирующиеся файлы классов jetifier не запущены. Когда вы выполняете принудительное разрешение, вы получаете какие-либо ошибки? Можете ли вы попробовать создать gradleTemplate.properties?

4. Еще одна идея — не использовать плагин apply (опять же, SDK выполнит эту работу) и попробуйте выполнить следующее: firebase.googleblog.com/2020/08/… В частности, попробуйте сгенерировать файл gradleTemplate.properties и добавьте: android.useAndroidX=true android.enableJetifier=true

5. Когда я говорю «SDK выполнит эту работу». Плагин сервисов Google, помимо прочего, преобразует google-сервисы. json в google-services.xml в каталоге ресурсов. Плагин Firebase Unity выполняет то же самое автоматически, в качестве обходного пути для проектов Unity, которые не используют Gradle.

Ответ №1:

Сложно точно сказать, что происходит, но у меня есть несколько предложений, которые должны сработать.

Во-первых, избавьтесь от classpath 'com.google.gms:google-services:4.3.4' under dependencies и apply plugin: 'com.google.gms.google-services' . Причина в том, что целью этого является чтение google-services.json файла в каталоге вашего проекта и создание res/values/google-services.xml файла (более подробная информация здесь). Firebase SDK для Unity сделает это автоматически, поместив этот файл под Assets/Plugins/FirebaseApp.androidlib/res/values/google-services.xml . Все, что находится в Plugins/*.androidlib файле, теперь автоматически переносится в проект Android, что делает этот шаг излишним (и часто вызывает ошибки как на стороне Unity, так и на стороне Android).

Поскольку вы использовали Unity для создания mainTemplate.gradle файла и используете более новую версию Unity (2019.3 и выше), вам также потребуется сгенерировать gradleTemplate.properties файл. Таким образом, мы можем включить AndroidX (замену библиотек поддержки Android, которые сейчас используются Firebase) и включить Jetifier (который обновит зависимости поддержки Google, которые, похоже, использует Facebook).

Скриншот окна настроек проекта, показывающий quot;Пользовательский основной шаблон Gradlequot; и quot;Пользовательский базовый шаблон Gradlequot;, отмечен

Отсюда, поскольку вы упомянули об отключении внешнего менеджера зависимостей для Unity (EDM4U), вы захотите принудительно разрешить свои зависимости от Android. Скриншот, показывающий quot;Принудительное разрешениеquot; в разделе quot;Ресурсы / менеджер внешних зависимостей / распознаватель Androidquot;

Чтобы это работало, вам нужно установить флажок «Исправлять mainTemplate.gradle», «Использовать Jetifier.» и «Исправлять gradleTemplate.properties» в настройках вашего устройства распознавания Android: Скриншот quot;Настройки распознавателя Androidquot;, показывающий, что указанные выше параметры проверены

Если у вас возникли проблемы или вы не хотите запускать EDM4U, я пытаюсь сделать это добавить android.useAndroidX=true и android.enableJetifier=true gradleTemplate.properties . Для моей собственной игры этот файл теперь выглядит так:

 org.gradle.jvmargs=-Xmx**JVM_HEAP_SIZE**M
org.gradle.parallel=true
android.enableR8=**MINIFY_WITH_R_EIGHT**
**ADDITIONAL_PROPERTIES**
android.useAndroidX=true
android.enableJetifier=true
  

Напомним, что на этом этапе вы должны были удалить плагин play services и включить поддержку AndroidX и Jetifier. Вы должны иметь возможность либо создавать из Unity, либо экспортировать проект gradle и выполнять сборку из командной строки (последнее всегда является проблемой в Unity, поскольку они предпочитают не использовать gradlew, поэтому вы можете столкнуться с несовместимостью с вашим системным gradle).

Если это не поможет, я хотел бы увидеть более полный журнал ошибок, чтобы попытаться выяснить фактическую причину.

Комментарии:

1. Я не вижу в своих настройках опции для пользовательского шаблона свойств Gradle, также в моем AndroidResolverDependency.xml У меня есть эта строка <setting name="gradlePropertiesTemplateEnabled" value="False" /> . Я попытался изменить его на True надеясь, что это заставит параметр в настройках появиться, но безуспешно. Все остальное делается так, как вы сказали.

2. Глупый вопрос: есть ли у вас какие-либо файлы jar или aar Assets/Plugins/Android ? Может Assets/Plugins/Android/<library>/ быть (например, Firebase или Facebook для <library>)? Если да, можете ли вы их удалить?

3.Я обновился до Unity 2019.4.9 LTS, и теперь я могу видеть и включать пользовательский шаблон базовых свойств. Я добавил его, и строки android.useAndroidX=true android.enableJetifier=true были добавлены автоматически с помощью распознавателя Android, но я получаю те же ошибки. Файл gradle также изменился после обновления версии Unity. Чтобы ответить на ваш вопрос, да, я удалил все файлы jar Assets/Plugins/Android , никаких файлов ни под одним <library> и построил проект, я все еще получаю duplicate class ошибки.

4. На данный момент у меня нет догадок. Обязательно попробуйте спросить у github.com/firebase/quickstart-unity/issues или firebase.google.com/support . Они определенно захотят увидеть больше ваших журналов сборки, и на GitHub будет очень полезно, если вы сможете повторить проблему в одном из проектов quickstart.

Ответ №2:

В вашем файле Gradle корневого уровня (на уровне проекта) (build.gradle) добавьте правила для включения плагина Gradle служб Google. Убедитесь, что у вас также есть репозиторий Maven от Google.

 dependencies {
        classpath 'com.google.gms:google-services:3.0.0'
        classpath 'com.android.tools.build:gradle:3.3.1'
}
  

И затем:

В файле Gradle вашего модуля (на уровне приложения) (обычно app / build.gradle) примените плагин Gradle служб Google:

 apply plugin: 'com.google.gms.google-services'  
  

Ответ №3:

У меня возникла проблема с combo Firebase Unity gradle . Решается путем понижения gradle .

Unity -> Edit -> Preference -> Gradle к версии 6.7.1

Кажется, что Firebase это не может работать с более новыми gradle версиями.

Скачать: Gradle