Тесты эмулятора Firebase не пройдены при записи звука - PullRequest
0 голосов
/ 17 января 2020

Аудиозапись отлично работает на физических устройствах, однако 15-20% (1 из 5) тестов эмулятора Firebase не пройдены. Единственная информация, которую мы знаем, это родная крэ sh. Может кто-нибудь просветить меня?

  • У нас есть разрешения, не беспокойтесь о них


Мы используем что-то подобное, чтобы нажать и удерживать запись нажмите и отпустите через 5 секунд

onView(withId(R.id.sound_button)).perform(pressAndHold());
waitforSec(5);
onView(withId(R.id.sound_button)).perform(release());
static class PressAndHoldAction implements ViewAction {
            @Override
            public Matcher<View> getConstraints() {
                return isDisplayingAtLeast(90); // Like GeneralClickAction
            }

            @Override
            public String getDescription() {
                return "Press and hold action";
            }

            @Override
            public void perform(final UiController uiController, final View view) {
                if (sMotionEventDownHeldView != null) {
                    throw new AssertionError("Only one view can be held at a time");
                }

                float[] precision = Press.FINGER.describePrecision();
                float[] coords = GeneralLocation.CENTER.calculateCoordinates(view);
                sMotionEventDownHeldView = MotionEvents.sendDown(uiController, coords, precision).down;
                // save view information and make sure release() is on same view
            }
        }


И отпустите кнопку с этим

static class ReleaseAction implements ViewAction {
            @Override
            public Matcher<View> getConstraints() {
                return isDisplayingAtLeast(90);  // Like GeneralClickAction
            }

            @Override
            public String getDescription() {
                return "Release action";
            }

            @Override
            public void perform(final UiController uiController, final View view) {
                if (sMotionEventDownHeldView == null) {
                    throw new AssertionError("Before calling release(), you must call pressAndHold() on a view");
                }

                float[] coords = GeneralLocation.CENTER.calculateCoordinates(view);
                MotionEvents.sendUp(uiController, sMotionEventDownHeldView, coords);
                sMotionEventDownHeldView = null;
            }
        }


Журнал Firebase

Native crash
Native crash of /system/bin/mediaserver

Build fingerprint: 'generic/gce_x86_phone/gce_x86:8.1.0/OGM1.181114.001/5131284:userdebug/test-keys'
Revision: '0'
ABI: 'x86'
pid: 1542, tid: 17551, name: AudioRecord  >>> /system/bin/mediaserver <<<
signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
    eax 00000000  ebx 00000606  ecx 0000448f  edx 00000006
    esi 0000001e  edi 00000606
    xcs 00000023  xds 0000002b  xes 0000002b  xfs 00000003  xss 0000002b
    eip ef7e7d10  ebp 00006472  esp e8e055d8  flags 00000296
backtrace:
    #00 pc 00000d10  [vdso:ef7e7000] (__kernel_vsyscall+16)
    #01 pc 0001edf8  /system/lib/libc.so (syscall+40)
    #02 pc 0001f013  /system/lib/libc.so (abort+115)
    #03 pc 000ddf33  /system/lib/libstagefright.so (android::AudioSource::dataCallback(android::AudioRecord::Buffer const&)+2339)
    #04 pc 000dd5a4  /system/lib/libstagefright.so (_ZN7androidL27AudioRecordCallbackFunctionEiPvS0_.cfi+84)
    #05 pc 00031a50  /system/lib/libaudioclient.so (android::AudioRecord::processAudioBuffer()+1312)
    #06 pc 00032656  /system/lib/libaudioclient.so (android::AudioRecord::AudioRecordThread::threadLoop()+214)
    #07 pc 000103be  /system/lib/libutils.so (android::Thread::_threadLoop(void*)+222)
    #08 pc 0000fd86  /system/lib/libutils.so (thread_data_t::trampoline(thread_data_t const*)+246)
    #09 pc 000713e5  /system/lib/libc.so (__pthread_start(void*)+53)
    #10 pc 0002057b  /system/lib/libc.so (__start_thread+75)
    #11 pc 0001ec16  /system/lib/libc.so (__bionic_clone+70)
androidx.test.espresso.AppNotIdleException: Looped for 2219 iterations over 60 SECONDS. The following Idle Conditions failed .

at dalvik.system.VMStack.getThreadStackTrace(Native Method)
at java.lang.Thread.getStackTrace(Thread.java:1538)
at androidx.test.espresso.base.DefaultFailureHandler.getUserFriendlyError(DefaultFailureHandler.java:88)
at androidx.test.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.java:51)
at androidx.test.espresso.ViewInteraction.waitForAndHandleInteractionResults(ViewInteraction.java:312)
at androidx.test.espresso.ViewInteraction.desugaredPerform(ViewInteraction.java:173)
at androidx.test.espresso.ViewInteraction.perform(ViewInteraction.java:114)
at com.package_name.utils.TestMethods.sendAudioMessage(TestMethods.java:643)
at com.package_name.firebase.LoginMessageTest.mainTest(LoginMessageTest.java:81)
at java.lang.reflect.Method.invoke(Native Method)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80)
at androidx.test.internal.runner.junit4.statement.RunAfters.evaluate(RunAfters.java:61)
at androidx.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:531)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at androidx.test.ext.junit.runners.AndroidJUnit4.run(AndroidJUnit4.java:104)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56)
at androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:392)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2075)


Методы испытаний. java - Строка: 643

onView(withId(R.id.sound_button)).perform(release());

1 Ответ

0 голосов
/ 23 января 2020

Наконец-то разобрался, через 5 мучительных дней!

Проблема в частоте дискретизации аудио и битовой скорости кодирования.

При инициализации MediaRecorder объекта (до запуска)

Эмулятор

audioRecorder.setAudioSamplingRate(8000);
audioRecorder.setAudioEncodingBitRate(32000);


Устройство

audioRecorder.setAudioSamplingRate(44100);
audioRecorder.setAudioEncodingBitRate(96000);
...