Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Погрузитесь в логическую головоломку: откручивайте болты из планок на самых сложных уровнях! Вы не только расслабитесь в конце сложного дня, но еще и натренируете свой мозг, решая увлекательные задачки. Справитесь с ролью опытного мастера? Попробуйте свои силы в режиме онлайн бесплатно и без регистрации!

Головоломка. Болты и Гайки

Казуальные, Гиперказуальные, Головоломки

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Android + Программирование

С этим тегом используют

Игры Смартфон Приложение iOS Телефон Google Play iPhone IT Программист IT юмор Разработка Python Картинка с текстом Юмор Все
379 постов сначала свежее
15
antson
antson
11 месяцев назад

Ответ на пост «10 полезных инструментов для программирования на Android»⁠⁠1

смешались в кучу кони люди

-------------

Среда разработки. Окей! А как без нее ? Писать в блокноте и собирать готовый проект из командной строки ?

О облачные сервисы. Вот прям сразу каждый должен туда сунутся, а то как же пользователи без пушей о очередном рекламном ивенте останутся.

Гит ? А может системы контроля версий ? Ну это под любой стек.

Тоже про оверфлоу. Но самые трудно уловимые ошибки будут в скопированных с него строчках.

В принципе на начальном этапе про то, что под сборкой в студии прячется градле Вы и не заметите.

Три популярных библиотеки.

И не фига не понял зачем в списке бустер ? Запускать его после зависов приложения ?

Android Android разработка Разработка Программирование Текст Ответ на пост
2
108
pikabu.education
pikabu.education
11 месяцев назад
Серия Программирование

10 полезных инструментов для программирования на Android⁠⁠1

В этой подборке мы собрали 10 ключевых инструментов, которые помогут создать качественные приложения и улучшить навыки в области Android-разработки.

Android Studio
Это интегрированная среда разработки (IDE), специально созданная для Android. В Android Studio вы можете писать код, используя редактор с поддержкой подсветки синтаксиса и автодополнением, запускать эмуляторы для тестирования приложений на виртуальных устройствах, профилировать производительность вашего приложения, а также использовать встроенные инструменты для отладки и анализа кода.

Firebase
Это платформа от Google с множеством сервисов для создания и управления мобильными и веб-приложениями. Firebase позволяет хранить данные в облаке, аутентифицировать пользователей, отправлять push-уведомления, анализировать поведение пользователей и выполнять другие задачи без необходимости настраивать собственные серверы.

Git и GitHub
Git — это система контроля версий, которая отслеживает изменения в коде, позволяя вам вернуться к предыдущим версиям и работать над проектом совместно с другими разработчиками.
GitHub — это веб-сервис, где вы можете размещать свои репозитории Git, управлять версиями кода, создавать pull requests для обсуждения изменений и сотрудничества, а также использовать инструменты для управления проектами.

Stack Overflow
Крупнейшее сообщество разработчиков, где можно получить ответы на практически любые вопросы, связанные с программированием. Stack Overflow позволяет искать решения распространенных проблем, просматривать код примеров и получать советы от опытных разработчиков.

Gradle
Система для управления зависимостями и процессом сборки приложений. Gradle позволяет автоматизировать и оптимизировать сборку проектов, обеспечивая гибкость и масштабируемость.

Retrofit
Библиотека для создания HTTP-запросов и взаимодействия с RESTful API. Retrofit упрощает сетевые операции, делая их более эффективными и удобными для разработчика.

Memory Booster
Инструмент для оптимизации производительности Android-приложений, он помогает ускорить запуск приложения и сделать его работу плавнее на разных устройствах, оптимизируя код и сокращая размер файлов.

Glide
Библиотека для загрузки, отображения и кеширования изображений в Android-приложениях. Glide обеспечивает быструю и эффективную работу с изображениями, минимизируя использование памяти и сетевого трафика.

Picasso
Библиотека для загрузки и отображения изображений в приложениях. Она легко интегрируется, автоматически управляет кешированием и обрабатывает ошибки.

Показать полностью
Android Android разработка Разработка Программирование Текст
54
pikabu.education
pikabu.education
11 месяцев назад
Серия Программирование

Курсы по android-разработке⁠⁠

В этой подборке мы собрали курсы, которые охватывают все ключевые аспекты разработки приложений на языке Kotlin, от основ программирования и работы в Android Studio до продвинутых тем.
Мы анализируем плюсы и минусы каждого курса, опираясь на мнение пользователей как на нашей платформе, так и на других ресурсах. Изучите реальные отзывы студентов и найдите подходящий для вас курс на платформе Pikabu Курсы.

  • Курс «Профессия Android-разработчик» от Skillbox

  • Курс «Профессия Android-разработчик» от Skillfactory

  • Курс «Android Developer. Basic» от Otus

Курсы по android-разработке Обучение, Программирование, Учеба, Android, Длиннопост

Обзор курсов

1. Курс «Профессия Android-разработчик» от Skillbox
На курсе вы освоите базовые и продвинутые концепции языка Kotlin, работу в Android Studio, проектирование экранов, публикацию приложений в Google Play, использование Android SDK для создания динамичных приложений, анимаций и кастомных экранов.

Курсы по android-разработке Обучение, Программирование, Учеба, Android, Длиннопост

Цена: 270 120 ₽
Цена со скидкой: 153 068 ₽
Длительность: 7 месяцев.
Документ об окончании: сертификат установленного образца.

Плюсы:

  • практическая направленность;

  • гарантия трудоустройства;

  • доступ к курсу и обновлениям навсегда;

  • курс создан совместно с компанией по разработке ПО Arcadia;

  • год изучения английского языка в подарок;

  • дополнительные курсы;

  • налоговый вычет;

  • нашли положительный отзыв о работе проверяющего преподавателя.

Минусы:

  • ограниченное количество мест на потоке;

  • высокая цена.

Посмотреть программу курса >>>

2. Курс «Профессия Android-разработчик» от Skillfactory
На этом курсе вы научитесь программировать на Java и Kotlin, использовать Android Studio, работать с системой контроля версий Git, проектировать мобильные приложения с учетом архитектуры.

