Инструментальные тесты Android, исключение BouncyCastleAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Инструментальные тесты Android, исключение BouncyCastle

Сообщение Anonymous »

Некоторое время назад мои инструментальные тесты перестали работать. Я получаю исключение при попытке подписать тестовый APK от BouncyCastle. Я сделал git bisect, чтобы найти коммит, в котором тесты перестали работать. Мне удалось найти, где они остановились, и устранить причину, по которой они перестали работать (это добавление pdfbox, который зависит от BouncyCastle). Отлично, подумал я, проблема решена. Неа. Удаление pdfbox из HEAD не приводит к повторному запуску тестов. Я мог бы снова запустить git bisect, чтобы выяснить, когда в следующий раз произойдет их поломка, но это очень болезненно, поскольку мне придется вручную удалять pdfbox и весь код, который его использует на каждом этапе.
Обратите внимание: я могу создавать (и подписывать) выпуски и отлаживать APK, но не тесты. Я могу запускать юнит-тесты (локально, а не на устройстве). Я могу проводить тесты с помощью roboelectricic. Я даже могу создать тестовый APK, вручную загрузить его на устройство и запустить его через adb.
Но я не могу запускать инструментированные тесты из Android Studio или gradle.
Я могу создать новый тестовый проект, он отлично запускает тесты. Конечно, это похоже на некоторую зависимость в сломанной системе сборки приложения, что немного беспокоит. Я вижу очень старые (2014–2015 гг.) решения подобных проблем, но решения, похоже, больше не применимы.
Я нашел кое-что, что предложило добавить
android.jetifier.ignorelist=bcprov

в gradle.properties. Это звучало многообещающе, но не сработало. Возможно, параметр не совсем правильный.
вот результат работы ./gradlew linkedDebugAndroidTest --stacktrace:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:connectedDebugAndroidTest'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:149)
at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:282)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:147)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:135)
at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:74)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:42)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:337)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:324)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:317)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:303)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:463)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:380)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.bouncycastle.operator.DefaultSignatureAlgorithmIdentifierFinder
at org.bouncycastle.operator.jcajce.JcaContentSignerBuilder.(Unknown Source)
at com.android.build.gradle.internal.testing.utp.TLSUtilsKt.createCert(TLSUtils.kt:58)
at com.android.build.gradle.internal.testing.utp.TLSUtilsKt.generateRsaKeyPair(TLSUtils.kt:50)
at com.android.build.gradle.internal.testing.utp.UtpTestResultListenerServerRunner.(UtpTestResultListenerServerRunner.kt:67)
at com.android.build.gradle.internal.testing.utp.UtpTestResultListenerServerRunner.(UtpTestResultListenerServerRunner.kt:35)
at com.android.build.gradle.internal.testing.utp.UtpTestUtilsKt$runUtpTestSuiteAndWait$1.invoke(UtpTestUtils.kt:122)
at com.android.build.gradle.internal.testing.utp.UtpTestUtilsKt$runUtpTestSuiteAndWait$1.invoke(UtpTestUtils.kt:121)
at com.android.build.gradle.internal.testing.utp.UtpTestUtilsKt.runUtpTestSuiteAndWait(UtpTestUtils.kt:136)
at com.android.build.gradle.internal.testing.utp.UtpTestUtilsKt.runUtpTestSuiteAndWait$default(UtpTestUtils.kt:112)
at com.android.build.gradle.internal.testing.utp.UtpTestRunner$1.invoke(UtpTestRunner.kt:55)
at com.android.build.gradle.internal.testing.utp.UtpTestRunner$1.invoke(UtpTestRunner.kt:54)
at com.android.build.gradle.internal.testing.utp.UtpTestRunner.scheduleTests(UtpTestRunner.kt:123)
at com.android.build.gradle.internal.testing.BaseTestRunner.runTests(BaseTestRunner.java:196)
Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.NoSuchFieldError: id_alg_hss_lms_hashsig [in thread "Execution worker Thread 8"]
at org.bouncycastle.operator.DefaultSignatureAlgorithmIdentifierFinder.(Unknown Source)
at org.bouncycastle.operator.jcajce.JcaContentSignerBuilder.(Unknown Source)
at com.android.build.gradle.internal.testing.utp.TLSUtilsKt.createCert(TLSUtils.kt:58)
at com.android.build.gradle.internal.testing.utp.TLSUtilsKt.generateRsaKeyPair(TLSUtils.kt:50)
at com.android.build.gradle.internal.testing.utp.UtpTestResultListenerServerRunner.(UtpTestResultListenerServerRunner.kt:67)
at com.android.build.gradle.internal.testing.utp.UtpTestResultListenerServerRunner.(UtpTestResultListenerServerRunner.kt:35)
at com.android.build.gradle.internal.testing.utp.UtpTestUtilsKt$runUtpTestSuiteAndWait$1.invoke(UtpTestUtils.kt:122)
at com.android.build.gradle.internal.testing.utp.UtpTestUtilsKt$runUtpTestSuiteAndWait$1.invoke(UtpTestUtils.kt:121)
at com.android.build.gradle.internal.testing.utp.UtpTestUtilsKt.runUtpTestSuiteAndWait(UtpTestUtils.kt:136)
at com.android.build.gradle.internal.testing.utp.UtpTestUtilsKt.runUtpTestSuiteAndWait$default(UtpTestUtils.kt:112)
at com.android.build.gradle.internal.testing.utp.UtpTestRunner$1.invoke(UtpTestRunner.kt:55)
at com.android.build.gradle.internal.testing.utp.UtpTestRunner$1.invoke(UtpTestRunner.kt:54)
at com.android.build.gradle.internal.testing.utp.UtpTestRunner.scheduleTests(UtpTestRunner.kt:123)
at com.android.build.gradle.internal.testing.BaseTestRunner.runTests(BaseTestRunner.java:196)
at com.android.build.gradle.internal.tasks.DeviceProviderInstrumentTestTask.lambda$doTaskAction$2(DeviceProviderInstrumentTestTask.java:376)
at com.android.builder.testing.api.DeviceProvider.use(DeviceProvider.java:55)
at com.android.build.gradle.internal.tasks.DeviceProviderInstrumentTestTask.doTaskAction(DeviceProviderInstrumentTestTask.java:364)
at com.android.build.gradle.internal.tasks.NonIncrementalTask$taskAction$$inlined$recordTaskAction$1.invoke(BaseTask.kt:66)
at com.android.build.gradle.internal.tasks.Blocks.recordSpan(Blocks.java:51)
at com.android.build.gradle.internal.tasks.NonIncrementalTask.taskAction(NonIncrementalTask.kt:97)
at jdk.internal.reflect.GeneratedMethodAccessor2048.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:125)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
at org.gradle.api.internal.tasks.execution.TaskExecution$3.run(TaskExecution.java:248)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
at org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:233)
at org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:216)
at org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:199)
at org.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:166)


Подробнее здесь: https://stackoverflow.com/questions/775 ... -exception
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»