Про те як я написав блокувальник реклами та трекерів для смартфонів Samsung на Android. Adhell

Уявляю спільноті проект, яким займався останнім часом: блокувальник реклами та трекерів для смартфонів Samsung на Android з відкритим вихідним кодом.

Реклама блокується на рівні пристрою, тобто не тільки в стандартному браузері, але і у всіх інших додатках (наприклад, в Chrome і YouTube).

Передісторія
Я користуюся блокувальниками на всіх своїх комп'ютерах, але все частіше заходжу в інтернет зі смартфона.
Мені подобається мобільний Chrome більше ніж Safari або Opera, але в Chrome немає підтримки розширень, а присутність реклами на смартфоні критичніше ніж на десктопі, так як часто обмежений трафік і дисплей в кілька разів менше.
Плюс мені подобається іноді дивитися відео на YouTube, але реклама, яку не можна пропустити здорово заважає процесу.
Виходячи з таких передумов я зайнявся пошуком рішення блокування реклами на смартфоні.


Приклад роботи програми на Samsung Galaxy Tab 4 10.1. m.habr.ru

Готових рішень з блокування реклами досить багато, але, на жаль, всі вони мають хоча б один великий недолік:
  1. Браузери з підтримкою розширення для блокування (Mozilla, Opera).
  2. Браузери з вбудованою блокування реклами (від Ghostery, від AdBlockPlus).
  3. Блокувальники реклами для стандартного браузера Samsung.
  4. Блокувальники на базі VPN.
  5. Підлозі-працюючі рішення (https://adblockplus.org/android-about).
  6. Блокувальники працюють на базі root.
Перші три варіанти блокують тільки в браузері. Я пробував користуватися ними, але Chrome мені подобається більше навіть з рекламою. Четвертий варіант хороший, але не стабільний. П'ятий не фільтрує мобільні дані.
Шостий самий ідеальний варіант, якщо у вас є root або ви не проти його отримати.

У кожному з варіантів доводиться чимось жертвувати, тому я почав думати, чи можу зробити що-небудь сам. Рішення на той момент не знайшов і минуло багато часу, поки не натрапив на платформу від Samsung.

Samsung Knox Standard SDK
Knox це рішення розроблене Samsung. Під брендом Knox існують багато продуктів, але зупинюся на одному, який я використовував.

Knox Standard SDK це безкоштовна бібліотека, яка працює майже на всіх Android смартфонах Samsung і володіє багатим API (близько 1100 методів). Якби мене попросили описати Knox Standard SDK в двох словах, то я б сказав, що це легальний майже root.

Загалом, дуже корисна штука, яка дозволяє робити багато цікавих речей. Наприклад, повноцінно заблокувати пристрій на один додаток, тихо включати GPS і заборонити його вимикання, тихо включати Wi-Fi/Bluetooth, тихо встановлювати/видаляти системні програми, тихо включати/виключати будь-які додатки, заборонити зміну налаштувань, заборонити вимикання пристрою і багато чого іншого.

Ось посилання на офіційний сайт, там є приклади, гайди та API Reference.

Невідомість рішення в широких колах, я для себе пояснюю тим, що воно створювалося для Enterprise + на мій погляд, недостатній маркетинг Samsung.

Ідея
Переглядаючи документацію я зрозумів, що з допомогою API можна домогтися блокування реклами на рівні пристрої (ніби є root доступ як у 6 пункті вище), а не на рівні додатків. Але блокувальник підійде тільки власникам смартфонів Samsung. Я вирішив, що краще повне рішення на одному пристрої, ніж половинчасте на всіх. І почав розробку.

Отримання ключа
Щоб почати використовувати API потрібно зареєструватися на сайті seap.samsung.com і згенерувати безкоштовний девелоперський ключ, з допомогою якого на пристрої активується робота бібліотеки. Коли проект завершено, потрібно отримати продакшн ключ.
Девелоперський ключ працює три місяці, по закінченню терміну можна згенерувати новий. Продакшн ключ безстроковий, його потрібно прив'язати до імені пакета і ключа, яким підписується додаток В цьому випадку тільки вашу програму зможе використовувати отриманий ключ.

Використання API
Далі потрібно імпортувати три .jar які викачуються після реєстрації, в Gradle їх немає, тому доведеться копіювати вручну.
Не буду тут докладно описувати код: ви можете подивитися його на GitHub і там все досить просто зроблено. Зупинюся лише на деяких особливостях.

1. Для роботи Knox Standard SDK потрібно попросити користувача ввести програму у режим адміністратора, потім активувати отриманий ключ і погодитися у спливаючому вікні.

2. Виявилося, що на різних версіях Android від Samsung встановлені різні версії Knox Standard SDK і оновлюються вони тільки з оновленням прошивки.
Тому потрібно було підтримувати різні версії, ніж загалом-то я досяг успіху і зараз блокувальник працює (сподіваюся, що) на всіх пристроях починаючи з версії 2.0. Версію SDK можна подивитися в інформації про пристрої у налаштуваннях телефону.

Я буду вдячний, якщо в разі проблем з додатком, ви напишіть у коментарях або відкриєте issue на GitHub.

А що блокувати?
У першій версії я заходив на популярні сайти з мого списку Feedly і виловлював рекламних провайдерів вручну, у сумі вийшло близько 200 доменів і все працювало, але часто реклама просочувалася.
Після того як я опублікував додаток в Google Play, мені на пошту надіслали лист зі списком рекламних провайдерів:
  1. adaway.org/hosts.txt
  2. pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=0&mimetype=plaintext
  3. hosts-file.net/ad_servers.txt

Зазначу, що поки в проекті використовуються перші два посилання, що в сумі ~2600 посилань і цього вистачає, щоб не бачити рекламу на 95% сайтів.
Версія Knox Standard SDK 5.6 всі 2600 посилань блокуються нормально.
Але на більш старих 2600 посилань смартфон приймати відмовляється, стабільно блокується лише 1500.

І ось виникає задачка, які 1500 з 2600 посилань вибрати? Як відсортувати список за популярністю? Я почав думати і гуглити.
Досить швидко знайшов, що Alexa Rank віддає файлом .csv 1 млн найбільш відвідуваних доменів в світі за останній місяць у порядку популярності. Я припустив, що якщо домен міститься в цьому списку і одночасно домен (або його піддомен) міститься в списку провайдерів реклами, то значить провайдер реклами популярний і часто зустрічається на різних сайтах.
За допомогою даної гіпотези вийшло відсортувати список з 2700 посилань. Ті, домени, які не зустрічалися в списку 1М я додавав в кінець.
У підсумку, тих що зустрічаються списку вийшло ~1300, що цілком підходить під наші обмеження.

Насправді, я пробував провернути теж саме не тільки з двома, але і з трьома списками провайдерів реклами, що на виході дає більше 10 тисяч посилань, і швидка прокрутка списку показує, що там багато не релеватных сайтів (наприклад, индиийских або китайських). Тому поки було вирішено залишити перші два провайдера.

Хотілося б в майбутньому зробити можливість блокувати рекламних провайдерів за мовам (як це робиться в розширенні AdBlockPlus, наприклад).

Перший млинець грудкою
Десь у березні, я за тиждень зробив прототип, майже вручну зібрав провайдерів реклами (на той момент близько 200). Просто заходив на сайти, на які зазвичай ходжу і виловлював рекламні посилання. Потестил трохи, виклав в Google Play, написав на 4pda.ru і почав розповідати про нього всім знайомим.

Через два тижні було близько 300 скачувань і 60 активних (в той момент підтримувався тільки Marshmallow). Приблизно в той же час мені прислали посилання з провайдерами реклами і я на радощах оновив додаток.

А вранці прийшов лист від Google, що додаток заблоковано. Мабуть не треба було писати в оновленні великими літерами: «Блокувальник реклами та трекерів. Блокує не тільки в стандартному браузері, а у всіх програмах». Якщо перефразувати з гумором, то в листі від Google було сказано: «Ти хороший розробник, але ставиш весь наш бізнес під загрозу, тому ми випиляли твоє додаток.» Ось так і почалася ця історія.

Щоб проект не залежав від Google Play і при цьому вижив, вирішив зробити сайт де можна скачати програму безпосередньо), зробити проект відкритим і написати про це на Хабр.

