Я пытаюсь автоматизировать некоторые действия с таблицей контактов, используя UiAutomator .Но у меня возникла странная проблема, связанная с escape-символами оболочки.
Я знаю, что могу сделать это из командной строки:
adb shell content query --uri content://com.android.contacts/raw_contacts --projection _id --where "account_name=\’SOME_ACCOUNT_NAME\’"
, что будет правильновывод (есть один контакт с account_name=SOME_ACCOUNT_NAME
)
Row: 0 _id=1
, но когда я пытаюсь сделать это с помощью кода, подобного следующему:
@Test
fun test_01_a_user_can_setup_P2P_mode() {
val uiAutomation = InstrumentationRegistry.getInstrumentation().uiAutomation
uiAutomation.executeShellCommand("content query --uri content://com.android.contacts/raw_contacts --projection _id --where \"account_name=\'SOME_ACCOUNT_NAME\'\"")
val baos = ByteArrayOutputStream()
writeDataToByteStream(fd!!, baos)
val output = String(baos.toByteArray())
Log.println(Log.DEBUG, "TAG", output)
}
private val BUFFER_SIZE = 8192
private fun writeDataToByteStream(
pfDescriptor: ParcelFileDescriptor, outputStream: ByteArrayOutputStream) {
val inputStream = ParcelFileDescriptor.AutoCloseInputStream(pfDescriptor)
try {
val buffer = ByteArray(BUFFER_SIZE)
var len = inputStream.read(buffer)
while (len >= 0) {
outputStream.write(buffer, 0, len)
len = inputStream.read(buffer)
}
} finally {
inputStream.close()
}
}
printts No result found.
Однако, удалив часть --where \"account_name=\'SOME_ACCOUNT_NAME\'\"
, исправил отпечатки
Row: 0 _id=1
Я пробовал много разных способов избежать "
и '
, но я 'потеряно между escape-символами Java String и escape-символами оболочки.