Android code check tools

Использование Lint в Android Studio для проверки своего кода

Содержание

На практике в коде очень часто можно встретить очевидные ошибки, спустя какое-то время. Это может происходить из-за невнимательности при написании кода. Что бы свести такие ошибки к минимуму могут помочь статические анализаторы кода. Одним из таких анализаторов является Lint.

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

В Android Studio уже есть встроенные анализаторы кода, который дают подсказки “налету”.

Однако подсказки подсвечивают ошибки достаточно ненавязчиво и поэтому их легко пропустить. Но можно запустить проверку несколькими способами.

Способы запуска Lint.

Запуск через меню в Android Studio

Самый простой и удобный способ запуска проверки — это через Android Studio. Для этого в меню необходимо выбрать пункты Analyze -> Inspect Code. В появившемся окне можно ограничить область сканирования кода. Можно проверить весь проект, определённый модуль или отдельный взятый класс. На мой взгляд самый полезных из пунктов — это проверка не закоммиченых файлов. Так же можно выбрать профиль с набором правил для проверки.

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

Запуск через командную строку

Так же проверку можно запустить через gradle выполнив в консоли команду:

После проверки сформируется отчёт в формате html, который можно посмотреть по следующему пути:

Этот способ менее удобный чем первый, так как отчёт формируется в отрыве от студии и для правки ошибок нужно постоянно переключаться между отчётом и IDE. Зато этот способ прекрасно подходит для случаев если проверку осуществляется на сервере, а в случае обнаружение ошибок, прикреплять файл с отчётом к письму.

Запуск при сборке проекта.

Можно автоматизировать запуск проверки lint, который будет осуществлять при каждой сборке проекта. Для этого необходимо зайти в настройки запуска проекта:

Добавить следующую строку:

Этот способ менее предпочтительный так как значительно замедлит скорость сборки и разработки.

Настройка gradle сборки

Так же lint проверку можно настроить в gradle файле.

  • abortOnError: В случае обнаружение ошибки прекращается проверка.
  • warningsAsErrors: определяет предупреждения как ошибки.
  • lintConfig: путь к файлу проекта с настройками lint.

Если опция abortOnError включена, то при запуске сборки через gradle в случае обнаружении ошибки произойдёт исключение:

Настройка правил проверки lint

Отредактировать правила lint можно в настройках Android studio. Там же можно сделать отдельный конфигурационный профиль и использовать его.

Отключение проверки Lint с помощью анотаций в коде

Иногда бывают исключения, и может сложиться ситуация что необходимо отключить проверку какого-либо правила проверки для класса или метода. В Java коде это делается через аннотацию @SuppressLint(“NewApi”). В качестве параметра принимает строку названия проверки которую нужно исключить. Если нужно исключить все правила, то можно использовать следующую аннотацию:

Так же проверку можно обойти в xml файлах с помощью аттрибута tools:ignore=“NewApi,StringFormatInvalid”.

Выводы

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

Источник

Static Code Analysis Tools

These are tools that parse and analyse your source code without actually executing it. The goal is to find potential vulnerabilities such as bugs and security flaws and ensure conformance to coding guidelines. Helps to keep your code healthy and maintain code quality.

Think of static code analysis tools as an additional compiler that is run before the final compilation into the system language.

Benefits

  • Helps detect potential bugs that even unit or manual testing might have missed.
  • Defines project-specific rules. For example, static analysis as part of the build chain helps newcomers get up to speed with the code standards of their new team.
  • Helps you improve your knowledge of a new language.
  • Scans your whole project, including files that you might not have ever read.

On Android the most popular code analysis tools are:

Before starting the android integration, it would be great if a gist of what every tool does, should be provided. So, here it goes.

Android Lint

  1. This one comes with Android Studio by default.
  2. It checks your Android project source files for potential bugs and optimizations for correctness, security, performance, usability, accessibility, and internationalization.

FindBugs

  1. It analyses Java byte code mainly .classes to find any design flaw and potential bugs.
  2. It needs compiled code to work around and will eventually be fast since it works on byte code level.
  3. The major categories in this tool are: Correctness, Bad practice, Dodgy code, Multithreaded Correctness, Performance Malicious, Code Vulnerability, Security Experimental and Internationalization