Курсы по android-разработке Обучение, Программирование, Учеба, Android, Длиннопост

Цена: зависит от тарифа.
Длительность: 16 месяцев.
Документ об окончании: сертификат.

Плюсы:

  • гарантия трудоустройства;

  • структурированный учебный план;

  • практическая направленность;

  • интенсивная программа (плюс или минус в зависимости от ваших целей);

  • доступ к курсу навсегда.

Минусы:

  • интенсивная программа (плюс или минус в зависимости от ваших целей);

  • нашли отзывы с жалобами на ответы наставника.

Посмотреть программу курса >>>

3. Курс «Android Developer. Basic» от Otus
На этом курсе вы освоите все ключевые аспекты разработки Android-приложений на языке Kotlin, включая создание интерфейсов, работу с данными и сетью, тестирование и публикацию приложений.

Курсы по android-разработке Обучение, Программирование, Учеба, Android, Длиннопост

Цена: 71 500 ₽
Цена со скидкой: 64 350 ₽
Длительность: 5 месяцев.
Документ об окончании: сертификат.

Плюсы:

  • помощь с подготовкой к трудоустройству;

  • интенсивная программа (плюс или минус в зависимости от ваших целей);

  • практическая направленность;

  • структурированный учебный план;

  • налоговый вычет.

Минусы:

  • интенсивная программа (плюс или минус в зависимости от ваших целей).

Посмотреть программу курса >>>

Реклама. ЧОУ ЧАСТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ДОПОЛНИТЕЛЬНОГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ ОБРАЗОВАТЕЛЬНЫЕ ТЕХНОЛОГИИ СКИЛБОКС (КОРОБКА НАВЫКОВ), ИНН 9704088880, ООО Скилфэктори, ИНН 9702009530, ООО Отус онлайн-образование, ИНН 9705100963.

Показать полностью 4
Обучение Программирование Учеба Android Длиннопост
62
95
monobogdan
monobogdan
Посты о ремонте и моддинге ретрогаджетов.
TECHNO BROTHER
11 месяцев назад

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024⁠⁠

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост

Друзья! А знаете ли вы, какой Android-смартфон был первым в мире и как он выглядел? А я теперь не просто знаю, но и могу физически пощупать настоящую легенду своих лет — HTC Dream, также известный как T-Mobile G1. Однако G1 был мне интересен не только как коллекционный девайс для гика, но и потенциально-диковинное устройство для разработки приложений: ведь в современном мире принято повышать минимальную версию Android для работы тех или иных программ, а я свои буду… понижать, чтобы они смогли заработать даже на самой первой версии Android! В сегодняшней статье мы с вами: посмотрим на Dream и постараемся понять, почему HTC выбрала именно Android, неудачно перепакуем аккумулятор, бэкпортируем мои клиенты ВК, YouTube и Telegram и посмотрим, правда ли старичок «бесполезен», как говорят в ретро-обзорах или что-то ещё да может! Интересно? Тогда добро пожаловать под кат!

❯ Введение


Как я уже говорил в вводной части статьи, HTC Dream стал первым массовым Android-смартфоном в мире. Конечно, до этого момента в Google были гораздо более ранние прототипы, которые использовались при разработке устройства и что интересно — они тоже были разработаны HTC. Однако тот прототип был совершенно не похож даже на G1: это был QWERTY-моноблок с дисплеем 320x240, где всё управление происходило кнопками, а в качестве основы устройства скорее всего был выбран HTC Cavalier:

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост


И вот, 22 октября 2008 года в свет выходит HTC Dream у американского оператора T-Mobile, который гики сразу смели с виртуальных и физических магазинных полок. Стоит ли говорить о том, что смартфон имел огромный спрос не только на локальном рынке в США, но и за рубежом? Серым импортом даже в СНГ ввозилось довольно немало HTC Dream: правда сейчас их живых осталось не так уж и много :( Кстати, забавно но факт: первые серийные G1 не имели такой открытости и возможности модификации системы, которой гордятся владельцы Android-смартфонов в спорах с владельцами iPhone: даже adb был доступен только на специальной версии G1 — Android Dev Phone 1!

Но почему HTC выбрала именно Android? Чтобы ответить на этот вопрос, нужно вернуться в 2008 год, когда на рынке главенствовала Nokia со своим свежим флагманом 5800 XpressMusic. В те годы, выбор операционных систем для смартфонов был крайне невелик: по сути, производителям были доступны только две системы.

  • Первой была Windows Mobile, которая была хороша во всем: у неё была неплохая архитектура под капотом, настоящая многозадачность и работала она сносно даже на очень слабом железе. Но поскольку это Microsoft, куда же без косяков: система была нестабильной и могла повиснуть в самый неудачный момент (думаю, многие читатели помнят такие сокращения как ХР и ББ), её интерфейс не был анимированным (и не «модным») от слова совсем, а сама система была адаптирована лишь под стилус. Но тем не менее, мобильная винда продержалась на рынке смартфонов до 2010 года, как раз к моменту выхода Windows Phone 7… но это уже совсем другая история.

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост
  • Второй системой была, конечно же, Symbian, которая на первый взгляд была хорошей: довольно удобный и привычный для многих интерфейс, очень хорошая оптимизация для слабых устройств и большая база самых разных приложений. Но её недостатки были гораздо более серьёзные, чем у мобильной винды: система лицензировалась не абы кому, а только участникам Symbian Foundation и её архитектура под капотом была просто отвратительной. Если кто-то из вас когда-то занимался разработкой нативных приложений под Symbian — вы наверняка вспомните эту боль.

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост

И вот, в 2008 году на сцену выходит новичок на мобильном рынке — поисковой гигант Google со своей мобильной операционной системой Android, которая предлагала обширный функционал, нормальную среду для разработчиков и полноценный магазин приложений и делала это всё почти бесплатно: исходный код системы был опубликован под свободной лицензией и любой производитель мог использовать Android на своём устройстве полностью бесплатно, доплачивая лишь за необходимость установки Google-сервисов.

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост

Учитывая, что внутренние прототипы Google разрабатывала тоже HTC, немудрено почему именно Тайваньская компания выпустила первый Android-смартфон в мире. Увидев успех HTC Dream, крупные гиганты также потянулись на рынок Android-смартфонов: Samsung представила I7500 Galaxy, давший старт одноименной линейке, Motorola представила CLIQ, а затем и легендарный Milestone, а LG — весьма интересную модель под названием GW620. Уже в 2009 году, HTC представила Magic, который Google раздавала на конференции Google I/O в Сан-Франциско всем участникам конференции и один из таких тоже оказался в моей коллекции!

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост

Свой HTC Dream я получил совсем недавно из Китая. Я давно хотел обзавестись «дримкой» и недавно мне написал читатель Роман, предложив помощь в поиске интересующих меня девайсов на китайских аналогах авито. При этом Роман брал на себя все заморочки с организацией доставки из Китая в Москву, а из Москвы уже в мой город — Ейск, за что ему огромное спасибо. HTC Dream обошёлся мне в 2.200 рублей, а Moto Milestone — около 500 и оба устройства полностью рабочие!

Но перед тем как мы сможем перейти к фактическому обзору, нашу дримку нужно обслужить: у неё вспух аккумулятор, который уже никуда не годится, поэтому остаётся лишь его перепаковать. Перепаковка аккумулятора — это процесс замены литиевой банки на другую с сохранением оригинального контроллера и при возможности корпуса АКБ. И в моём случае произошёл определенный фейл…

❯ Перепаковываем аккумулятор


Сначала аккумулятор необходимо разобрать. Для многих этот процесс может показаться опасным, но я уверяю авс — если не тыкать в аккумулятор отвертками и не замыкать ничего в цепи BMS-контроллера и самого аккумулятора, всё будет нормально. В моём случае, разбирается он просто — отклеиваем бумажки, формирующие корпус и аккуратно вытаскиваем банку с контроллером из пластиковой основы.

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост

Затем выпаиваем плату защиты, известную также как BMS (Battery Management System) и идём искать подходящую банку. Можно установить как Б/У с другого телефона, так и новую, подходящую по размерам. Новой банки таких габаритов у меня не было, поэтому я решил воткнуть туда от АКБ для телефона LG.

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост

Но произошёл определенный нюанс: параллельно со статьей я готовил и видео, подробно снимая весь процесс перепаковки. В момент пайки отвлекся на видоискатель, перевернул бмску ввеврх-ногами и… переполюсовал аккум до входа в BMS. Результат: со смартфоном всё хорошо (на входе VBat в телефонах всегда стоит защита от переполюсовки и КЗ. Кроме того, КП способен выдержать до ~5.5В на VBat, но не более), а в контроллере BMS-дырка :(

Сначала я думал вырезать эту часть статьи, но потом решил, что авторы — тоже люди и у них тоже бывают определенные фейлы :) Но гештальт не закрыт и я обязательно выпущу ещё более подробный гайд о перепаковке аккумуляторов. В дримку можно установить BL-4C от Нокии, однако заряжаться он будет только до загрузки ядра, поэтому зарядки у нас по факту пока что нет. Ну ничего, думаю ещё найдется аккумулятор!

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост

❯ Бэкпортируем приложения


Друзья! После статей и видео о разработке самопальных приложений, мне часто пишут в личку с вопросами можно ли портировать приложения современных сервисов на смартфоны прошлых лет. И здесь ответ неутешителен: нет, без исходного кода, в том числе и нативных зависимостей ничего портировтаь так просто не выйдет. Мои приложения изначально писались так, чтобы не зависеть вообще ни от чего кроме голого API Android (ни AppCompat, ни каких либо иных зависимостей) и при этом по возможности не используются даже фичи Android из 2.x. Именно поэтому мне свои приложения портировать гораздо проще.

Современная студия уже не умеет собирать приложения для 2.1 и ниже: примерно в 2.2 немного поменялся бинарный формат XML, из-за чего десериализатор в более старых версиях Android валится с ошибкой. Однако приложения, собранные в Android Studio образца 2017 прекрасно работают и на Motorola Milestone!

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост

Поэтому всё, что нам остаётся — это лишь импортировать код приложений в более старую студию (в моём случае 2.3.2), поставить minSDK на 1 (Android 1.0) и собрать приложение… А ведь даже отладчик работает! Конечно есть определенные нюансы: например, в Android 1.0 нет атрибута onClick, дабы быстро повесить обработчик кнопки в Design-time и другие мелкие «приколы» той версии Android.

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост

Приложения бэкпортированы, а значит можно попробовать, каков же экспиренс от использования первого Android-смартфона в 2024 году!

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост

❯ Обзор


Конструктивно смартфон очень интересный. Несмотря на то, что корпус отюндь не выполнен из премиальных материалов, смартфон лежит в руке классно, но самое приятное ощущение — это открыть клавиатуру путём сдвига QWERTY-слайдера…

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост
Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост

Механизм работает идеально даже спустя 16 лет после выхода устройства! Нижняя панель кнопок отличается наличием трекболла: специального колёсика, выполняющего роль DPad'а (стрелок). Трекболл долгое время был фишкой HTC, да и в целом действительно довольно удобным решением в определенных ситуациях, учитывая что первые ёмкостные тачскрины не были надёжными от слова совсем.

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост

Изначально производительность смартфона меня не устроила и я решил скинуть его до заводских настроек. Но я не учёл один факт: в то время, Google почему-то пыталась косить под Apple и позволяла активировать смартфон только при наличии активного тарифного плана с пакетом интернета и симкой T-Mobile! Поэтому пришлось быстренько откатываться до прошивки RC29 (Android 1.0) и обходить активацию с помощью adb. Инженеры HTC оставили рутовую (!) консоль, которая работает из всей системы, когда мы просто пишем что-то на аппаратной клавиатуре! Попробуйте написать Enter -> reboot -> Enter на своей дримке!

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост

После включения, нас сразу встречает оригинальный гугловский лаунчер, который может быть знаком читателям, которые пользовались первыми Android-смартфонами. Менюшка здесь открывается путём свайпа нижней шторки вверх… но поскольку в те годы, всё 2D в Android рисовалось софтварно, то плавность была далека от айфона. Но всё равно вполне шустренько.

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост

Среди стандартных приложений был почти весь джентльменский набор: и полноценный браузер, и почтовый клиент, и удобный плеер. А недостающие приложения типа клиента твиттера или аськи допиливали сторонние разработчики, так что спустя годик-два после выхода, «дримкой» всё ещё вполне можно было пользоваться.

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост

Начинаем с браузера. В качестве браузерного движка, Google решили выбрать в своё время WebKit, который исопльзовался в дроиде вплоть до 5.0, когда WebView и его фактическую реализацию разделили, попутно заменив WebKit на Chromium. Сейчас эта версия, увы, уже почти ничего не может: ни Хабр почитать, ни Пикабу… конечно сторонние клиенты могли бы решить эту проблему, но оба сайта не хотят предоставлять никакого публичного апи…
Браузер до 2.1 даже верхней шторки не имел и переходить по URL приходилось нажимая кнопку контекстного меню и только затем Go:

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост

До сих пор на устройстве работает мой любимый клиент почты — тот, который встроенный. Если ставить галки «SSL If Required», что позволяет игнорировать ошибки SSL, то он работает замечательно. Клавиатура у Dream замечательно подходит для переписок — отдельный ряд с цифрами и общее расположение кнопок этому очень и очень способствуют!

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост

Работают даже карты, позволяя сделать из смартфона с GPS в эдакий навигатор без навигации. Но карты работают очень шустро, даже поиск есть, а если вдруг Google Maps со временем отвалится, то я и вьювер OSM запилю :)

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост

Давайте же перейдем нашим приложениям! Начинаем с моего клиента YouTube, который здесь работает, но из-за значительно более «белой» светлой темы в 1.x, надписи не видно от слова совсем.

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост

Клиент ВК здесь работает без каких либо проблем, но на «не свежей» системе заметно подлагивает. В целом, производительность всё равно далека даже от iPhone 3G в те же годы:

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост

А как насчёт Telegram? Смогу ли я написать пост в свой Telegram-канал с него, учитывая такую крутую и классную QWERTY-клавиатуру?

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024 Опрос, Покупка, Android, Смартфон, Гаджеты, Китай, Htc, Разработка, Программирование, Java, Ретроспектива, Диковинки, Ништяки, Моддинг, Видео, Без звука, Длиннопост

❯ Заключение


Вот такой материал про первый Android-смартфон в мире у нас получился. Как видим, не совсем уж он и бесполезен и при определенном желании всё ещё может послужить хорошую службу своему хозяину. Берегите свои дримки :)

Также у меня естьTelegram-канал, куда я выкладываю мысли касательно ремонта и программирования под гаджеты прошлых лет.
А когда у вас появился первый Android-смартфон? Пишите в комментариях!

На какой версии системы был ваш первый Android-смартфон?
Всего голосов:


Кстати, если у кого-то из читателей есть ненужные устройства (в том числе с косяками) или дешевые китайские подделки на айфоны/айпады/макбуки и другие брендовые девайсы будучи нерабочими, тормозящими, или окирпиченными и вам не хотелось бы выкидывать их на свалку, а наоборот, отдать их в хорошие руки и увидеть про них статью — пишите мне в Telegram или в комментах! Готов в том числе и купить их. Особенно ищу донора дисплея на китайскую реплику iPhone 11: мой ударник, контроллер дисплея калится и изображения нет :(

Статья подготовлена при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, чтобы не пропускать новые статьи каждую неделю!

Показать полностью 24 1 1
[моё] Опрос Покупка Android Смартфон Гаджеты Китай Htc Разработка Программирование Java Ретроспектива Диковинки Ништяки Моддинг Видео Без звука Длиннопост
17
DELETED
11 месяцев назад
Android

Хочу спросить про браузер firefox на андроиде⁠⁠

Хочу спросить про браузер firefox на андроиде Браузер, Google Chrome, Firefox, Приложения на смартфон, Функционал сайта, Мобильные телефоны, Программирование, Android, Гаджеты, Смартфон, Длиннопост

Это в браузере firefox нажата кнопка с приложениями Гугла. А ниже нажата в браузере гугл хром.

Почему он на страничке google не разворачивает меню с приложениями google в виде квадрата из точек? В гугл хроме и других браузерах это работает.

Хочу спросить про браузер firefox на андроиде Браузер, Google Chrome, Firefox, Приложения на смартфон, Функционал сайта, Мобильные телефоны, Программирование, Android, Гаджеты, Смартфон, Длиннопост

Тут разворачивается как нужно и оч удобно.

Я конечно понимаю что это может быть дурацким вопросом, но хотелось бы узнать ваши варианты почему так, могу предположить что разработчики лисы решили что такой функционал ненужен. Или же вообще это только на моем смартфоне так.

Кстати в лисе нет кнопки Опубликовать пост которая есть в гугл хроме

Хочу спросить про браузер firefox на андроиде Браузер, Google Chrome, Firefox, Приложения на смартфон, Функционал сайта, Мобильные телефоны, Программирование, Android, Гаджеты, Смартфон, Длиннопост

Это в гугл хроме

Хочу спросить про браузер firefox на андроиде Браузер, Google Chrome, Firefox, Приложения на смартфон, Функционал сайта, Мобильные телефоны, Программирование, Android, Гаджеты, Смартфон, Длиннопост

Это в фаерфоксе.

Показать полностью 4
[моё] Браузер Google Chrome Firefox Приложения на смартфон Функционал сайта Мобильные телефоны Программирование Android Гаджеты Смартфон Длиннопост
6
8
Monakez
11 месяцев назад
Лига программистов

Об игрушках unity и android⁠⁠

Делать было нечего, дело было до +30 за окном и появился интерес вернуться к задачке. которая у меня долго пылилась на полке: а именно получить способ забраться во внутренности запущееного нативного приложения на андроид-эмуляторе, который использует libhoudini в качестве транслятора ARM. Для несведующих поясню: есть устройство андроид - оно в основе своей использует процессор ARM архитектуры. есть приложения, которые написаны так, что в конечном счете представляют собой машинный код по эту конкретную архитектуру. при желании что-то сделать с этим приложением необходим какой-то способ управлять этим машинным кодом. чем мы и займемся.

итак, у нас имеется некое приложение. а именно игрушка, скачаная с гугль плей( в процессе ковыряния я пришел к выводу, что это купленый кем-то движок с накручеными на него магазином. звуками и графикой, т.е. игрушек таких - много). у нас имеется понимание, что для "ковыряния" внутри запущенного приложения нам потребуется устройство с root доступом и очевидным решением тут видится эмулятор.

мы знаем, что эмуляторы( memu, bluestacks, nox, genymotion, etc...) запускаются на платформах с базовой архтектурой x86_64, но позволяют исполнять код для архитектуры arm. это достигается за счет исползования intel овской поделки под названием lib(rary)houdini - некий транслятор, встраиваемый в конкретный эмулятор его разработчиками и позволяющий собственно транслировать arm код в x86( как это делается - не знаю, да и код этого транслятора вроде как нигде не опубликован).

мы так же имеем базовые понятия о том, что такое apk, pm, adb, (ba)sh

таким образном мы имеем возможность выполнять почти все приложения, созданные для arm-устройств на наших настольных ПК.

дополнительно к этому у нас есть: текстовый редактор + javascript/python/c и некоторое ПО для отладки и внедрения в приложения. в частности - frida

ну чтож. приступим.

для начала устанавливаем наше приложение себе на эмулятор (я взял genymotion) и запускаем его. оно работает. чтож... теперь нам стоит "найти" его на эмуляторе и скачать к себе на локальную машину для дальнейшего анализа ( adb pull нам в помощь).

конкретно эта игрушка, которую разбирал я шла в split- apk. соответственно выкачиваем все apk файлы и ищем в них что-то относящееся к unity ( а конкретно нас интересуют libunity.so libil2cpp.so global-metadata.dat)

коротко, в двух словах зачем все это нужно:

unity - мета-фреймворк для разработки приложений с последюущим их релизом под различные платфформы. основной инструмент там - c4+ соответственно для "кроссплатформенности" был создан некий транслятор, а именно cSharp->IL(intermediate langauge)->platform. вот этот последний переход осуществляется посредством специальной виртуальной машины(ВМ), разной для каждой платформы и эта ВМ использует различные данные из global-metadata.dat в процессе трансляции IL и его последующего исполнения.

т.к. сам по себе c4+ вполне себе легко подает реверзу, то задача на первоначальном этапе сводится к вытаскиванию этого c4+ кода каким-то образом из IL с целью последующего изучения и выбора направлений дальнейшего анализа.

не вдаваясь в дебри всей этой внутренней кухне, отмечу лишь, что в природе существуют открытые решения для этой процедуры, в частности il2cppdumper коим и воспользуемся.

к сожалению( или к счастью) те данные, которые необходимы для работы этого ПО частично или полностью unity-разработчки определенным образом шифруют\обфусцируют. а именно файл global-metadata.dat и наша задача, в случае если il2cpp dumper не сможет корректно отработать будет заключаться в том, чтобы этот global-metadata.dat "восстановить".

на самом сайте il2cppdumper разобраны некие типовые случаи этого "восстановления"

в нашем же все свелось к небольшому анализу(найти место запуска IL virtual machine просмотреть до момента обращения к global-metadata.dat) и copy-paste листинга(анализировал libil2cpp с помощью IDA)

в итоге имеем следующий листинг, который нам любезно предоставила ida

fileHandle2 = (__int64)fileHandle;

fileBuffer = (const void *)utils::MemoryMappedFile::Map(fileHandle);

os::File::Close(fileHandle2, &error);

if ( (_DWORD)error )

{

utils::MemoryMappedFile::Unmap(fileBuffer);

LABEL_21:

fileBufferInMem = 0LL;

goto LABEL_22;

}

size_of_fileBuffer = get_size_of_fileBuffer((unsigned __int64)fileBuffer);

fileBufferInMem = malloc(size_of_fileBuffer);

memcpy(fileBufferInMem, fileBuffer, size_of_fileBuffer);

unXorArray = malloc(64u);

v15 = LoadMetadataFile_Val_1;

v16 = LoadMetadataFile_Val_2;

for ( i = 0LL; i != 64; ++i )

{

v16 = 18000 * (unsigned __int16)v16 + HIWORD(v16);

unXorArray[i] = v16;

v15 = 36969 * (unsigned __int16)v15 + HIWORD(v15);

}

LoadMetadataFile_Val_1 = v15;

LoadMetadataFile_Val_2 = v16;

if ( size_of_fileBuffer >= 1 )

{

bufidx = 0LL;

uXidx = 1;

do

{

uXidxOffset = uXidx + 62;

if ( uXidx - 1 >= 0 )

uXidxOffset = uXidx - 1;

notDone = size_of_fileBuffer <= uXidx;

*((_BYTE *)fileBufferInMem + bufidx) ^= unXorArray[uXidx - 1 - (uXidxOffset & 0xFFFFFFC0)];

bufidx = uXidx++;

}

while ( !notDone );

}

LABEL_22:

if ( (v24 & 1) != 0 )

operator delete(v26);

if ( (v27 & 1) != 0 )

operator delete(v29);

return fileBufferInMem

итак, не обращая внимания на всевозможные страшные буквы и названия переменых - сразу видим(и переименовыываем очевидное) следующее:

мапится файл в память(fileHandle, который указывает на global-metdata.dat)

магия

возвращается fileBufferInMem

вот эта вот магия - это и есть то ,что разработчики конкретной игры пытались выдать за "обфускацию" а именно

xor данных по ключу из генерируемого массива. крайне удобно тем, что a == xor(xor(a,b),b)

т.е. у нас на руках сразу есть ключ и закодированные данные. немного C и

#include <stdio.h>

#include <stdlib.h>

#include <stdint.h>

#include <string.h>

#include <stdlib.h>

#include <stdint.h>

typedef uint64_t QWORD; // DWORD = unsigned 64 bit value

typedef uint32_t DWORD; // DWORD = unsigned 32 bit value

typedef uint16_t WORD; // WORD = unsigned 16 bit value

typedef uint8_t BYTE; // BYTE = unsigned 8 bit value

#define LOWORD(l) ((WORD)(l))

#define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))

#define LOBYTE(w) ((BYTE)(w))

#define HIBYTE(w) ((BYTE)(((WORD)(w) >> 8) & 0xFF))

BYTE* readContent(char* filename, size_t* size_t_ptr) {

FILE *f = fopen(filename, "rb");

fseek(f, 0, SEEK_END);

*size_t_ptr= ftell(f);

fseek(f, 0, SEEK_SET); /* same as rewind(f); */

BYTE *string = malloc(*size_t_ptr);

fread(string, *size_t_ptr, 1, f);

fclose(f);

return string;

}

void storeContent(char* filename, BYTE* buffer,size_t bufferSize){

FILE *f = fopen(filename, "wb");

fwrite(buffer,bufferSize,1,f);

fclose(f);

}

BYTE* initXor() {

BYTE* buf=(BYTE*)malloc(64);

DWORD v16=0x2A;

for(int i=0;i!=64;i++) {

v16=18000*((WORD)v16)+HIWORD(v16);

buf[i]=LOBYTE(v16);

//printf("%02X,", buf[i]&0xFF);

}

return buf;

}

void unXorBuffer(QWORD size_of_fileBuffer,BYTE* fileBufferInMem) {

if (size_of_fileBuffer<1){

return;

}

BYTE* unXorArray=initXor();

QWORD bufidx = 0LL;

QWORD uXidx = 1;

BYTE notDone;

do

{

DWORD uXidxOffset = uXidx + 62;

if ( uXidx - 1 >= 0 )

uXidxOffset = uXidx - 1;

notDone = size_of_fileBuffer <= uXidx;

fileBufferInMem[bufidx] ^= unXorArray[uXidx - 1 - (uXidxOffset & 0xFFFFFFC0)];

bufidx = uXidx++;

}

while ( !notDone );

free(unXorArray);

}

int main(int argc, char *argv[]) {

BYTE* uXor=initXor();

size_t gmSize;

BYTE* gmBuffer=readContent("./global-metadata.dat",&gmSize);

printf("%d",gmSize);

unXorBuffer(gmSize,gmBuffer);

storeContent("./global-metadata.dat.dec",gmBuffer,gmSize);

return 0;

}

на выходе получим "правильный" global-metdata.dat

далее можно воспользовваться il2cppdumper и восстановить структуру( не содержимое!!) приложения, т.е. классы их поля и методы.

и тут скорее всего (а на это яно намекали имена функций в IDA в libil2cpp) мы ничего понять сходу не сможем. т.к все эти классы\поля\методы\ обфусцированы, т.е. нет возможности по названиям понять кто за что отвечает:

Об игрушках unity и android Android, Unity, Игры, IT, Программирование, Длиннопост

в таком случае наиболее очевидным и простым является анализ самого приложения с точки зрения "а что там вообще проиcходит. и куда мы можем сваять заплатку". в процессе анализа выявились 3 направления - данные игры( т.е всевозможные цены. шансы. награды и тп.) сохраниения - дада. в игре есть облачное сохранение. и ГПСЧ(random generator - вот он как раз и отвечает в конечном счете за всякие шансы\награды и тп)

разглядывая то, что "забыли\не смогли" закрыть разработчики своим обфускатором видно:

Об игрушках unity и android Android, Unity, Игры, IT, Программирование, Длиннопост
  1. какой-то античит(значит нас "пасут" где?)

  2. используется json( полистав листинг классов, аннотации на методах\полях - игра вдоль и поперек использует json для маршаллинга. учтем.)

  3. какой-то savegamefree - значит можно приицепиться к save & load фукциям и посмотреьт что сохраняется и как ( сразу скажу, что необходимости в этом нет, т.к у нас есть п2)

чтож. приступим.

не буду долго описывать процесс поиска античита - он пристуствует. и подвязан на эти самые шансы. цены. игровую валюту и т.п) и в процессе "исследования" приходилось несколько раз начинать сначала ввиду "банхаммера" с "той стороны".

