У меня есть проект Android, который использует собственную библиотеку C ++. Некоторые библиотечные методы вызываются из Java через JNI. Я хочу написать инструментальный тест на Java, который бы тестировал мою реализацию JNI (не нативную библиотеку; я хочу убедиться, что мой код JNI работает правильно). Я планирую использовать для этого фиктивный класс C ++, который будет создан в том же методе JNI, что и реальный класс во время выполнения теста. Я думал достичь этого путем передачи параметра в cmake внутри build.gradle. Моя проблема: в build.gradle, как я могу отличить, когда я запускаю тест от реального запуска приложения?
Подробнее с кодом:
Мой код JNI:
#define JNI_METHOD(return_type, method_name) JNIEXPORT return_type JNICALL Java_com_myproj_Session_##method_name
extern "C" {
std::shared_ptr<my::ISession> session;
JNI_METHOD(void, init)(JNIEnv *env, jobject) {
// want I want to do here:
#ifdef TESTCONFIG
session = std::make_shared<my::MockedSession>()
#else
session = std::make_shared<my::Session>();
#endif
}
В приведенном выше примере и Session, и MockedSession наследуются от ISession.
Затем в build.gradle я устанавливаю аргументы CMake:
externalNativeBuild {
cmake {
cppFlags "-std=c++11", "-Wall"
arguments "-DANDROID_STL=c++_static"
// here I want to do the following:
if (test) {
arguments "-DTESTCONFIG"
}
}
}
Как мне установить флаг 'test' в build.gradle?
Я пытался
testOptions {
properties.put("test", "true")
}
, а затем проверьте, содержат ли testOptions.properties ключ «test», прежде чем устанавливать параметры Cmake, но это всегда возвращает false.
Я не слишком хорош в Gradle, я, вероятно, скучаю по очевидному пути.