Комментарии 84
Я знаю, что меня иногда читают новостники. Если вдруг есть желание - будет здорово, если напишите немного про приложения у себя. Проект бесплатный и полностью открытый, любой сможет "форкнуть" его и продолжить развивать свою ветку.. Мне действительно часто пишут в личку и спрашивают, как можно применить тот или иной девайс и огорчаются, узнав что даже базовые сервисы не всегда работают. Не переведешь же всех друзей на XMPP! :)
Чуть позже допилю шифрование, правда, ключами будем меняться пока что по открытому каналу, но ни оператор, ни man in the middle, ни владелец инстанса не сможет расшифровать данные.
Практически за год ведения блога, я набрал >1.000 подписчиков на всех платформах: хабр, DTF, пикабу. Я считаю это весьма достойный результат: я не вложил ни копейки в рекламу, а просто писал про то, что мне интересно. Спасибо вам за то, что читаете!
отличная работа!
если сгенерировать специальный API-токен, то можно свободно обращаться к методам, связанным с музыкой
а что это за токен и как сгенерировать?
Сейчас напишу в личку, чтобы не прикрыли раньше времени.
Я знаю что пост будут читать ребята из ВК. Если приложение окажется нужным не только мне (а у меня выпрашивали билды еще до выхода статьи и первого релиза), то можем запилить полноценный раздел с музыкой: вы только будьте подобрее к разработчикам кастомных клиентов!
Асинхронную часть чем делали - handlerthread, threads, executors?
Та блин, мисскликнул. Поставьте человеку плюсик пожалуйста!
Да, два тредпула через Executors: один на кэширование превьюх, другой на запросы. Хотя там в любом случае есть что оптимизировать: на совсем слабых устройствах, подгрузка и разбор сообщений вызывают тормоза в основном потоке, причём тормоза вызывает именно фетчинг результата с сервера, а не разбор JSON (что было бы логично т.к там жсоны по 50-60кб приходят).
В основном потоке по сути только notifyDataSetChange вызывается и разбирается уже распарсенный датасет (пока еще не профайлил, но явно это не узкое горлышко).
Handler'ы юзаются как таймеры для обновления диалогов/сообщений.
Мне кажется что очередь в handlerthread была бы полегче и все там парсить - json, что там ещё приходит.
Плюс там же можно результат для адаптера посчитать. А то вы его перерисовывает весь, не думаю что ему это нравится сильно.
Там обычный BaseAdapter, если вопрос касается отрисовки - то обновляются же только видимые в данный момент вьюшки. Реюзабельность вьюшек там есть - с этим проблем нет, но есть небольшие глюки с кэшированием картинок. Пофикшу попозже.
Там впринципе можно было и просто заменить тредпул на SingleThreadExecutor (который тоже умеет ставить таски в очередь). JSON, к сожалению, нельзя парсить в несколько проходов :( Однако у меня все равно ощущение, что основной боттлнек именно работа с сетью.
Json на таких объемах должен парситься мгновенно, а вот оверхед и задержка на сети будет значительной, особенно если сокеты синхронные.
Это все же больше от парсера зависит. Я юзаю org.json, т.е стандартную реализацию.
Я чутка потестил, всё таки именно сеть даёт подтормаживания и не на каждом девайсе) Надо будет закостылить свой хттп клиент и померить, авось проблема именно в нем
К слову, это достаточно просто оценивается. Даже если медленное процессорное ядро и не самая оптимальная реализация, парсер json все равно линейный, с небольшой константой. Реалистично, даже в худшем случаи там будет 10 такт на байт входного текста, то есть для 50К, это максимум 0.5 M тактов. Даже если промахнуться на порядок, все равно ни о чем.
У Android ещё есть приколы: более-менее отрисовку UI подтянули только к четверке, на 2'ках она еще была местами тормозной. И я удивился, что нельзя просто склонировать произвольный View: нужно обязательно вызывать LayoutInflater и заново заставлять всю систему фетчить ресурс, парсить бинарный xml, задавать атрибуты и.т.п. Можно же было сделать условный LayoutPrefab, который бы просто создавал уже готовые вьюшки?
Вот чем больше я знакомлюсь с системой вью, тем больше убеждаюсь насколько она все же грамотно была сделана, layout inflater - это и есть ваш prefab, который создаёт вьюшки. Если не нужен префаб, всегда есть конструктор только с контекстом. Для него есть даже asynkinflater - но сам я его ни разу не щупал.
А склонировать да, нельзя, в классе вью очень много разных параметров, иногда не всегда понятных, копировать такой объект будет не самой лёгкой операцией. А так все null инициализируется по умолчанию.
Я не совсем про это. Каждый вызов layoutinflater'а (по крайней мере на старых андроидах) грузил ресурс и парсил layout заново, что создавало неприятный оверхед. Но возможно сейчас под капотом все автоматом кэшируется, поэтому костыли с инфлейтером не нужны.
В любом случае вы большой молодец, работа на старых версиях без appcompat это то ещё удовольствие. С другой стороны гайки тогда не были так сильно закручены в плане разрешения, фоновой работы и прочих разрешений :)
Да, у меня активити без проблем может гонять музыку в фоне без отдельного сервиса) собственно, именно так это сейчас и реализовано.
Самым веселым показались нотификации - фабрики то тут нет, есть только парочку вспомогательный методов) Ну и само собой, нет возможности сделать кликабельные кастомные вьюшки (можно их просто поставить туда, без взаимодействия), а значит нет "быстрого" ответа например)
Автор молодец однозначно!
Лежит дома планшет (кажется Huawei) с великолепным IPS экраном 10", но увы, на Андроид 4.2 невозможно найти ни Ютуб клиента, ни навигатор, ни клиента в покер онлайн поиграть...
Хорошо хоть читалку книг удалось найти по форумам...
Блин, вот для классики WinCE и WM 5/6 бы такое еще))
Для вм активно ношу идею, т.к у меня несколько кверти девайсов на нем, а ещё у WM очень привычное мне окружение в виде винапи и возможности писать на C# + обычном "десктопном" WinForms.
TyTN II, X7500, 9100

