Я занимаюсь разработкой для android - Andorid Studio (язык Java).
Я хочу использовать firebase analytics
.
Как я уже знаю, что предпочтительный новые библиотеки - fcm (вместо gms).
Проблема в том, что существует так много конфликтов (версий), и мне нужно их решить - лучше просто.
Для firebase eventlog notification
Я хочу использовать такой код:
import com.google.firebase.analytics.FirebaseAnalytics;
import com.google.firebase.messaging.FirebaseMessaging;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
import com.google.firebase.iid.FirebaseInstanceId;
...
private static FirebaseAnalytics mFirebaseAnalytics;
...
// in constuctor:
Context context = MyApplication.getAppContext();
if (mFirebaseAnalytics == null)
mFirebaseAnalytics = FirebaseAnalytics.getInstance(context);
...
// in code:
mFirebaseAnalytics.logEvent("notify_myMessage", params);
Мой старый проект работает нормально (без eventLog ...)
Мой старый файл build.gradle (на root)
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
google()
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.2'
classpath 'com.google.gms:google-services:3.2.0'
classpath 'io.fabric.tools:gradle:1.27.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Мой старый файл build.gradle (в приложении)
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
apply plugin: 'com.google.gms.google-services'
android {
compileSdkVersion 27
buildToolsVersion '28.0.3'
flavorDimensions "default"
defaultConfig {
applicationId "myapp.com"
minSdkVersion 19
targetSdkVersion 26
versionCode 1
versionName "2.4.17"
multiDexEnabled true
vectorDrawables.useSupportLibrary = true
}
...
repositories {
jcenter()
maven {
url 'https://esri.bintray.com/arcgis'
}
flatDir {
dirs 'libs/jemi'
}
google()
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation files('libs/jemi/JemiCore.jar')
implementation(name: 'Jemi-debug', ext: 'aar')
implementation(name: 'JemiESRI100-debug', ext: 'aar')
implementation 'com.android.volley:volley:1.1.0'
implementation 'com.android.support:appcompat-v7:27.1.0'
implementation 'com.android.support:design:27.1.0'
implementation 'com.android.support:multidex:1.0.3'
implementation 'com.android.support:support-v4:27.1.0'
implementation 'com.android.support:support-vector-drawable:27.1.0'
implementation 'com.esri.arcgisruntime:arcgis-android:100.4.0'
implementation 'com.google.android.gms:play-services:12.0.1'
implementation 'com.google.firebase:firebase-messaging:12.0.1'
implementation 'com.google.android.gms:play-services-analytics:12.0.1'
implementation 'com.crashlytics.sdk.android:crashlytics:2.9.8'
implementation 'com.android.support:exifinterface:27.1.1'
}
Когда я добавляю базу данных для журнала событий (как я описал в верхней части этого сообщения), мне нужно использовать новый версия журнала событий, поэтому вот изменения в новой версии:
Мой новый файл build.gradle (root) - изменения:
...
dependencies {
//noinspection GradleDependency
// classpath 'com.android.tools.build:gradle:3.6.0' // - bug ???
classpath 'com.android.tools.build:gradle:3.3.2'
classpath 'com.google.gms:google-services:4.3.3'
classpath 'io.fabric.tools:gradle:1.28.0' // 1.28.0 because crashlytics need that version
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
Я не знаю о classpath 'com. android .tools.build: gradle: 3.6.0' (возможно, это приведет к решению, но программа cra sh в этой версии, поэтому мне нужно использовать стабильную версию).
M y старый файл build.gradle (в приложении) - изменения:
android {
compileSdkVersion 28
buildToolsVersion '28.0.3'
flavorDimensions "default"
defaultConfig {
applicationId "myapp.com"
minSdkVersion 19
targetSdkVersion 28
versionCode 1
versionName "2.4.17"
multiDexEnabled true
vectorDrawables.useSupportLibrary = true
}
and on dependencies:
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation files('libs/jemi/JemiCore.jar')
implementation(name: 'Jemi-debug', ext: 'aar')
implementation(name: 'JemiESRI100-debug', ext: 'aar')
implementation 'com.android.volley:volley:1.1.0'
implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
implementation 'com.android.support:design:28.0.0-rc01'
implementation 'com.android.support:multidex:1.0.3'
implementation 'com.android.support:support-v4:28.0.0-rc01'
implementation 'com.android.support:support-vector-drawable:28.0.0-rc01'
implementation 'com.android.support:exifinterface:28.0.0-rc01'
implementation 'com.esri.arcgisruntime:arcgis-android:100.4.0'
// **********
// implementation 'com.google.firebase:firebase-messaging:20.1.0'
// *******
implementation 'com.google.firebase:firebase-analytics:17.2.2'
implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'
}
Старая версия crashlytics не работает с версией io.fabri c .tools: gradle: 1.28.0, поэтому мне нужно изменить версии. Основная проблема заключается в примечании строки со звездочками.
На данный момент syn c работает, но есть некоторые конфликты: и теперь я получаю ошибку:
Не удалось объединить манифест: Атрибут application@appComponentFactory value = (android .support.v4.app.CoreComponentFactory) из [com. android .support: support-compat: 28.0.0-rc01] AndroidManifest. xml: 22: 18-91 также присутствует в [androidx.core: core: 1.0.0] AndroidManifest. xml: 22: 18-86 value = (androidx.core.app.CoreComponentFactory). Предложение: добавьте 'tools: replace = "android: appComponentFactory"' к элементу на AndroidManifest. xml: 24: 5-150: 19, чтобы переопределить.
Итак, я добавляю это предложение , и получил ошибку:
Ошибка слияния манифеста с несколькими ошибками, см. журналы: Ошибки объединения: Ошибка: инструменты: заменить указанное в строке: 24 для атрибута android: appComponentFactory, но нет нового значения указанный манифест приложения (этот файл), строка 23 Ошибка: проверка не пройдена, выход из главного манифеста приложения (этот файл)
следующие строки в gradle.properties не решают никаких проблем:
android.useAndroidX=true
android.enableJetifier=true
Я понятия не имею, как мне решить конфликт, или есть какой-нибудь простой способ это выяснить. Может быть, я могу использовать оба SDK - 27 и 28 без конфликтов.
Спасибо.