Проблема сборки AndroidX с ProGuard

ЗАКРЫТО

Мы пытаемся интегрировать библиотеку Android (которая компилирует библиотеку поддержки Android) в наш проект, который был перенесен на androidX. И по неизвестной причине мы получаем

can't find referenced method 'void addOnTabSelectedListener(com.google.android.material.tabs.TabLayout$OnTabSelectedListener)' in program class com.google.android.material.tabs.TabLayout

при попытке получить сборку с поддержкой proguard.

gradle-wrapper: 4.8

gradle build tools : 3.2.0

compileSdkVersion 28

ИЗМЕНИТЬ, 9 октября 2018 г.

По какой-то причине это была проблема proguard, proguard показывал неправильную ошибку, после того как мы внесли некоторые изменения в наш исходный код и забыли добавить некоторые классы в proguard, он изменил ошибки с классами, которые мы забыли добавить. и после их добавления все прошло хорошо.


person Mohamed Zakaria El-Zoghbi    schedule 01.10.2018    source источник
comment
Проверить логику github.com/Instabug/Instabug-Android/issues/123   -  person IntelliJ Amiya    schedule 01.10.2018
comment
Вы перешли на AndroidX, вы уверены, что он перенесен? Какие зависимости у вас есть в build.gradle? Пожалуйста, добавьте дополнительную информацию + зависимости.   -  person ʍѳђઽ૯ท    schedule 01.10.2018
comment
@ ʍѳђ ઽ ૯ ท это именно та проблема, о которой здесь упоминается github.com/Instabug/Instabug-Android/ вопросов / 123   -  person Mohamed Zakaria El-Zoghbi    schedule 01.10.2018
comment
Похоже, ваше последнее изменение действительно содержит ответ на проблему. В этом случае правильное действие - опубликовать ответ вместо редактирования. Пожалуйста, откатитесь и опубликуйте свое решение в качестве ответа (тогда мы сможем проголосовать за него, а также за ваш вопрос, так что это тоже хорошо для вашей репутации!)   -  person Toby Speight    schedule 31.10.2018


Ответы (1)


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

Попробуйте добавить эти строки в свой файл proguardrules.pro:

-keep class com.google.android.material.** { *; }

-dontwarn com.google.android.material.**
-dontnote com.google.android.material.**

-dontwarn androidx.**
-keep class androidx.** { *; }
-keep interface androidx.** { *; }

Затем в вашем build.gradle

buildscript {
    repositories {
        maven {
            url "http://storage.googleapis.com/r8-releases/raw/master"
        }
    }

    dependencies {
        classpath 'com.android.tools:r8:ff9c89416cc1c8adf83d481a1e5fd515fcb893b9'
        classpath 'com.android.tools.build:gradle:your version'
    }
}
person Roberto Manfreda    schedule 01.10.2018
comment
Это сообщение об ошибке или предупреждение? см. редактировать в ответе - person Roberto Manfreda; 01.10.2018
comment
Это предупреждение, которое разрушает здание, но когда я добавляю --dontwarn, оно строится нормально, но вылетает при запуске действия, содержащего интерфейс. - person Mohamed Zakaria El-Zoghbi; 01.10.2018
comment
Выложите полный стек, пожалуйста! :) - person Roberto Manfreda; 01.10.2018
comment
Полную трассировку стека можно найти здесь github.com/Instabug/Instabug-Android/ вопросы / - person Mohamed Zakaria El-Zoghbi; 01.10.2018
comment
Похоже, проблема связана с Proguard. Скопируйте правила, размещенные сюда, добавив 3 строки моего ответа внизу правил и дай мне знать - person Roberto Manfreda; 01.10.2018
comment
То же самое, это не нарушило сборку, но как только действие, содержащее класс, запускается, оно вылетает. - person Mohamed Zakaria El-Zoghbi; 02.10.2018
comment
вы указали android.useAndroidX = true и android.enableJetifier = true? - person Roberto Manfreda; 02.10.2018
comment
Дополнительные ссылки: reference1 reference2. Вопрос: Что вы получаете при отключении Proguard? - person Roberto Manfreda; 02.10.2018
comment
Хранение всего в пакете androidx - это не излишне. - person tir38; 29.11.2018
comment
@ tir38 вы знаете, как удалить insde androidx из тех папок, которые мы не используем. - person Adi; 26.06.2020