#!/bin/bash
BUILD_DIR=build
CMAKE=cmake
TEST_BINARY_FILENAME=testOboe
TEST_RUNNER_DIR=UnitTestRunner
TEST_RUNNER_PACKAGE_NAME=com.google.oboe.tests.unittestrunner
TEST_RUNNER_JNILIBS_DIR=${TEST_RUNNER_DIR}/app/src/main/jniLibs
TEST_RUNNER_ASSETS_DIR=${TEST_RUNNER_DIR}/app/src/main/assets
if [ -z "$ANDROID_NDK" ]; then
echo "Please set ANDROID_NDK to the Android NDK folder"
exit 1
fi
if [ ! $(type -P ${CMAKE}) ]; then
echo "${CMAKE} was not found on your path. You can install it using Android Studio using Tools->Android->SDK Manager->SDK Tools."
echo "Once done you will need to add ${HOME}/Library/Android/sdk/cmake/<current_version>/bin to your path."
exit 1
fi
ABI=$(adb shell getprop ro.product.cpu.abi | tr -d '\n\r')
if [ -z "$ABI" ]; then
echo "No device ABI was set. Please ensure a device or emulator is running. You may need to unplug extra devices."
exit 1
fi
echo "Device/emulator architecture is $ABI"
if [ ${ABI} == "arm64-v8a" ] || [ ${ABI} == "x86_64" ]; then
PLATFORM=android-21
elif [ ${ABI} == "armeabi-v7a" ] || [ ${ABI} == "x86" ]; then
PLATFORM=android-16
else
echo "Unrecognised ABI: ${ABI}. Supported ABIs are: arm64-v8a, armeabi-v7a, x86_64, x86. If you feel ${ABI} should be supported please file an issue on github.com/google/oboe"
exit 1
fi
mkdir -p ${BUILD_DIR}
echo "Cleaning up previous build because swapping phones may result in stale binaries"
rm -r ${BUILD_DIR}
echo "Building tests for ${ABI} using ${PLATFORM}"
CMAKE_ARGS="-S. \
-B${BUILD_DIR} \
-DANDROID_ABI=${ABI} \
-DANDROID_PLATFORM=${PLATFORM} \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_CXX_FLAGS=-std=c++17 \
-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \
-DCMAKE_VERBOSE_MAKEFILE=1"
cmake ${CMAKE_ARGS}
pushd ${BUILD_DIR}
make -j5
if [ $? -eq 0 ]; then
echo "Tests built successfully"
else
echo "Building tests FAILED"
exit 1
fi
popd
mkdir ${TEST_RUNNER_JNILIBS_DIR}
mkdir ${TEST_RUNNER_JNILIBS_DIR}/${ABI}
DESTINATION_DIR=${TEST_RUNNER_JNILIBS_DIR}/${ABI}/${TEST_BINARY_FILENAME}
echo "Copying binary to ${DESTINATION_DIR}"
cp ${BUILD_DIR}/${TEST_BINARY_FILENAME} ${DESTINATION_DIR}.so
mkdir ${TEST_RUNNER_ASSETS_DIR}
mkdir ${TEST_RUNNER_ASSETS_DIR}/${ABI}
DESTINATION_DIR=${TEST_RUNNER_ASSETS_DIR}/${ABI}/${TEST_BINARY_FILENAME}
echo "Copying binary to ${DESTINATION_DIR}"
cp ${BUILD_DIR}/${TEST_BINARY_FILENAME} ${DESTINATION_DIR}.so
pushd ${TEST_RUNNER_DIR}
echo "Building test runner app"
./gradlew assembleDebug
if [ $? -ne 0 ]; then
echo "Building test app FAILED"
exit 1
fi
echo "Installing to device"
./gradlew installDebug
if [ $? -ne 0 ]; then
echo "Installing tests FAILED"
exit 1
fi
popd
echo "Clear logcat from before the test."
adb logcat -c
echo "Starting app - Check your device for test results"
adb shell am start ${TEST_RUNNER_PACKAGE_NAME}/.MainActivity
sleep 1
echo "Logging test logs and Oboe logs. Run adb logcat for complete logs."
adb logcat ${TEST_RUNNER_PACKAGE_NAME}.MainActivity:V OboeAudio:V *:S