Gradle Plugin 3.2.0 с привязкой данных, не может разрешить имя пакета - PullRequest
0 голосов
/ 25 сентября 2018

После обновления Android Studio с 3.1.2 до 3.2.0 и обновления плагина gradle с его помощью до 3.2.0 у меня возникла проблема с созданными классами привязки данных, которые жалуются на несуществующее имя пакета,но оно существует.Пакет принадлежит модулю в проекте.

Вот ошибки, которые я получаю при попытке запустить приложение:

ошибка: не удается найти класс символов Helper

ошибка: пакет Helper не существует

Это файл моего проекта build.gradle file:

buildscript {

    repositories {
        google()
        jcenter()
        mavenCentral()
        maven {
            url 'https://maven.fabric.io/public'
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0'
        classpath "com.google.gms:google-services:4.0.1"
        classpath 'io.fabric.tools:gradle:1.25.4'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven {
            url 'https://jitpack.io'
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

И это build.gradle для модуля, который имеетпроблема:

apply plugin: 'com.android.library'

android {
    compileSdkVersion 28
    buildToolsVersion "28.0.3"

    defaultConfig {
        minSdkVersion 17
        targetSdkVersion 28
    }
}

dependencies {
    implementation 'com.android.support:recyclerview-v7:28.0.0'
    implementation 'com.android.support:appcompat-v7:28.0.0'
}

Я перепробовал все виды вещей:

  • Очистка и перестройка проекта
  • Недействительные кэши и перезапуск
  • Очисткаgradle и gradle cache
  • Обновление Gradle до последней версии
  • Изменение имени модуля и имени используемого пакета в нем

Ничего не помогло.

РЕДАКТИРОВАТЬ: добавлен скриншот enter image description here

Ответы [ 3 ]

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

Я использую библиотеку Highcharts (https://github.com/highcharts/highcharts-android) и обнаружил ту же проблему с привязкой данных - импорт после обновления плагина gradle до 3.2.0.

В этой версии, вероятно, есть ошибки, поэтомуостаться с версией 3.1.3.

Файл привязки данных в версии 3.2.0:

Ошибка импорта в Gradle 3.2.0

Привязка данныхфайл в версии 3.1.3:

импорт OK в Gradle 3.1.3

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

У меня был тот же вопрос сегодня.

Проблема заключается в самом имени вашего пакета.Вы упомянули:

в моем проекте нет класса Helper, это имя пакета.Пакет существует, но привязка данных не может его найти.

Краткий ответ:

Измените имя пакета, которое начинается со строчной буквы.Проблема возникает из-за того, что ваше имя пакета Helper.Измените его на helper.

Длинный ответ:

В плагине Android 3.2.0 и выше привязка данных V2 включена по умолчанию.Я предполагаю, что компилятор V2 для привязки данных обрабатывает любой компонент, который начинается с заглавной буквы как класс, а не пакет.На самом деле он ищет класс с именем Helper, а не пакет Helper.

Поскольку ранее вы использовали Android 3.1.2, который использует компилятор привязки данных V1, имя пакета не было проблемой.

Я переименовал все имена своих пакетов (папок) в своем проекте, чтобы начать со строчной буквы, и проект был наконец скомпилирован.Обязательно используйте инструмент рефакторинга (Shift + F6) при переименовании пакетов, чтобы изменение можно было применить и к вашим XML-файлам !!

БОНУС:

На всякий случай, если вы хотите, чтобы имена пакетов начинались с заглавных букв, но также хотите использовать плагин Android 3.2.0 (которыйне очень рекомендуется), перейдите в gradle.properties в корневой папке и добавьте эту строку.Это отключает компилятор databindingV2 и вынуждает проект использовать старый компилятор V1.Поэтому имя вашего класса не имеет значения.

android.databinding.enableV2 = false

Но зачем кому-то это делать?: /

0 голосов
/ 25 сентября 2018

В ваших кодах на самом деле используется вспомогательный класс EmojiIconEdittext из библиотеки сверхновых , но в ваших зависимостях там нет такой зависимости.

Итак, добавьте это к вашим Build.gradle зависимостям:

implementation 'com.github.hani-momanii:SuperNova-Emoji:1.1'

Или удалите класс ( Если вы не хотите его использовать ), и тогда он будет работать нормально.

PS : импорт действительно говорит правду.

import supernova.emoji.helper
...