Можно ли удалить класс из импортированной библиотеки Gradle? - PullRequest
6 голосов
/ 20 февраля 2020

Я уже один день ищу и пытаюсь удалить класс из импортированной библиотеки через Gradle, не заставляя его работать, это возможно с Android + Gradle? Как это сделать?

Например, если я включу библиотеку, например, так:

implementation 'org.bouncycastle:bcpkix-jdk15on:1.64'

Как удалить из нее класс по имени? Последнее, что я пытался установить в build.gradle:

android {
  sourceSets.main.java.filter.exclude '**/QTeslaKeyEncodingTests.*'
}

Следующее также не работает:

jar {
    sourceSets {
        main {
            java {
                exclude '**/QTeslaKeyEncodingTests.java'
                exclude '**/QTeslaKeyEncodingTests.class'
            }
        }
    }
}

Это также не работает:

android{
  packagingOptions {        
    exclude 'org.bouncycastle/pqc/crypto/qtesla/QTeslaKeyEncodingTests.class'
  }
}

Контекст: зачем мне это нужно сейчас: когда вы запускаете "gradlew testDebug", все тесты в проекте запускаются, включая те, что присутствуют в импортированных библиотеках. Я также не знаю, является ли это ошибкой от bouncyCastle, что они включили эти тесты в библиотеку, но это проблема, потому что многие тесты не пройдены.

Ответы [ 3 ]

1 голос
/ 25 марта 2020

Исключить указанный пакет c из инструментальных тестов (connectedAndroidTest задача gradle) с параметром notPackage. Например:

android {
    defaultConfig {
        testInstrumentationRunnerArguments = ["notPackage": "com.example.somelibrary"]
    }
}

Существует множество возможных вариантов фильтрации. Официальная документация, которая документирует их все по адресу -

https://developer.android.com/reference/androidx/test/runner/AndroidJUnitRunner

0 голосов
/ 20 февраля 2020

Вам не нужно это делать, потому что все неиспользуемые классы будут исключены из вашего проекта в release mode. убедитесь, что вы включили его перед выпуском.

buildTypes {
        release {
            shrinkResources true
        }
}

Вы также можете включить его в debug mode, но это не очень хорошая идея, поскольку это увеличивает время компиляции.

0 голосов
/ 20 февраля 2020

Используйте этот код, чтобы исключить файлы из целевого объекта тестирования, поскольку вы заинтересованы в исключении файлов во время выполнения тестов.

sourceSets {

     androidTest {
         java {
             exclude '**/QTeslaKeyEncodingTests.java'
             exclude '**/QTeslaKeyEncodingTests.class'
        }
     }
  }
...