Checkstyle

  1. It basically analyses source code and looks to improve the coding standard by traversing over simple AST generated by Checkstyle.
  2. It verifies the source code for coding conventions like headers, imports, whitespaces, formatting etc.

All the code analysis tools we’ll learn about in this tutorial are available as Gradle plugins, so we can create individual Gradle tasks for each of them. Let’s use a single Gradle file that will include them all. But before that, let’s create a folder that will contain all of our files for the static code analysis.

Читайте также:  Сбербанк пэй андроид что это

Open Android Studio and inside the app module (in Project view), create a new folder and name it code_quality_tools. This folder will contain the XML files for the code analysis tools, and it will also have a Gradle file, quality.gradle, which will run our static analysis tasks.

Finally, visit your build.gradle in the app module folder and include this line at the end of the file:

Here, our quality.gradle Gradle script is being applied with a reference to its local file location.

Android Lint

To configure Lint, you have to include the lintOptions <> block in your module-level build.gradle file:

The key Lint options we are concerned with are:

  • abortOnError: whether lint should set the exit code of the process if errors are found.
  • quiet: whether to turn off analysis progress reporting.
  • lintConfig: the default configuration file to use.

Your lint.xml file can include issues you want Lint to ignore or modify, such as the example below:

You can run Lint manually from Android Studio by clicking on the Analyze menu, choosing Inspect Code… (the inspection scope is the whole project), and then clicking on the OK button to proceed.

You can also run Lint by visiting the Gradle tool window, opening the verification group, and then clicking on lint. Finally, you can run it via the command line.

On Linux or Mac:

A report will also be generated when the task has finished executing, which is available at app module > build > outputs > lint-results.html.

Checkstyle

Given rules you specify in an XML file to enforce a coding standard for your project, Checkstyle enforces those rules by analysing your source code and compares them against known coding standards or conventions.

Checkstyle is an open-source tool that is actively maintained by the community. This means you can create your own custom checks or modify existing ones to suit your needs. For example, Checkstyle can run a check on the constant names (final, static, or both) in your classes. If your constant names do not stick to a rule of being in uppercase with words separated by an underscore, the problem will be flagged in the final report.

private final static String myConstant = “myConstant”;

private final static String MY_CONSTANT = “myConstant”;

Integrating Checkstyle

I’ll show you how to integrate Checkstyle into our Android Studio project and demonstrate a practical example.

First, we need to create our coding rules. Inside checkstyle.xml, we create some Checkstyle configuration rules that will be run against our code.

In the above code, we include the rules or checks we want Checkstyle to validate in our source code. One rule is AvoidStarImport which, as the name says, checks if your source code included an import statement like java.util.*. (Instead, you should explicitly specify the package to import, e.g. java.util.Observable.)

To run this check, we need to create a Gradle task. So visit the quality.gradle file and create a task called checkstyle:

task checkstyle(type: Checkstyle) <

description ‘Check code standard’

Notice that in the code above, we first applied the Checkstyle Gradle plugin. We gave it a description and added it to an already predefined Gradle group called verification.

  • configFile: the Checkstyle configuration file to use.
  • IgnoreFailures: whether or not to allow the build to continue if there are warnings.
  • include: the set of include patterns.
  • exclude: the set of exclude patterns. In this case, we don’t scan generated classes.

Finally, you can run the Gradle script by visiting the Gradle tool window on Android Studio, opening the verification group, and then clicking on checkstyle to run the task.

You can use command line to execute checkstyle task

After the task has finished running, a report will be generated, which is available at app module > build > reports > checkstyle. You can open checkstyle.html to view the report.

A Checkstyle plugin is freely available for Android Studio or IntelliJ IDEA. It offers real-time scanning of your Java files.

FindBugs

FindBugs is another free static analysis tool which analyses your class looking for potential problems by checking your bytecodes against a known list of bug patterns. Some of them are:

  • Class defines hashCode() but not equals(): A class implements the hashCode() method but not equals() — therefore two instances might be equal but not have the same hash codes. This falls under the bad practice category.
  • Bad comparison of int value with long constant: The code is comparing an int value with a long constant that is outside the range of values that can be represented as an int value. This comparison is vacuous and possibly will yield an unexpected result. This falls under the correctness category.

FindBugs is an open-source project, so you can view, contribute or monitor the progress of the source code on GitHub.

Источник

Обеспечить высокое качество андроид код с инструменты статического анализа

Russian (Pусский) translation by Shaun Murphy (you can also view the original English article)

В сегодняшнем уроке, мы узнаем о том, как обеспечить высокое качество кода Android в наши проекты, используя некоторые инструменты статического анализа кода для Java. Мы будем смотреть на Checkstyle, в FindBugs, PMD, и Android-студия корпит—все из них бесплатные и с открытым исходным кодом!

Читайте также:  Прочее память андроид как почистить

Какие Инструменты Статического Анализа Кода?

Это инструменты, которые анализируют и анализируют исходный код без их фактического выполнения. Цель состоит в том, чтобы найти потенциальных уязвимостей, таких как ошибки и недостатки безопасности. Популярный бесплатный статический анализатор кода, такие как FindBugs, не проверяет свой код на соответствие набору правил, который ваш код должен придерживаться—если код не следовать этим правилам, это признак того, что что-то может быть не так. Думаю, что инструментов статического анализа кода в качестве дополнительного компилятором, который выполняется перед финальной компиляции на язык системы.

Многие компании по разработке программного обеспечения требуют проекты проходят статические испытания анализ кода, в дополнение к делать ревью кода и модульное тестирование в процессе сборки. Даже разработчики проектов с открытым исходным кодом часто включают в себя один или более статический анализ кода шаги в процессе построения. Поэтому изучение статический анализ является важным шагом в написании качественного кода. Следует помнить, что статический анализ—также код, известный как «белого ящика» тестирование—не должна рассматриваться в качестве замены для модульного тестирования исходного кода.

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

Преимущества

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

Установки

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

Откройте Android Studio и внутри App модуль (в виде проекта), создайте новую папку и назовите ее code_quality_tools. Эта папка будет содержать файлы XML для анализа кода, а также будет иметь файл Gradle, качество.Gradle в, которой будет управлять нашей статические задачи анализа.

И, наконец, посетить свою сборку.Gradle в папке модуля приложение и включить эту строку в конец файла:

Здесь наши quality.gradle Gradle сценарий применяется со ссылкой на его расположение локального файла.

Checkstyle

Учитывая указанные правила в XML-файл, чтобы применить стандарт кодирования для вашего проекта, Checkstyle применяет эти правила, анализируя исходный код и сравнивает их с известными стандартами кодирования или конвенций.

Checkstyle-это инструмент с открытым исходным кодом, которая активно поддерживается сообществом. Это означает, что вы можете создавать свои собственные пользовательские проверки или изменять существующие, чтобы удовлетворить ваши потребности. Например, Checkstyle можете запустить проверку на имена констант (конечный, статичный, или оба) в ваших классах. Если ваши постоянные имена не придерживаться правило в верхнем регистре, слова разделяются символом подчеркивания, проблемы будут отмечены в итоговом отчете.

Интеграция Checkstyle

Я покажу вам, как интегрировать Checkstyle в нашей студии проект Android и продемонстрировать на практическом примере.

Во-первых, нам нужно создавать свои правила кодирования. Внутри checkstyle.xml мы создаем некоторые правила конфигурация Checkstyle, который будет выполняться наш код.

В приведенном выше коде, мы включаем правила или проверяет, мы хотим Checkstyle, чтобы проверить наш исходный код. Одно правило AvoidStarImport, который, как следует из названия, проверяет, если ваш исходный код включен оператор импорта, как Java.утиль.*. (Вместо этого вы должны явно указать пакет для импорта, например, Java.утиль.Наблюдаема.)

Некоторые правила имеют свойства, которые мы можем установить, как мы делали для ParameterNumber—это ограничивает количество параметров метода или конструктора. По умолчанию свойство Макс 7, но мы поменяли его на 6 вместо. Взгляните на некоторые из других проверок на сайте Checkstyle.

Чтобы выполнить эту проверку, нам необходимо создать задачи Gradle. Так что посетите качеством.файл Gradle и создать задачу checkstyle:

Обратите внимание, что в приведенном выше коде, мы впервые применили Checkstyle плагин Gradle в. Мы дали ей описание и добавил его в уже заранее определенной группы Gradle в называемой проверке.

Ключевые свойства задачи Checkstyle Gradle в нас интересует несколько:

  • конфигурационный файл: в Checkstyle файл с настройками.
  • IgnoreFailures: разрешать или не разрешать строить продолжать, если есть предупреждения.
  • включает: набор включить модели.
  • исключить: набор исключают моделей. В данном случае, мы не сканируем созданных классов.

Наконец, вы можете запустить скрипт Gradle посетив окне утилиты на Android Gradle в студии, открытие группы проверки, а затем нажав на checkstyle для выполнения задачи.

Другой способ заключается в использовании командной строки:

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

Плагин Checkstyle свободно доступен для Android Studio или IntelliJ идея. Он предлагает сканирование в режиме реального времени Java-файлы.

PMD-это другое открытым исходным кодом инструмент анализа, который анализирует исходный код. Он находит общие недостатки как неиспользуемые переменные, пустые блоки catch, ненужное создание объекта и так далее. ПМД имеет множество наборов правил, которые вы можете выбрать из. Пример правила, которое является частью набора правил проектирования:

  • SimplifyBooleanExpressions: избежать ненужных сравнений в логических выражениях, которые усложняют простой код. Пример:

ПМД настраивается с помощью файла pmd.xml . Внутри его, мы будем включать некоторые правила конфигурации, такие как те для Андроид, нейминг, и дизайн.

Как мы это делали для Checkstyle, мы также должны создать задачу ПМД Градля для проверки должны быть выполнены внутри качества.файл Gradle.

ПМД также доступна в виде плагина Gradle в.

Ключевые свойства задач, которые мы создали, являются:

  • ruleSetFiles: настраиваемые правила набора файлов, которые будут использоваться.
  • источник: источником для этой задачи.
  • отчеты: отчеты должны быть созданы в данной задаче.
Читайте также:  Инстаграм для андроида хуже

Наконец, вы можете запустить скрипт Gradle посетив окне инструмента Gradle, а открыв папку группы проверки, а затем нажав на ПМД для выполнения задачи. Или вы можете запустить его через командную строку:

Отчет также будет создан после выполнения задания, которое доступно в App модуль > построить > отчеты > ПМД. Также существует плагин для IntelliJ доступен ПМД или Android Studio для вас, чтобы загрузить и интегрировать, если хочешь.

В FindBugs

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

  • Класс определяет hashCode (), но не равен(): класс реализует метод hashCode (), но не равен()—таким образом, в двух случаях может быть равной, но не имеют одинаковые хэш-коды. Это подпадает под категорию плохой практикой.
  • Плохое сравнение int значение с длинными постоянные: код сравнивает значение int с длинной константой, которая находится вне диапазона значений, которое может быть представлено как значение типа int. Это сравнение-бессмысленно, и, возможно, принесут неожиданный результат. Это попадает под категорию правильность.
  • Теста нет тестов: класс теста в JUnit, но не реализовали методы испытаний. Этот шаблон тоже под категорию правильность.

FindBugs-это проект с открытым исходным кодом, так что вы можете просматривать, участвовать или следить за ходом исходный код на GitHub.

В файле findbugs-exclude.xml мы хотим это предотвратить, в FindBugs от сканирования некоторых классов (используя регулярные выражения) в наших проектах, таких как автоматически сгенерированные классы ресурсов и автоматически проявляться классов. Также, если вы используете Кинжал, мы хотим в FindBugs не для проверки сгенерированных классов Кинжал. Мы можем также сказать в FindBugs, чтобы игнорировать некоторые правила, если мы хотим.

И, наконец, мы будем включать задания FindBugs в качество.Gradle в:

В первой строке выше, мы обратились в FindBugs плагин Gradle и затем создал задачу в FindBugs. Ключевые свойства задачи в FindBugs мы очень волнуют:

  • классы: классы должны быть проанализированы.
  • усилие: анализ уровня усилий. Указанное значение должно быть одной из мин, по умолчанию, или Макс. Следует помнить, что более высокие уровни повышения точности и найти больше ошибок в стоимости времени выполнения и потребления памяти.
  • reportLevel: приоритет порог для сообщений об ошибках. Если установлен низкий, сообщили все ошибки. Если установлен средний (по умолчанию), сообщил, средним и высоким приоритетом ошибок. Если установлен высокий уровень, сообщается только ошибок с высоким приоритетом.
  • команду excludefilter: имя фильтр, задающий жучки исключить из сообщается, что мы уже создали.

Затем вы можете запустить скрипт Gradle, посетив окне инструмента Gradle, а открыв папку группы проверки, а затем нажав на FindBugs, не для выполнения задания. Или запустить его из командной строки:

Отчет также будет сгенерировано, когда задача завершит выполнение. Это будет доступно в App модуль > построить > отчеты > в FindBugs. Плагин FindBugs-это еще свободно доступен плагин для скачивания и интеграция с IntelliJ идея или Android студия.

Линт Андроид

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

Чтобы настроить Линт, вы должны включить lintOptions <> блок в модуле построения уровня.файл Gradle:

Ключевые параметры Линт нас интересует, являются:

  • abortOnError: то ли ворсинки должны установить код выхода из процесса, если нашли ошибки.
  • тихий: можно ли отключить анализ докладов о ходе работы.
  • lintConfig: по умолчанию конфигурационный файл.

Ваш lint.xml файл может включать в себя вопросы, которые вы хотите Линт игнорировать или изменять, как в примере ниже:

Вы можете запустить Линт вручную из Android Studio, нажав в меню «анализ» выбираем код проверить. (объема контроля является весь проект), а затем нажав на кнопку ОК, чтобы продолжить.

Вы также можете запустить Линт, посетив окне инструмента Gradle, а открытие группы проверки, а затем нажав на Линт. Наконец, вы можете запустить его через командную строку.

На Linux или Mac:

Отчет также будет сгенерировано, когда задача завершит выполнение, которое доступно в App модуль > построить > выходы > lint-results.html.

Бонус: StrictMode

StrictMode является разработчиком инструмент, который помогает предотвратить разработчики проекта делают все случайные вспышки ввода/вывода или сетевого ввода-вывода в основном потоке, потому что это может привести к тому, что приложение было вяло и не отвечает. Это также помогает в предотвращении АНР (приложение не отвечает) диалоги с появляться. С вопросами StrictMode исправлена, приложения станут более отзывчивыми и пользователь будет наслаждаться гладкой опыт. StrictMode использует два набора политик для обеспечения соблюдения своих правил:

  • Политика ВМ: защищает от плохой практикой программирования, например, не закрывая объекты SQLiteCursor или любой закрывающиеся объект, который был создан.
  • Резьба политики: выходит для таких операций, как вспышка ввода-вывода и ввода-вывода выполняются на поток основного приложения, а не в фоновом потоке.

Приведенный выше код может быть либо в приложении, Активность, или другой компонент приложения onCreate() метод.

Вы можете узнать больше о StrictMode здесь на Envato Tuts+, и.

Образец проекта Android реализует все вышеперечисленное, включая наборы правил из инструментов для типичного проекта Android можно найти в данном посте в GitHub РЕПО.

Заключение

В этом уроке вы узнали о том, как обеспечить высокое качество Android код, используя средства статического анализа кода: что они собой представляют, преимущества их использования, и как использовать Checkstyle, FindBugs, не, Линта, ПМД и StrictMode в приложении. Идти вперед и дать эти средства попробовать—вы можете обнаружить некоторые проблемы в коде, которые вы никогда не ожидали.

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

Источник

Оцените статью