оставим за кадром процесс "прицепляния" frida к libhoudini в эмуляторе ( намекну только, что загрузка DLL происходит через последовательный поиск искомой библиотеке в каталоге "для библиотек приолжения" в апк в системе...)

для упрощения работы с frida и il2cpp я наткнулся в гугле на il2cpp-bridge - эдакая удобная надстройка над функционалом frida для более удобного вызова\анализа\перехвата интересующих меня функций (я нашел ее много позже и до этого полз через классический вариант. поиск RVA искомых функций в дампе c4+ файле, который получил из il2cppdumper и последующим их перехватом)

Атаковать будем ГСЧ - т.е. искуственно выдавать нужные нам шансы для какого-либо дейтсвиия. а именно "выпадение нужной нам вещи". для этого надо понимать. что ГСПЧ - это некая функция, которая имеет "начальную точку" и период(т.е. через какое-то большое количество обращений будут возвращаться те же самые значения от старта)

для этого находим все функции, где упомянется слово Random и "прицепимся" к ним. посмотрим какой именно ГПСЧ используется ( как минимум у нас их два - это System::Random и unity random ) входные и выходные значения в момент "выпадения вещи" (и продолжим уже исключительно с ним)

згрузим сохранение - повторим -загрузим-повторим.

наблюдеаем следующее:

