Тип программы уже представлен: использование библиотеки androidx с firebase и сервисом google play не позволяет собрать андроид студию 3.1.1 - PullRequest
0 голосов
/ 02 октября 2018

Я столкнулся с конфликтом ниже в apk build

Program type already present: android.support.v4.media.MediaBrowserCompat$CallbackHandler
Message{kind=ERROR, text=Program type already present: android.support.v4.media.MediaBrowserCompat$CallbackHandler, sources=[Unknown source file], tool name=Optional.of(D8)}

Ниже находится моя программа приложения

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'realm-android'
apply plugin: 'kotlin-kapt'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.himotech"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    dataBinding {
        enabled true
    }

    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE-FIREBASE.txt'
        exclude 'META-INF/NOTICE'
    }
    lintOptions {
        abortOnError false
    }

    realm {
        syncEnabled = false;
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.appcompat:appcompat:1.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
apply plugin: 'com.google.gms.google-services'

ниже находится файл проекта проекта

buildscript {
    ext.kotlin_version = '1.2.30'
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "io.realm:realm-gradle-plugin:5.4.1"
        classpath 'com.google.gms:google-services:4.1.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

ext{
    // The following are only a few examples of the types of properties you can define.
    compileSdkVersion = 27
    // You can also create properties to specify versions for dependencies.
    // Having consistent versions between modules can avoid conflicts with behavior.
    supportLibVersion = '27.1.1'
    firebaseCoreVersion='16.0.3'
    firebaseDatabaseVersion='16.0.2'
    firebaseLibVersion='15.1.0'
    firebaseMessaging='17.3.1'
}

IN gradleСвойство, которое я включил для androidx:

android.useAndroidX = true
android.enableJetifier = false

Я прошел через это SO , но все еще не смог решить проблему.

ПРИМЕЧАНИЕ: Если я удаляю привязку данных из Gradle, то она работает нормально.

1 Ответ

0 голосов
/ 03 октября 2018

Я вижу кучу устаревших элементов в вашем Gradle.

Вам нужно переместить Android Studio на 3.2.(это стабильно

Также ваша версия kotlin должна быть 1.2.70+ (не используйте 1.2.71), в ней есть ошибки. Серьезно, это приведет к частому зависанию Android Studio.

ваши инструменты сборки Gradle также должны быть в диапазоне 3.2.0+.

Убедитесь, что у вашего пакета в gradle-wrapper.properties есть DistributionUrl 4.10-all или новее

Ваша зависимость jre должна бытьудалена в пользу или зависимость jdk

Ваша версия jre 7, вам нужно обновить до 8.

 implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

В макете ограничения есть 2.0.0-alpha2, если вы идете немного впередно не требуется.

пример текущих зависимостей androidx на дату публикации.

 //Android Google Libraries
implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation "androidx.constraintlayout:constraintlayout:2.0.0-alpha2"

Также звучит так, как будто вы уже использовали, но подтвердите, что у вас есть gradle.propertiesс

android.enableJetifier=true
android.useAndroidX=true

Jetifier попытается сделать ваши зависимости совместимыми с androidX.Наконец, если у вас слишком много проблем, при обновлении до androidX удалите изменения, получите его компиляцию из версиина контроле в хорошем месте.Затем используйте инструмент миграции в 3.2.Он делает довольно хорошую работу и оставляет только несколько незначительных ошибок для очистки.

Также стоит отметить, что вам, возможно, придется перейти к каждому XML-файлу и убедиться, что на новые пространства имен ссылаются должным образом, как RecyclerView должен показатьновое пространство имен androidx в вашем xml.То же самое, когда вы ссылаетесь на них в своем коде.

Я недавно обновил все свои проекты до androidX, и первый проект потребовал проб и ошибок, второй я использовал инструмент миграции, и это сделало мою жизнь намного более гладкой.

Причина, по которой удаление привязки данных работает для вас, заключается в том, что она пытается встроить объекты «неправильного пространства имен» в ваши файлы, сгенерированные привязкой данных.Вам необходимо просмотреть и исправить каждый xml-файл, чтобы использовать правильные пространства имен в ваших виджетах Android и элементах Framework.

Я приведу пример действия с ящиком.

<data>
    <variable name="activity" type="com.a35.activities.MainActivity"/>
    <variable name="iBindingRecyclerView" type="com.a35.interfaces.IBindingRecyclerView"/>
</data>

<androidx.drawerlayout.widget.DrawerLayout
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="false"
    tools:openDrawer="start">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <!--TOP TOOLBAR-->
        <include
            android:id="@+id/toolbarMain"
            layout="@layout/toolbar_main"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

        <!--TOP BLACK LINE-->
        <View
            android:id="@+id/vRedLine"
            android:layout_width="match_parent"
            android:layout_height="@dimen/dp_2"
            android:background="@color/black" />

        <!-- FrameLayout is used to insert fragments to display -->
        <FrameLayout
            android:id="@+id/fragPlaceholder"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />

    </LinearLayout>

    <com.google.android.material.navigation.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        android:background="@color/colorPrimary">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <include layout="@layout/nav_drawer_header"
                     android:id="@+id/navHeader"/>

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/lstMenuItems"
                android:layout_below="@+id/navHeader"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:bindRcvInterface="@{iBindingRecyclerView}"
                app:bindRcvList="@{activity.getDrawerItemList}"/>

            <ImageView
                android:id="@+id/imgBottomLogo"
                android:layout_width="@dimen/dp_160"
                android:layout_height="@dimen/dp_35"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:layout_marginBottom="@dimen/dp_35"
                android:src="@drawable/my_logo" />

        </RelativeLayout>

    </com.google.android.material.navigation.NavigationView>

</androidx.drawerlayout.widget.DrawerLayout>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...