Узнаем User-Agent официального приложения ВКонтакте (или же минутка юмора)
Понадобилось, значит, мне выцепить User-Agent официальной приложухи ВКонтакте для Андроид. Выяснить-то удалось, формируется он как-то так:
USER_AGENT = String.format(Locale.US, "VKAndroidApp/%s-%d (Android %s; SDK %d; %s; %s %s; %s)", new Object[] { PackageInfo.versionName, PackageInfo.versionCode, Build.VERSION.RELEASE, Integer.valueOf(Build.VERSION.SDK_INT), Build.CPU_ABI, Build.MANUFACTURER, Build.MODEL, System.getProperty("user.language") });
Т.е. примерно такая строка - "VKAndroidApp/4.38-849 (Android 6.0; SDK 23; x86; Google Nexus 5X; ru)
Но, почитав код ниже, я неслабо так поугарал. Очень веселый код находится в файле com.vkontakte.android.api.ApiController.java. Подробности под катом.
Где смеяться:
- Я, конечно не имею по рукой гит блейма, но глядя на строку #5 не сложно догадаться об авторе писанного кода: https://vk.com/id25719408
- Строка #6,
for (boolean bool = true;; bool = false)
- это что блеать?? - Зачем вообще нужен цикл в строке #6, если скоуп все равно заканчивается return'ом в строке #35??
- Какую смысловую нагрузку несут конструкции
str1 = str2
в строках ##15, 19, 21, 23 - Если вдруг словили эксепшн в строке #28 - то переходим в бесконечный цикл!!!
- Зачем нужна переменная j в строке #22 - хрен знает
- Отличное имя для константы FUCKING_AD_USER_AGENT = String.format(Locale.US, "VKApp/%s (Linux; U; Android %s; %s Build/%s)", new Object[] { str1, Build.VERSION.RELEASE, Build.MODEL, Build.ID });