Android Jetifier не может преобразовать сгенерированную библиотеку поддержки связывания данных в AndroidX - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть проект Android, который был перенесен в AndroidX. В какой-то момент я хочу добавить новую библиотеку. Эта библиотека использует библиотеку поддержки с привязкой данных.

Я включил Android Jetifier в свои gradle.properties. Я использую инструмент сборки Android Gradle v.3.3.2 и Gradle v.4.10.1.

Вот мой gradle.properties:

org.gradle.jvmargs=-Xmx1536m
kotlin.code.style=official
android.useAndroidX=true
android.enableJetifier=true

Вот мой build.gradle:

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'kotlin-kapt'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.test"
        minSdkVersion 17
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    dataBinding {
        enabled = true
    }
}

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '28.0.0'
            }
        }

    }
}


dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.0-beta01'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation <library with AndroidX and data binding>
}

Я получил следующую ошибку во время компиляции.

Task :app:compileDebugJavaWithJavac FAILED
GallerypickerBinding.java:22: error: package android.support.constraint does not exist
    private final android.support.constraint.ConstraintLayout mboundView0;

GallerypickerBinding - это сгенерированный класс из привязки данных вновь добавленной библиотеки. Когда я проверил этот файл, он использует androidx.databinding.ViewDataBinding из AndroidX, но в том же файле он все еще использует android.support.constraint.ConstraintLayout из библиотеки поддержки.

Я ожидаю, что Android Jetifier преобразует все библиотеки поддержки, включая AndroidX, но похоже, что он не может преобразовать ConstraintLayout, сгенерированный из привязки данных, к AndroidX.

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Вы должны изменить имя пакета в файле Java, а также в файле XML.

com.android.support.constraint to androidx.constraintlayout
0 голосов
/ 01 апреля 2019

Для Kotlin , замените эту зависимость:

implementation "androidx.appcompat:appcompat:1.0.0-beta01"

с этими (не уверен, что второй даже требуется, но это совершенно необходимо):

implementation "androidx.appcompat:appcompat:1.0.2"
implementation "androidx.core:core-ktx:1.0.1"

И для этой ошибки привязки данных ... либо очистите проект - либо попробуйте добавить старый пакет com.android.support.constraint в зависимости один раз, чтобы он перестал жаловаться (только для теста он получит свое пространство имен переписано). Если это не помогает, пожалуйста, добавьте Gallerypicker.java, и это вопрос XML, для дальнейшего рассмотрения.

@ Сурадж Сингх может быть прав насчет ресурса - в таком случае его ответ должен быть принятым.

...