каждый раз выпадает одна и та же вещь . следовательно где-то в сохранении (и даже можно найти где. но не нужно) сохраняется текущее значение для "начального значения" нашего ГПСЧ(initial seed, seed) и используется вызов всяких функций randomXXXX

по семантике понятно, что это "качество" вещи.

аттрибуты. значения аттибутов.

нас интересует только качество

следовательно схема такая:

перехватываем установку seed - устанавливаем свое значение. ловим нужную нам вещь

собственно вот рожденный в процессе ковыряния быдлокод, который приводит к требуемому результату

boilerplate взят тут

git remote -v

origin https://github.com/oleavr/frida-agent-example.git (fetch)

origin https://github.com/oleavr/frida-agent-example.git (push)

import {Buffer} from "buffer";

import "frida-il2cpp-bridge";

console.log("Rebuilded")

function awaitForCondition(callback: any) {

var i = setInterval(function () {

var addr = Module.findBaseAddress('libil2cpp.so');

console.log("Address found:", addr);

if (addr) {

clearInterval(i);

callback(+addr);

}

}, 0);

}

function _attach(base: any, klass: any, mtd: any, get_StackTrace: any) {

const va = mtd.virtualAddress

if (va == 0x0) {

//console.log("Attach fail", mtd.virtualAddress)

return

}

try {

Interceptor.attach(va, {

onEnter: function (args) {

console.log("onenter ", klass.fullName, `mtd:"${mtd}"`);

if (get_StackTrace != null) {

console.log(get_StackTrace.invoke());

}

//console.log("encode password", [>input<]pwd);

}

});

} catch (err) {

console.log(klass.fullname.tostring(), mtd, err)

console.log("error interception rva", mtd, va.sub(base))

}

}