Ох, титан, как же я хотел этот кайзер)) Но откуда у студентолуса на него деньги было найти?)) Был только б/ушный купленный на Юноне в Питере р4350 геральд, но и тот я с удовольствием использовал) позднее прикупил на том же рынке Eten m700) Но кверти девайсы мне в итоге тогда полюбились, очень удобно было в аське и чатах висеть, в то время как многие тогда мучались с обычными кнопочниками)
Не, это не кайзер, это афина x7500 :) Кайзер - это TyTN II (слайдер с кверти).
x7500 очень дорогой девайс был: цена варьировалась до 1.5к$-2к$. Но там и фишек куча: здоровый дисплей высокого по тем временам разрешения (VGA), поддержка minisd флэшек вкупе с встроенной NAND и MicroDrive жестким диском (!), клава была из настоящей кожи, флагманский ЦПУ по тем временам, куча ОЗУ, 3D ускоритель)
Не, я ж про титан из списка, а не на фото)))
А 7500 даже не видел ни разу) Роллс-Ройс от мира наладонников)) Ускоритель часом не какой-нибудь ati imageon))
З.ы. а, не, поглядел обзор - видел его, я студентом часто бродил по магазину Кей на Техноложке в Питере, он рядом с вузом был. Засматривался на этот ээм.... Ну типа UMPC, но до полноценного он не дотягивал - в соседнем отделе стоял соньковский UMPC на базе ХР)) Вот это был вообще топ)
Про винду было бы интересно почитать) подпишусь.
У меня на полке лежит Samsung WiTu i900, полным комплектом, недавно стряхивал с него пыль - живее всех живых)
А что нить такое но с телегой сможешь провернуть? =)
Самое проблемное для андроидов приложение - это вацап. Многие смартфоны были брошены валяться под диван, что на них перетсал работать вацап.
Просто вацап такое злое приложение, что не может работать кроссплатформенно если нет основного установленного на смартфоне и привязанного к номеру телефона.
Можно ли на старые версии Андроида сделать хоть какое то подобие вацапа, чтобы хотя бы с помощью него акитвировать вацап на компе (ну там типа привязка).
К сожалению, нет :( Публичного API то нема((
А можно на старом Андроиде эмулировать более современный? Ам ожет вообще самый лучший вариант как то урезать современный Андроиды чтобы из можно было установить на старые сматрфоны
Ну, формально "эмуляцией" нового андроида занимается AppCompat. Только он не эмулирует в привычном смысле, а ещё раз реализует компоненты, доступные в более свежих андроидах, на более старых. Но чтобы его юзать, нужно пересобирать приложеие.
Урезанные андроиды юзаются во всю - см. кнопочники на Android 4.4
В Face... простите, Meta, сидят нехорошие дяди и хорошие юристы, силами которых на github массово удаляли репозитории, где их API реверсили (ибо открытого нет, как уже раньше писали). Более того, за сторонние/модифицированные официальные клиенты (например, с 4pda) меня банили на несколько дней. Так я на своём Passport и не смог заставить Whatsapp работать.
Эхх... А я сижу на старом iPhone4. С ним такое не прокатит.
Прокати, там можно дебажить приложения с джейлбрейком и старым xcode, но сорян, я objective-c не перевариваю(
Если кто-то могёт objc и хочет реализовать клиент - пишите в ЛС, предоставлю доки к прокси-серверу) Там датасеты в очень простом формате)
У меня на работе лежит iPad 3, из офф. маркета ничего не устанавливается. Пара-тройка игрушек, читалка книг и клиент для di.fm.
И всё! Некогда хороший планшет превращается в тыкву, и safari с трудом переваривает те сайты, на которых он когда-то летал.
Н-да, телега еще не так давно на iOS 9 работала, а сейчас уже нет.
У меня тоже iPad 3, я его приспособил как дополнительный монитор к компу - приложение Duet Display понравилось больше всего, пробовал еще spacedesk, но он сильно тормозил.
Хмм... У меня на iOS 7.1 стоит Телеграм 4.9.2 и продолжает работать. Но естественно не всё поддерживает. Всплывает "Unsupported User" для контактов зарегистрированных недавно. В каналах иногда встречаются "Not compatible message type". Звонки тоже не работают. Но пользоваться вполне можно)
Надо будет посмотреть. У меня Telegram 8.9.1, выдаёт ошибку, outdated app при попытке залогиниться - из аккаунта разлогинило, не пользовался телегой на айпаде наверно год или два.
Телеграм ввёл 64х битные ID в позапрошлом году, от того и Unsupported :)
Меня больше всего напрягает то, каким неповоротливым стал планшет.
А ведь когда-то играл на нем в довольно динамичные игры.
Моноблочные кнопочные Самсунги - огонь!
Есть две итерации, у первой аж кнопки стëрлись, а вторая супер, недавно загружал.
Кста и первая тоже работает)
На самом деле даже для сборки под Android 1.0 не нужна такая древность, как Eclipse ADT, достаточно взять старый Android Studio.
Я под свой HTC Dream (прошит под ADP1 на Android 1.5) собираю в Android Studio 2.3.2 (самая ранняя, доступная на оф. сайте). Но там кажется проект под SDK 1 не создается, создавал я на Android Studio 1.0.1. Но возможно и в 2.3.2 получится, я не помню уже точно :)
Я бы с радостью пользовался дальше Е72, там и телеграм через МТПрото работал,и ютуб скачивался и сеть хорошо работало. НО! давно не обновляющаяся putty не позволяет больше пользоваться ssh и это провал(
Отличная работа!
*пошёл доставать из ящика свой Blackberry*
Поэтому придётся идти на хаки — делать сервер-реле, который преобразует трафик из https в http там, где нельзя просто отключить проверку верификации SSL
Вот это смутило — неужели нельзя нужные сертификаты притащить с приложением или зашить в систему? Сторонний прокси сервер — как-то оверкилл для запуска приложения на древнем смартфоне.
А вообще, неужели такая пробщема обновить сертификаты? ИМХО древние девайсы имеют право на жизнь, но не вижу смысла цепляться за древние версии ОС в исходном состоянии.
Увы, но да, проблема. Тут еще суть в том, что старые устройства не умеют TLS 1.3, на котором работают современные сайты. Из-за этого даже если подсунуть свежие сертификаты, мы получаем ошибку при handshake (т.е установке соединения).
Что касается хранилища сертификатов - то тут по разному. Корневые сертификаты в 1.5-2.3 хранятся в виде блоба в системном разделе. Просто так не обновить, как минимум без root прав.
А почему прокси оверкилл? 170 рублей в месяц не обременяют меня) Плюс, прокси отдает данные в очень простом и удобноваримом формате, благодаря которому я уже запилил основу клиента ВК под WinMobile и J2ME - не нужно замарачиваться с парсингом тяжелого JSON, нужно запилить лишь "морду" приложения)
Ну root получить несложно. А можно ли теоретически собрать под старый телефон кастомную сборку Android, где TLS 1.3 все таки будет работать?
Вы хотели сказать TLS 1.2? Сайтов/приложений, которые требуют исключительно TLS 1.3, пока очень и очень мало. Если исключить очень уж узкоспециализириванные сайты, то, наверное, практически нет.
Другое дело, что действительно новые сертификаты не решают проблему TLS 1.2 да и не все новые сертификаты можно установить на старые системы (по различным причинам).
Не совсем. TLS 1.2 точно должен уметь Android 2.2, 2008 год же.
Нет. Полностью TLS 1.2 поддерживается начиная с Андроид 5.
На Андроид 4.4 - как повезет (зависит от телефона). Многие приложения типа Google Chrome или Gmail сами поддерживают TLS 1.2
На Андроид 4.1 - 4.3 - не поддерживается, но некоторые приложения могут поддерживать
На Андроид 2.х и 4.0 - не поддерживается
Для проверки зайти с родного браузера "Internet" (не Google Chrome) на https://kp.ru or https://wikipedia.org or https://nypost.com. Эти сайты поддерживают только TLS 1.2 и, возможно, TLS 1.3, но не поддерживают TLS 1.1 и ниже.
основное процессорное время уходит на разбор тяжелых JSON
У VK API есть хранимые процедуры. Можно взять нужный метод, который возвращает портянку и прям на сервере VK обработать его и вернуть нужные поля.
Автору - большое спасибо за проделанную работу.
Теперь комментарии:
1. Прокси сервер не нужен для работы приложения (за исключением музыки) на Android 4.1-Android 4.4. Эти версии поддерживают TLS 1.0/1.1 и сервера ВК тоже поддерживают (пока) TLS 1.0/1.1. Когда ВК перейдет на TLS 1.2, то без прокси будет действительно тяжело.
2. На телефонах под Андроид 4.1-4.4 железа должно хватить для обработки запросов без модификации на сервере. Его хватало для обработки REST API ВК на Симбиан 9.3 / J2Me и новее, под Андроид 4.1 и новее точно хватит. Старые Андроиды выпуска 2012-2014 годов, конечно тормозят, но не думаю, что тормозят сильнее какой-нибудь кнопочной (и некнопочной) Нокии 2009 года.
3. Поддержка 2FA критически необходима. Без нее - пользоваться приложением "стремно".
4. Похожее приложение было разработано в 2018-2020 годах для Симбиан. Одна из проблем - прокси-сервер часто взламывали просто из вредности или по другим причинам. Это реальная проблема, т.к. надо выделять ресурсы на защиту сервера.
Плюс угроза хака сервера и размещения на нем незаконного контента и посадки в тюрьму (или, как минимум, в КПЗ). В 2018 году была уже история для альтернативного клиента ВК, (разработчик оказался в КПЗ, чем закончилась - не знаю). По крайней мере, сервер надо вывести из российской юрисдикции (т.е. его официальный владелец должен быть не в РФ) .
По-возможности, нужно убирать сервер за исключением запросов к музыке и, возможно, поддержки телефонов на 2.х-4.0 (они реально могут не потянуть эти запросы). Хотя и здесь не факт, что не потянут. Надо проверить будет, вполне возможно, что 2.х тоже потянет, а TLS 1.0 на нем уже есть. Насчет Андроид 1.5 - не знаю.
5. Вторая большая проблема вашего промежуточного сервера - его могут взломать, перехватить трафик и, теоретически, хануть аккаунты пользователей вашего приложения или как минимум прочитать переписку. Опять-таки, этот этап уже проходили с приложением ВК на Симбиане.
Исходя из всего этого, лучше отказаться от промежуточного сервера для Андроид 4.1 (а может и 4.0) - 4.4 и перенаправлять трафик через сервер только в случае запросов на музыку или для телефонов на Андроид 1.5-2.х-4.0 (или только 1.5-2.х, если 4.0 будет тянуть парсинг ответов ВК, или даже только 1.5).
Это нужно, чтобы минимизировать риски. Сервер - слабое звено, как показывает опыт. В случае сбоя / хака сервера основной функционал будет работать как минимум для Андроид 4.1-4.4.
Вот: Федор Богатов, создатель клиента Kate Mobile
https://habr.com/ru/articles/439112/
Три месяца - в СИЗО
Потом - с весны 2019 года - под домашним арестом
Летом 2020 года с него сняты все обвинения.
Поэтому, прокси/промежуточный сервер - это опасно и ненадежно. Как вариант - выложить исходники сервера в открытый доступ и пусть каждый поднимает его сам для музыки или для очень старых телефонов (1.5 - 2.х).
Ну я ж не дурак) У меня на сервере стоят последние версии ПО, все порты кроме пинга, 80 и SSH закрыты, пароли сложные. Касательно неправомерных целей - я ж не просто так написал не прокси, а реле/мост. т.е все данные на серверсайде обрабатываются и выдаются в нужном формате, который если будет меняться, то только в сторону дополнения (не ломая старые версии приложений). Насчет plain/text я знаю, скоро будет нормальное шифрование) да, рукопожатие пока ещё публичное, но сервер будет выделять сессию клиенту и в последующем только они будут знать о связке ключей.
Я самопальный формат делал не по приколу. Сейчас я занимаюсь реализацией "морды" клиента под WinMobile (который для коммуникаторов еще), а в .net cf тащить жсон не хочется, как и в j2me. Самопальный формат датасетов очень легко парсить, это может вдохновить и владельцев условного palm pre реализовать свой клиент)
На всякий случай, если нет времени разрабатывать: я использую iphone 5s 2013 года и SE 2016 года и вполне все работает за какими-то исключениями. VK приложений нет по известным соображениям. Игрушек нет. Полагаю, что с Android будет похожая ситуация.
Отдаю дань уважения людям, которые понимают, что гаджеты могут работать гораздо дольше, чем нам рассказывает маркетинг. И это не "вторая" жизнь, а нормальное использование. Не нужно мобильному браузеру 4 гигабайта памяти, чтобы открыть страницу в интернете.
Ууууу, хотел похвастаться что я до сих пор поддерживаю в своих пет-проджектах API начиная с 15 (Jelly Bean), но понял что до такого даже мне далеко, ибо и 15-то уже все сложнее и сложнее легаси тащить в 23 году чтобы ничего не сломать в обратной совместимости, поэтому и на куче устройств приходится эмулировать (благо Google поддерживает все образы начиная с Эклера (вообще-то с Cupcake и даже вроде и ниже, но пока запустить их у себя не удалось, наверное нужен эмулятор или Студия старее)), а тут вообще 2.0, даже я снимаю шляпу) Единственное что так как моим первым Андроидом был Леденец (5.0, следующий за легендарным Киткатом) - то это уже был Material Design, они как раз его тогда и презентовали, я его тогда настолько оценил, что стал создавать приложения полностью на нем, потому-что они до сих пор выглядят современно, и я действительно благодарен Гуглу за него, ибо это шикарный дизайн из коробки, выглядящий современно и действительно красиво, иначе пришлось бы иметь дизайнера тем, кто в дизайн не умеет (на работе да, прям дизайнер (и да, я связал с Андроидом всю мою жизнь)), либо использовать старый без AppCompat, но он уже к сожалению выглядит архаично во всех отношениях и подойдет разве что для ретро-маньяков как мы, а прилы все-таки делаются больше для юзеров, поэтому Material Design это просто шикарный компромисс. Но это конечно больше ретро-футуризм когда современно выглядящие приложения отлично работают даже на Киткате.
У вас видимо студия более старая? На последней образы <4.0 не запускаются :(
MD выглядит не очень на 2.3, поэтому я делаю спартанский юи))
Извиняюсь за задержку с ответом, нужно было поиграться с эмуляторами, а это время, я просто предпочитаю делать это без спешки и не между дел.
Иногда стоит остановиться и поразмышлять зачем я поддерживаю API 15 в 23 году, но я неспроста называю это именно ретрофутуризмом, так как ваша цель - это чтобы прилы работали на максимально старых девайсах, а у меня чтобы новые прилы работали на максимально старых девайсах, и на Киткате, и на последних недавно вышедших, но если вы можете писать с нуля, то я это могу исключительно благодаря тому что писать начал еще во времена Marshmallow (причем удивительно то, что я как вчера помню как доставал его из коробки и испытывал благоговение оттого что держу в руках самый последний на тот момент Андроид, а тогда было прям стандарт де факто писать и под старые девайсы, ибо до него был Киткат, и даже с того момента изменилось многое, вот и нанизываю в своем фреймворке начиная с Jelly Bean и до наших дней, а с нуля нет, в 23 году о старых девайсах можно забыть, увы. Не, забыть-то не обязательно, AppCompat в помощь, просто это нужно столько свободного времени и желания иметь, что мало кто может. Поэтому да, мы с вами оба маньяки, просто подходы у нас разные, и это на самом деле интересно осознавать такую разницу в подходах даже казалось бы в одной узкой нише)
P. S. И да, что касается эмуляторов - и правда ниже 4.0 не стартанули (но мне главное чтобы 4.3 стартовал, поэтому чтобы не забивать место на диске, я держу его, Киткат (больше даже как дань ему) и один из последних, где-то за 2-3 версии до последней обычно держу, прям совсем топовые не обязательны если после очередного I/O они опять ничего не выкинут). Но там важен размер экрана как оказалось, ибо на Пикселях он просто бесконечно стартует, а на 320x240 прям падает с исключением, можно даже там Гуглу написать типа что я делал перед тем как это произошло, но я написал пользуясь случаем коли поймал, что мол так и так, ретро-хобби, хотел бы поиграться, ибо подумают типа а зачем мне 2.3 в 23 году.
Ууууу, хотел похвастаться что я до сих пор поддерживаю в своих пет-проджектах API начиная с 15 (Jelly Bean), но понял что до такого даже мне далеко,
MD выглядит не очень на 2.3, поэтому я делаю спартанский юи))
Справедливости ради, версии 1.х и 2.х - мертвы. Можно, конечно, запyстить MiniVK и еще несколько приложений (я смог найти один единственный Jabber клиент, например плюс email по IMAP/SMTP), но по факту они практически нерабочие.
Я не уверен, что есть смысл тратить ресурсы на их поддержку.
Конечно есть! Ведь об этом весь мой блог :) Мне от смартфона нужно несколько вещей: качественный звук, годный плеер, нормальная синхронизация с IMAP/SMTP, клиенты ВК и иногда ютубчик. Все это на 2.2 есть: звук у старых флагманов довольно годный, гугловский почтовый клиент (почта, не gmail который) работает без упреков и сейчас (нужно выставлять обязательный TLS), веб - Opera Mini, ВК собсна тоже теперь есть :)
Дело не в том что это никому не надо, а в хобби, некоторые и монетки собирают, хотя казалось бы зачем это кому-то нужно если они продаются килограммами (в прямом смысле) прямо на Алиэкспрессе. Понятно что в большинстве своем это чисто поиграться на вечер, но лично у меня аж в животике щекочет когда достаю что-то старое чем я пользовался лет 10 назад и которое можно до сих пор поюзать.
Мне от смартфона нужно несколько вещей: качественный звук, годный плеер, нормальная синхронизация с IMAP/SMTP, клиенты ВК и иногда ютубчик.
Ну, таким минималистическим требованиям практически любой смартфон на Андроид 2.х будет соответствовать. Но если что-то большее, то всё.
гугловский почтовый клиент (почта, не gmail который) работает без упреков и сейчас (нужно выставлять обязательный TLS)
Не совсем без упреков: контакты и календарь не синхронизируются. Правда, для Google Contacts/Google Calendar я нашел рабочий СardDAV/CalDAV клиент для Андроид 2.2
miniOpera позволяет сохранять видео с Youtube и Facebook.
Хорошее дело делаете, ваш "голый энтузиазм " поражает, зная что это представляет интерес для очень ограниченных и локализованных групп; наконец то появилась перспектива достать с полки WM девайсы и сдуть с них пыль...снимаю шляпу
Сам себе экосистема: Как я адаптировал старый смартфон под современные реалии и написал клиенты нужных мне сервисов