Декомпилируем приложение xiaomi сканер и забираем результат сканирования
У коллеги возникло предложение:
«Напиши мне за банку чипсов распознавалку штрих-кодов на андроид, чтобы просто в файлики результаты писать и время, брату надо»
В итоге оказалось не брату, да и не надо, и вообще банка чипсов это дорого
Из интереса пробежался по готовым решениям на js и android, и т.к. у меня смартфон xiaomi с готовым приложением сканером, подумал, почему бы не попробовать просто забирать результаты сканирования из него?
Ок, пробовал погуглить инфу об интентах или готовую инструкцию по получению данных из сканера, но тщетно.
Решено провести разведку манифеста приложения на наличие интентов.
- Находим и забираем APK с телефона.
adb shell ~:/pm list packages | grep scanner ~:/pm path com.xiaomi.scanner exit pull /system/priv-app/MiuiScanner/MiuiScanner.apk
- Декомпилируем apk с помощью онлайн сервиса.
- Исследуем манифест.
Находим первый попавшийся по смыслу экшн.AndroidManifest.xml - Создаем новый android проект и пишем вызов сканера.
val intent = Intent("miui.intent.action.scanbarcode") startActivityForResult(intent, 1);
- Запускаем приложение, делаем вызов и…
запускается сканер и дает спокойно работать, но нужно получить результат, как? Видимо нужен корректный код запроса, или дополнительные данные в интенте. Анализируем декомпилированные исходники в части обработки интентов и попадается следующее.ScanActivity.javaСудя по всему нужно добавить булево значение в интент. - Ищем нужное имя ключа, которое лежит в EXTRA_INTENT_IS_BACKTO_THIRDAPP и находим isBackToThirdApp.AppUtils.java
- Переписываем код вызова сканера.
val intent = Intent("miui.intent.action.scanbarcode") intent.putExtra("isBackToThirdApp",true) startActivityForResult(intent, 1);
- Забираем результат.
super.onActivityResult(requestCode, resultCode, data) if (resultCode==Activity.RESULT_OK){ result.setText(data?.extras?.getString("result")) }
- Короткое видео с примером работы приложения.
- Интерес удовлетворен, и теперь мы можем пользоваться результатами родного Xiaomi приложения и сосредоточиться на описании своей логики работы с результатами, поедая чипсы