const klassesOfInterests = [

// /*MainCharacterData*/"SH.491471447.sh_cxse1",

// /*some json related stuff*/"SH.491473776.sh_dbdo1",

// /*some json related stuff*/"SH.491473773.sh_dbdl1",

// /*some json related stuff cur character data? */"SH.491471465.sh_cxsw1",

// /*some json related stuff to files/sc.d? */"SH.491471742.sh_cydk1",

// /*diamond related data*/"SH.491471457.sh_cxso1",

// /*some logs to json handling?*///"SH.491475490.sh_ddri1",

// //"SH.491471477.sh_cxth1",

//"UnityEngine.Random",

// "System.Random",

// "RandomGemRewardVisualInfo",

// "PseudoRandom",

// "DefaultRandom",

"CodeStage",

// "SH.Feature.MS.CardProcess",

// "SH.Feature.RL.DiamondProcess"

]

const mtdsToSkip = [".ctor", "CurrentOwned", "get_IsRunning"]

/*

*

* enum of some events related to diamondProcess and game

* SH.491471427.sh_cxrk1

*

* ????

* SH.491471477.sh_cxth1

* assets related stuff?

* SH.491471546.sh_cxvx1

* */

awaitForCondition(function (base: any) {

const il2cpp = ptr(base);

//bind(il2cpp, ObscuredRefsRVAs)

//bind(il2cpp, BayatGamesFns)

Il2Cpp.perform(() => {

const SystemString = Il2Cpp.corlib.class("System.String");

const single = Il2Cpp.corlib.class("System.Single");

const int32 = Il2Cpp.corlib.class("System.Int32");

const get_StackTrace = Il2Cpp.corlib.class("System.Environment").method("get_StackTrace");

const SystemBoolean = Il2Cpp.corlib.class("System.Boolean");

const SystemType = Il2Cpp.corlib.class("System.Type");

const cSharp = Il2Cpp.domain.assembly("Assembly-CSharp");

const cSharpFP = Il2Cpp.domain.assembly("Assembly-CSharp-firstpass");

/*

with SEED=1 we have right top legendary item

this is Range(x,y) return values

inside 1 Range 0,1 System.Single 0.0003153085708618164

inside 1 Range -0.20000000298023224,0 System.Single -0.11122268438339233

inside 1 Range -0.20000000298023224,0 System.Single -0.06576250493526459

inside 1 Range -0.20000000298023224,0 System.Single -0.03238866850733757

*/

let seedValue = 1;

global.setRandomSeed = function (value) {

seedValue = value;

console.log("seed", seedValue)

}

let rrValues = []

const setRandomRange = function (...values) {

rrValues = [];

const rrTmp = [];

values.forEach(v => {

//const sV = Il2Cpp.string(`${v}`);

//rTmp.push(single.tryMethod("Parse", 1).invoke(sV));

rrTmp.push(v)

})

rrValues = rrTmp.reverse().sort()

console.log(rrValues.reverse());

}

global.overloadValues = function (vMin, vMax) {

var x = [];

for (var i = vMin; i <= vMax; i++) {

x.push(i);

}

rrValues = x.reverse();

console.log(rrValues)

}

global.setRandomRange = setRandomRange;

global.fixRandom = function () {

cSharp.image.classes.filter(klass => klass.fullName.includes("SH.Feature.E.RandomEquipmentProcess"))

.forEach(k =>

k.methods.filter(m => m.name.includes("Generate"))

.forEach(m => {

if (m.parameterCount != 2) {

return

}

m.implementation = function (a, b) {

console.log('genrate', k.fullName, m)

console.log(a)

console.log(b)

return this.tryMethod("Generate").invoke(a, b);

}

})

)

/*

* mix SEED with UNITY int32 RANDOM.RANGE gives us neceesarry results

* setRandomSeed(1123120)

* setRandomSeed(1023121)

* overloadValues(20,23)

* */

Il2Cpp

.domain.assembly("UnityEngine.CoreModule")

.image.class("UnityEngine.Random")

.methods.forEach(mtd => {

console.log('inject in ', mtd)

mtd.implementation = function (...args) {

const rva = mtd.relativeVirtualAddress;

if (!!rva && rva.equals(ptr(0x12e8d0c))) {

const a = args[0]

const b = args[1]

//this is item id, but idk what value it need to be?

// if (a === 0 && b === 100) {

if (a === 0 && b === 100) {

const v = rrValues.pop()

if (v !== undefined) {

console.log('overload Range(0,100) with', mtd, a, b, v)

return 0 + v

}

}

const rv = mtd.invoke(a, b);

console.log('range(x,y)', a, b, rv)

// int32 Range(int32, int32)

return rv

}

if (rva.equals(ptr(0x12e8cc0))) {

//float Range

//console.log('floatRange');

return 0.0006;//mtd.invoke(seedValue !== undefined ? seedValue : 1);

}

if (rva.equals(ptr(0x12e8b64))) {

//InitState

console.log('initState');

return mtd.invoke(seedValue !== undefined ? seedValue : 1);

}

const rv = mtd.invoke(...args);

//console.log('invoked', mtd, mtd.relativeVirtualAddress, args, rv)

return rv;

}

})

}

});

})

