Невозможно войти в класс после обновления com.android.tools.build:gradle до 3.3.0 или 3.4.X - PullRequest
0 голосов
/ 10 июля 2019

У меня есть простой класс (KeyManagementViewModel), который имеет ссылку на другой из моих классов (UserConfigRepository):

public class KeyManagementViewModel extends ViewModel {
private LiveData<ErrorWrapper<UserConfig>> userConfig;
private UserConfigRepository repo;

public LiveData<ErrorWrapper<UserConfig>> getUserConfig() {
    if (userConfig == null) {
        repo = new UserConfigRepository(userId); //BREAKPOINT HERE
        userConfig = repo.getUserConfigLive(); //CAN'T RESOLVE "repo" here
    }

    return userConfig;
}
}

В моем проекте build.gradle у меня есть

buildscript {
  repositories {
    jcenter()
    google()
    maven {
        url 'https://maven.fabric.io/public'
    }

  }
  dependencies {
    classpath 'com.android.tools.build:gradle:3.2.1' //CAN'T BE UPGRADED
    classpath 'com.google.gms:google-services:4.2.0'
    classpath 'io.fabric.tools:gradle:1.29.0'
  }
}

С этой конфигурацией я могу поставить точку останова в KeyManagementViewModel.getUserConfig в строке, которую я прокомментировал, и все работает нормально, если я вступаю в репо getUserConfigLive. Однако , когда я обновляю com.android.tools.build:gradle до 3.3.0 или 3.4.2 , теперь точка останова работает, как и раньше, но если я войду в репо getUserConfigLive(), я не буду Я не вижу исходный код моего класса, и любая точка останова внутри класса репо никогда не будет достигнута. Я знаю, что код выполняется, потому что мои журналы в классе репо все еще появляются в консоли. Что-то еще, что я замечаю, это то, что, если я разбиваю строку после моего комментария «BREAKPOINT HERE», он говорит: «repo = Нет такого поля экземпляра:« repo »», хотя repo он был создан в линия до. Это как если бы отладчик находился в странном состоянии, когда он не распознает мой класс Repo или текущее состояние. Вот трассировка стека после входа в getUserConfigLive(), показывающая, что он не распознает класс репо как мой или поля как действительные. Любая идея, что вызывает это или как это исправить? У меня та же проблема в последней версии IntellJ Idea и последней версии Android Studio. Я использую Gradle 5.1.1

enter image description here

1 Ответ

0 голосов
/ 10 июля 2019

Виновником был новый усадчик R8, представленный в плагине gradle 3.3.0 https://developer.android.com/studio/releases/gradle-plugin#behavior-changes

По какой-то причине R8 запутывал мой класс UserConfigRepository, а Proguard - нет.Это не долгосрочное решение, но отключение минимизации - хороший тест.Моим долгосрочным решением было увеличение minSdkVersion до 21, поэтому я получил новую неявную поддержку мультидекса , и мне было разрешено отключить минификацию в отладочных приложениях, что в любом случае рекомендуется

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