Що в підсумку?
В результаті отримали мобільний інтернет без реклами, прискорену завантаження сторінок і бонусом економію трафіку.

Я користуюся двома смартфонами Galaxy S7 і OnePlus 2 і повертаючись в Chrome або YouTube на OnePlus дивуюся як, виявляється, заважає і багато місця займає реклама на мобільному дисплеї.

Ось кілька прикладів з працюючим блокувальником і без нього. Тест проводився на одинковых смартфонах з вимкненим і включеним блокувальником. Я тільки втовкмачував домен в браузер і чекав поки завантажиться сторінка.


habr.ru


theverge.com


adme.ru


rbc.ru

Висновок
Великим плюсом рішення є простота та зручність для користувача, але і мінусом — платформозависимость.

Подяки
За те, що поділилися посиланнями на провайдерів реклами, висловлюю подяку В'ячеславу Рудковскому (не знаю його нік на Хабре).

За підготовку сайту велике спасибі yelnar.

Проект на GitHub
Створив організацію https://github.com/adhell, в ній міститься три репозиторію.
Сам додаток під Android https://github.com/adhell/android
Сортувальник рекламних посилань по популярності https://github.com/adhell/adprovider
Сайт https://github.com/adhell/adhell.github.io

Посилання на сайт проекту: getadhell.com
Посилання на Google Play (до тих пір поки не заблокують)
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.