запустили приложение на эмуляторе.

запустили frida с нашим скриптом. загрузили свою сохраненную игру.

пробуем без "своего" ГСПЧ:

Об игрушках unity и android Android, Unity, Игры, IT, Программирование, Длиннопост

включаем "свой":

Об игрушках unity и android Android, Unity, Игры, IT, Программирование, Длиннопост
Об игрушках unity и android Android, Unity, Игры, IT, Программирование, Длиннопост
Об игрушках unity и android Android, Unity, Игры, IT, Программирование, Длиннопост

вуаля.

цель достигнута. любые "шансы" в игре теперь под нашим контролем. значения контролируемых античитом участков памяти - не затрагивались( т.е. всю валюту и прочая целесообразнее добывать "законными" методами..)

таким образом используя frida и немного терпения можно получить результат без затрат времени и\или денег( то, что в основном используют как валюту подавляющее большинство игроков)

на этом интерес к этой задаче интерес мой закончился, но этот пост - пусть остается. в том числе и как памятка мне

ЗЫ техники изменения значений переменных в памяти малоэффективны из-за используемого античита

Спасибо, что прочитал.

Показать полностью 6
[моё] Android Unity Игры IT Программирование Длиннопост
15
4
Agmioli
Agmioli
1 год назад
Android

Как создать Андроид-приложение, которое будет запускать сайт из интернета?⁠⁠

Как создать Андроид-приложение, которое будет запускать сайт из интернета? Приложение, Интернет, Android, Android разработка, Веб-разработка, Приложение на Android, Программирование, Java, Приложение на java, Kotlin, Android studio

Как создать Андроид-приложение, которое будет запускать сайт из интернета?

Это дополнение к статье:
Создание Андроид приложений без навыков программирования. Конвертируем html страницу в apk-файл: Создание Андроид приложений без навыков программирования. Конвертируем html страницу в apk-файл

Чтобы вместо файловой (офлайн)версии html-сайта, при запуске приложения запускался настоящий онлайн-сайт из интернета, нужно выполнить следующее:

Вместо шага (который занимается запуском файловой html-версии сайта) из статьи:
7. В каталоге app найдите папку assets.


Выполняем следующие шаги:

1. Открываем файл-вкладку MainActivity.java

2. Находим в нем строку:
myWeb.loadUrl("file:///android_asset/index.html");

3. Вместо "file:///android_asset/index.html"
Прописываем онлайн-путь(веб-адрес) на ваш интернет-сайт, который должен запуститься при открытии вашего андроид-приложения.

4. Запускаем приложение, и проверяем.

Показать полностью
[моё] Приложение Интернет Android Android разработка Веб-разработка Приложение на Android Программирование Java Приложение на java Kotlin Android studio
2

Оформить подписку для бизнеса

Перейти
Партнёрский материал Реклама
specials
specials

Ваш бизнес заслуживает большего!⁠⁠

Оформляйте подписку Пикабу+ и получайте максимум возможностей:

Ваш бизнес заслуживает большего! Малый бизнес, Предпринимательство, Бизнес

О ПОДПИСКЕ

Малый бизнес Предпринимательство Бизнес
11
RoKotEyn
RoKotEyn
1 год назад

Моё первое приложение в Google Play Market. Очень нужен фидбэк. Хелп⁠⁠

Привет, Пикабу!

Очень нужна помощь.

Кратко.

Нужны люди, которые смогут дать ЛЮБОЙ фидбэк по моему первому приложению в Google Play Market, которое сейчас находится на стадии закрытого тестирования. Очень ОЧЕНЬ нужны. Пожалуйста, напишите в Телеграм @rokoteyn либо на email rokoteyn@gmail.com.

Несколько скриншотов в конце поста.

Подробно.

Я изучаю корейский язык. Соответственно, часто возникает необходимость работы именно со словарём, а не с переводчиком. В качестве словаря я использовал государственный словарь от Института корейского языка Республики Корея (국립 국어원, https://krdict.korean.go.kr/rus). Это наиболее полный словарь, на который ссылается тот же Naver, НО он работает только в веб, а значит, если нет интернета, то нет и словаря. Плюс, сам запрос тоже выполняется достаточно долго. Ну а на мобилке через браузер пользоваться так вообще трэш.

Собственно, решил решить проблему в лоб – написать своё приложение. Считаю, что получилось. Приложение вполне рабочее. Но что в нём хорошего, спросите? Отвечаю:

• Максимально простой интерфейс

• Оно полностью оффлайн. Интернет не требуется

• Работает даже на старых телефонах (Android 7.0 и выше)

• Работает очень быстро, без загрузок. Поиск по базе данных осуществляется мгновенно

• Поддерживает 11(!) языков

• Используется база данных Национального Института корейского языка, поэтому это максимально полный из существующих словарь

Моя задача — сделать такое приложение, чтобы изучающие корейский язык считали его самым быстрым, лучшим и по сути единственно верным приложением для работы с корейским словарём. Такое приложение, чтобы им ХОТЕЛОСЬ пользоваться.

Но, как понятно, без фидбэка от настоящих пользователей сделать это невозможно. Поэтому, очень прошу, если вы заинтересованы в изучении корейского языка – поучаствуйте – мне это очень поможет. Но даже если не заинтересованы и просто скачаете, чтобы оценить, что за хрень я такую слепил, – это тоже приветствуется.

잘 부탁드립니다!

@rokoteyn, rokoteyn@gmail.com

P.S. Через какое-то время (если не забуду) постараюсь сделать пост, где подробно распишу, с какими проблемами столкнулся при разработке этого приложения и как их решал. И несмотря на то, что приложение выглядит очень просто, есть над чем подумать.

1/5
Показать полностью 5
[моё] IT Программирование Kotlin Android Корея Корейский язык Приложение Google Play Длиннопост
0
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии