Источник: Selftaughtcoders Наверняка многие из вас знакомы с ситуацией, когда собственный код вы уже более-менее научились читать, но при попытке заглянуть в чужой сразу теряетесь. Для решения этой проблемы есть проверенная методика. Поверьте, если в ней разобраться, она покажется вам очень простой.
1. Найдите одну функцию, с которой вы уже знакомы, и отследите все ее действия в обратном порядке, начиная с конца
- Структура кода (куда вставлены переменные, где расположены разные методы и т.д.). Стиль написания кода, которого придерживался автор.
- Образ мышления создателя кода и его подход к решению проблем (да, это уже сложнее, но с опытом подобные вещи начинаешь понимать интуитивно).
- В процессе регулярного чтения от конца кода к его началу вы будете постепенно улучшать понимание кода в целом.
2. «Промыть и повторить»
Повторите весь процесс несколько раз. Это поможет вам лучше запоминать всё большее количество элементов структуры кода. Представьте, что вы освещаете фонариком темную комнату. Именно так, постепенно, вам будут открываться ранее неизвестные части кода. В конце концов, вы запомните, где и что именно находится в этой комнате.
Снять чужую программу #shorts
Смысл метода основан на том, что код всегда создается для решения какой-то одной (или не одной) сложной задачи. Поэтому регулярное прохождение «цепочки действий» вам обеспечено. Чем быстрее вы поймете, как связаны между собой разные части кода, тем лучше вы будете понимать его структуру в целом. Соответственно, тем легче вам будет даваться чтение чужого кода.
Ошибки, которых можно избежать при создании профиля на GitHub
Источник: Dev.to При создании профиля на GitHub новички часто совершают ошибки, которых можно было бы легко избежать. Если вы хотите, чтобы ваш профиль на GitHub произвел хорошее впечатление на работодателя, придется учесть несколько важных деталей.
Ошибка №1. Включение в профиль GitHub всех написанных вами приложений
Очень часто разработчики необдуманно включают в свой профиль все созданные ими приложения, полагая, что чем больше – тем лучше. В реальности это имеет обратный эффект. Кандидат может произвести впечатление ненадежного и не имеющего специализации.
Поэтому приложения для своего GitHub-профиля нужно тщательно отбирать согласно следующим принципам: Приложения должны демонстрировать ваш рост как разработчика. Можно включить две итерации одного приложения: в первой будет код, написанный в начале вашей карьеры программиста, а второй код будет содержать все улучшения и проведенный рефакторинг.
Как Удалить Айклауд Apple ID на Айфон БЕЗ ПАРОЛЯ в 2022
Также в README улучшенной версии напишите, какие изменения вы внесли и почему. Покажите результаты преодоления трудностей, с которыми вы столкнулись во время обучения. Включите в профиль приложения, которые вам было трудно создавать, и опишите в README сложности, которые удалось преодолеть.
Продемонстрируйте способность объединить несколько функций и заставить их работать вместе. Начинающие разработчики иногда допускают ошибку, показывая приложения, которые имеют только одну основную функцию. Я рекомендую включить в GitHub-профиль приложения, которые реализуют несколько функций. Разумеется, все они должны работать без сбоев.
Приложения должны демонстрировать ваш интерес к разработке. Если созданное вами приложение сочетается с вашими увлечениями и характером – не стесняйтесь его показать.
Ошибка №2. Полупустые README-файлы
- Причины создания приложения.
- Список функций приложения.
- Возникшие в процессе написания кода проблемы и способ их решения.
- Инструкции по локальному развертыванию приложения.
Ошибка №3. Включение приложений, не развернутых онлайн
В большинстве случаев работодатель не будет развертывать ваше приложение локально. Но некоторые из них все же могут протестировать вашу программу и ее функционал на предмет наличия багов. Если ваше приложение нельзя развернуть, вы упускаете отличную возможность продемонстрировать свои великолепные навыки программиста. И даже ваше приложение касается бэкенда, это не проблема! Реализуйте самый минимальный фронтенд, разверните приложение и поясните в README, что в этом приложении вы сфокусировались исключительно на бэкенде, а его фронтенд не предназначен для демонстрации ваших навыков и служит лишь для доступа к функционалу бэкенда.
Нужно ли указывать в профиле незаконченные или заброшенные приложения?
Да, но с обязательной пометкой «In Progress». Это даст вам возможность показать, над какими приложениями вы работаете, с поправками на их незавершенность.
Итоги
Выбор приложений для GitHub-профиля должен отражать историю вашего развития, показывать навыки, которые вы хотели бы продемонстрировать. Ваша цель – убедить работодателя, что вы являетесь ценным приобретением для его команды. Поэтому выбирайте те приложения, которые способны доказать вашу способность самостоятельно и эффективно решать технические задачи разного уровня сложности.
Источник: javarush.com
Как я ковырял чужой код. Что полезного можно найти внутри известных приложений для Android
Пока Евгений Зобнин учит тебя защищать свой код от чужих глаз и шаловливых ручонок, я решил занять позицию хитрого разработчика, который всегда рад, скажем так, кое-чему поучиться у создателей снискавших определенную популярность приложений ;). В этой статье я расскажу, как я анализировал код чужих программ и нашел одну интересную недокументированную функцию для работы с виджетами приложений.
Виджет с настройкой при добавлении
Многие из нас видели экран с настройками, который появляется при добавлении виджета на экран устройства. Например, погодный виджет может спросить: «А для какого города показывать прогноз?» Таким образом можно очень гибко настроить несколько виджетов одного и того же приложения для отображения разной информации.
Чтобы сэкономить труд на рутинных операциях, Android Studio может за нас в пару кликов создать рабочую заготовку с настраиваемым виджетом. От нас требуется только проставить нужные галочки в очень информативном мастере. Запускается он так: New-Widget-AppWidget .
Другие статьи в выпуске:
Xakep #218. Смотри во все глаза
- Содержание выпуска
- Подписка на «Хакер» -60%
В результате его работы у нас в проекте появятся два новых класса, которые автоматически пропишутся в манифест:
Первый класс отвечает за сам виджет, а второй представляет собой активность для его настройки, которая запускается как раз при его добавлении. Такую активность мы можем запускать в разные моменты, но будет не очень понятно, какой именно виджет сейчас настраивается. Так что момент самый удачный и лучше больше никаких мест для данной настройки не использовать.
Этот пример создания виджета описан во всех уроках и доках. Код простой, и ты сам в нем разберешься. Меня же заинтересовала возможность выбора иконки приложения, реализованная через виджет. Такая функция реализована в приложении Wifi Analyzer.
![]() |
![]() |
Вот же виджет. Негусто, но все же выбор |
Полезные и бесполезные виджеты
Поначалу я хотел просто рисовать иконку приложения в виджете. Это обосновано тем, что для добавления иконки на рабочий стол нужно добавить новое разрешение в манифест.
А так как пользователи не любят много полномочий у приложения и вдобавок при изменении разрешений в манифесте отключается механизм автообновления, то я старался сделать иконки через механизм виджетов. И как я ни упражнялся в дизайне, получить иконку один в один как оригинальная не выходило. Виной всему было непонимание работы системы. Виджет не предназначен для дублирования функциональности иконки, он может быть максимально на нее похож, но рисуются они по-разному, и на каждой прошивке свой лаунчер, рисующий рабочий стол с ярлыками и виджетами, как вздумается его разработчику.
Посмотрев чужое творчество, я поначалу был слегка обескуражен: у данного приложения виджет не имеет экрана настройки и всего лишь дублирует функциональность иконки, просто запуская приложение. На первый взгляд он совершенно бесполезен. Но когда я связался с авторами этого приложения, мне сказали, что виджет показывает количество непрочитанных писем. Такая функция есть в iOS.
![]() |
![]() |
На первый взгляд — ничего полезного. на второй, впрочем, чуть лучше |
Правда, не совсем понятно, зачем крохотному виджету сделали возможность менять свой размер? Или почему не сделали настройку выбора почтового ящика при добавлении виджета, например?
Делаем иконки, как farproc
Раз не получилось сделать новую иконку через обычный виджет, нужно посмотреть, как поступают другие разработчики. В этом могут помочь разные инструменты, я обычно пользуюсь онлайн-декомпилятором или decompileandroid.com. Заглянув в манифест приложения Wifi Analyzer, я не нашел обычных описаний виджетов, как из примера выше. Но виджет-то был! И он как-то запускал экран с выбором иконки!
Методом глубокого поиска и научного тыка было установлено, что тут используется недокументированная функция. А в манифесте только и нужно, что добавить новую activity с особым фильтром:
Нужный экран мы запустили, а дальше уже полная свобода творчества. Вот, к примеру, совсем понятный, «обградленный» код добавления иконки:
private Intent m1641a(int i)
Все настоящие имена методов изменены, но от констант никуда не денешься. Они и доносят нам суть происходящего.
Как включить мобильные данные с виджета?
У упомянутого выше автора есть приложение Data Enabler Widget. Функциональность его позволяет включать и выключать мобильный интернет прямо с рабочего стола посредством виджета без root-прав. Этим виджетом я пользовался на старом Samsung с версией Android 2.3, но на последних версиях он работать не хочет :).
В декомпилированном виде функция включения GPRS данных выглядит так:
private void b(Context context) < if (a != null) < break MISSING_BLOCK_LABEL_56; >a = (ConnectivityManager)context.getSystemService(«connectivity»); try < b = android/net/ConnectivityManager.getMethod(«setMobileDataEnabled», new Class[] < Boolean.TYPE >); > // Misplaced declaration of an exception variable catch (Context context) < >c = android/net/ConnectivityManager.getMethod(«getMobileDataEnabled», new Class[0]); return; context; >
Можно найти ее расширенную версию на Stack Overflow. Там же автор пишет, что она будет работать на всех версиях Android, а с версии 5.0 — только если приложение системное. По моим наблюдениям, так можно включать интернет до версии 4.3.
В основе этого метода лежит рефлексия, через нее вызывают непубличный метод. С точки зрения безопасности это большая проблема, так как любое приложение может включать мобильные данные и выходить в интернет. Поэтому в последних версиях Android эту лазейку прикрыли.
Об использовании скрытых методов
Какими бы широкими ни были возможности платформы Android, рано или поздно мы упираемся в ее границы. Вызов скрытых методов при помощи рефлексии позволяет нам эти границы расширить и сделать чуть больше, чем описано в документации. Вот, например, способ соединения Bluetooth-устройств.
Чаще всего границы платформы продиктованы безопасностью. Нельзя же позволять приложению с котиками подключаться к интернету без ведома пользователя или создавать Bluetooth-сети из устройств? В этом случае в угоду удобству нельзя жертвовать безопасностью. Поэтому пусть, чтобы получить новую порцию котиков, пользователь вручную подключает интернет каждый раз.
В серьезных проектах скрытые методы использовать не будут, и крупные разработчики их не рекомендуют. В этом я полностью разделяю их мнение: не факт, что то, что работает сейчас, будет работать завтра. А в мире Android-разработки и без этого хватает головной боли.
Онлайн-декомпиляторы
Не может не радовать, что с каждым днем у нас все больше инструментов для разбора приложений.
Вот список уже трех подобных сайтов:
- http://www.javadecompilers.com/apk/
- http://www.decompileandroid.com/
- http://apk-deguard.com/
Источник: xakep.ru
Как разобрать чужую программу
Комментарии
Популярные По порядку
Не удалось загрузить комментарии.
ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ
Суперподборка: более 70 бесплатных русскоязычных онлайн-курсов по IT-специальностям
Математика, алгоритмы, языки программирования и другие курсы по анализу данных, вебу, мобильной разработке, тестированию. Плюс наши ключевые статьи по каждой из тем.
6 книг по информационной безопасности
В XXI веке проблема информационной безопасности стоит ребром. С совершенствованием существующих технологий хранения, передачи и обработки информации, а также с появлением новых, возникает все больше потенциальных уязвимостей. Данная подборка содержит актуальные книги по защите информации, которые позволят оставаться в курсе последних тенденций развития данной области.
Как стать программистом: руководство от Google
Это руководство позволит студентам вузов приступить к самостоятельному развитию своих технических навыков, чтобы стать программистом.
Источник: proglib.io