Add get apk version via adb PiperOrigin-RevId: 595930239
diff --git a/ui_automator/android_device.py b/ui_automator/android_device.py index c517377..86d0375 100644 --- a/ui_automator/android_device.py +++ b/ui_automator/android_device.py
@@ -64,10 +64,28 @@ Raises: adb.AdbError: When executing adb command fails. """ + installed_version = get_apk_version(device, package_name) + + return installed_version == version + + +def get_apk_version( + device: android_device.AndroidDevice, package_name: str +) -> str | None: + """Gets Android app version on given Android device. + + Args: + device: An AndroidDevice object. + package_name: The Android app package name. + + Returns: + The version of given package. + + Raises: + adb.AdbError: When executing adb command fails. + """ grep_version_name = utils.grep( 'versionName', device.adb.shell(['dumpsys', 'package', package_name]) ) - return ( - bool(grep_version_name) and grep_version_name[0].split('=')[1] == version - ) + return grep_version_name[0].split('=')[1] if grep_version_name else None
diff --git a/ui_automator/android_device_test.py b/ui_automator/android_device_test.py index 595f680..c7099ea 100644 --- a/ui_automator/android_device_test.py +++ b/ui_automator/android_device_test.py
@@ -98,6 +98,22 @@ ) ) + def test_get_apk_version_returns_version(self): + self.mock_android_device.adb.shell.return_value = b'versionName=1.2.4\n' + + self.assertEqual( + ad.get_apk_version(self.mock_android_device, 'installed.apk'), '1.2.4' + ) + + def test_get_apk_version_returns_none_with_not_installed_apk(self): + self.mock_android_device.adb.shell.return_value = ( + b'Unable to find package\n' + ) + + self.assertIsNone( + ad.get_apk_version(self.mock_android_device, 'notinstalled.apk') + ) + if __name__ == '__main__': unittest.main()