Приложения Викимедиа / Команда / Android / Взлом приложений

  1. Мы приветствуем добровольные взносы!
  2. Открытые ошибки и запросы функций
  3. Настройте среду разработки
  4. Добавьте свой SSH-ключ в аккаунт GitHub
  5. Установите JDK 8
  6. Скачайте и установите Android Studio
  7. Скачать исходный код проекта
  8. Открыть в Android Studio
  9. Сторонние плагины
  10. Внесите изменения и отправьте на проверку через GitHub
  11. Автоматизированные тесты
  12. Использование командной строки
  13. Запустить конфигурации
  14. Android инструментарий
  15. testAll
  16. Скриншот тестов
  17. Условные обозначения
  18. Помогите сделать это лучше!
  19. аппендикс
  20. Отладка WebView в Chrome
  21. Полезные команды Gradle
  22. Создание подходящей работы в Ubuntu 64-bit
  23. Работа с Vagrant и контент-сервисом
  24. Конфигурация бета-кластера
  25. Локальные MediaWiki с рабочим английским конфигом Content Service
  26. Конфигурация менеджера аутентификации
  27. Конфигурация локальной службы контента (не работает)
  28. Локальный бродяга с локальной конфигурацией Content Service (не работает)
  29. Смотрите также
  30. Устранение неполадок при настройке скрипта
  31. Удаленная настройка
  32. Очистка кэшированной конфигурации (примечание: требуется доступ к рабочей оболочке)
  33. Переводы строковых ресурсов
  34. Альфа-сборочный сервер

Android-приложение Wikipedia является полностью открытым исходным кодом и приветствует вклады всех.

Мы приветствуем добровольные взносы!

Следуйте приведенным ниже инструкциям, чтобы начать, и не стесняйтесь пинговать любого члена команды разработчиков WMF Android (dbrant, cooltey, sharan) на # Викимедиа-мобиль соединять для оказания помощи.

Вы можете найти наши соглашения о кодировании Вот ,

Открытые ошибки и запросы функций

Рабочие элементы отслеживаются на нашем рабочая доска , Вкладчики приложения впервые рекомендуется рассмотреть Легко задача. Неназначенные задачи в столбцах «Журнал ошибок», «Технический долг» и «Продукт», как правило, подходят для разработки и примерно упорядочены по убыванию. (Пожалуйста, не работайте над задачами в других столбцах, таких как «Открытые вопросы» и «Требуется сортировка».)

Настройте среду разработки

Создать учетную запись GitHub

Увидеть https://github.com/ ,

Добавьте свой SSH-ключ в аккаунт GitHub

Увидеть Добавление нового ключа SSH в вашу учетную запись GitHub

Установите JDK 8

JDK 8 необходим для сборки приложения для Android. Чтобы найти вашу текущую версию:

$ javac-версия javac 1.8.0_102

OpenJDK с открытым исходным кодом можно установить в Debian / Ubuntu, выполнив sudo apt install openjdk-8-jdk. Oracle JDK с закрытым исходным кодом может быть установлен из Вот ,

Скачайте и установите Android Studio

https://developer.android.com/sdk/index.html

Запустите мастер установки. Стандартная установка в порядке. Установка займет некоторое время.

Скачать исходный код проекта

С учетными данными SSH (требуется GitHub аккаунт ):

git clone [email protected]: wikimedia / apps-android-wikipedia.git

Или анонимно:

git clone https://github.com/wikimedia/apps-android-wikipedia.git

Открыть в Android Studio

Откройте Android Studio, выберите «Открыть существующий проект Android Studio» в главном окне и выберите папку хранилища в файловом браузере.

Важное замечание : Если вам будет предложено обновить компоненты (например, Gradle или плагин Android Gradle) во время первоначальной сборки, нажмите «Не напоминать мне больше об этом проекте». Мы обновляем эти компоненты в специальных исправлениях после тщательного изучения замечаний к выпуску, но они имеют возможность показываться в несвязанных исправлениях, если включена автоматическая подсказка IDE.

Сторонние плагины

Checkstyle-IDEA

IntelliJ-х Checkstyle-IDEA Плагин полезен для гарантии того, что ваш код будет соответствовать рекомендациям по стилю проекта. Установите из Android Studio> Файл> Настройки> Плагины, перезапустите, чтобы завершить установку, затем добавьте пользовательский файл конфигурации для проекта:

Android Studio> Файл> Настройки> Другие настройки> нажмите «+» в верхней панели и выберите /gradle/src/checkstyle.xml.

Убедитесь, что вы активировали новый файл конфигурации, установив флажок рядом с ним, чтобы наши правила стиля проверки были включены и отклонения отображались как ошибки в редакторе кода.

Внесите изменения и отправьте на проверку через GitHub

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

Если изменения не связаны с какой-либо задачей в Phabricator, вы можете создать ветку со значимым именем.

Внесите и зафиксируйте ваши изменения и предоставьте сообщение о фиксации, описывающее ваши изменения. (Убедитесь, что сообщение о фиксации содержит разрывы строк для строк длиной более 75 символов.) Если ваша работа связана с конкретной задачей в Phabricator, включите в качестве последней строки сообщения о фиксации следующую строку:

Ошибка: Txxxxxx (где xxxxxx представляет номер задачи Phabricator, например, T149500).

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

git push --set-upstream origin BRANCHNAME

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

Скорее всего, вы будете получать запросы на обновление и повторную отправку патча. (Это случается со всеми нами!) Внесите эти изменения локально и используйте git commit для отправки обновлений и убедитесь, что коммиты находятся в той же ветке.

После отправки новой ветки в GitHub вы можете создать запрос на извлечение для других разработчиков, чтобы просмотреть изменения. Для получения дополнительной информации см. Создание запроса на получение


Совет: во избежание сбоев тестов CI рекомендуется запустить checkstyle (./gradlew checkstyle) и набор модульных тестов (./gradlew testDevDebug или ./gradlew tDD) из корня проекта перед отправкой на GitHub.

Автоматизированные тесты

Кодовая база поддерживает два вида тестов:

  1. JVM JUnit (предпочтительно, вне устройства, быстро, менее хлопотно)
  2. Инструментарий Android (на устройстве)

Использование командной строки

  • JVM JUnit ./gradlew testDevDebug
  • Инструментарий Android ./gradlew connectedDevDebugAndroidTest
  • Инструментарий JVM JUnit и Android (включая скриншоты) ./gradlew testAllDevDebug

подсказки

  • При запуске testAll * добавьте флаг --continue, чтобы запускать тесты инструментов Android, даже если тесты JVM JUnit не пройдены.

Настройка Android Studio

Оба вида тестов поддерживаются в Android Studio. Вы можете переключаться между ними, изменяя тестовый артефакт из View -> Tool Windows -> Build Variants. «Модульные тесты» - это тесты JVM JUnit, а «Тесты Android Instrumentation» - это то, что написано. Конфигурация запуска должна быть выполнена до выполнения тестов.

Запустить конфигурации

JVM JUnit
  1. Нажмите Выполнить -> Изменить настройки ...
  2. Нажмите «Добавить новую конфигурацию» (большой значок «плюс») и выберите Android JUnit.
  3. Назовите конфигурацию.
  4. Измените вид теста на Все в пакете.
  5. Установите пакет в org.wikipedia.
  6. Убедитесь, что рабочий каталог установлен в $ MODULE_DIR $.
  7. Установите параметр Использовать classpath модуля для приложения.

Если вы не можете запустить тест JUnit на основе указанной выше конфигурации, попробуйте удалить папку .idea / и .gradle /, а затем пересобрать проект.

Android инструментарий

Android инструментарий

testAll

testAll

Скриншот тестов

Эспрессо-управляемые тесты пользовательского интерфейса Android были созданы в основном для мониторинга регрессий пользовательского интерфейса. Узнайте больше о тестировании эспрессо Вот ,

Вы можете найти все наши тесты эспрессо в папке проекта, расположенной по адресу androidTest / java / org / wikipedia / espresso.

Настроить :

1. Конфигурация устройства:

Снимите флажок «Имеет аппаратные кнопки (Назад / Домой / Меню). Это избавляет от системной навигационной панели, позволяя экрану приложения занимать все пространство.

2. Уровень API: поскольку разные платформы дают разные результаты, тесты должны выполняться на Android O (API 26).

Тестирование:

Тесты скриншотов при запуске на указанном эмуляторе последовательно делают следующее:

1. Перед выполнением теста (-ов) пользовательские данные приложения очищаются и проверяется конфигурация устройства. Это защищает сплоченность каждого теста, позволяя выполнять их в любом порядке, на уровне набора классов, по отдельности или все сразу. Все ранее созданные изображения сравнения сравнения [объясненные на шаге 5] будут удалены.

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

3. Запускает приложение и делает снимки экрана с предопределенными состояниями приложения и сохраняет его в папке устройства wikipedia-app-tests .

4. Сравнивает их попиксельно с эталонными скриншотами, которые были сохранены в androidTest / assets / espresso / screenshots.

5. Допуск теста установлен на 0%, что гарантирует, что тест не пройден даже при разнице в пикселях, между эталонными и тематическими снимками экрана. В случае сбоя, изображение сравнения сравнения создается в папке устройства wikipedia-app-tests / сравнение

Пример: ссылка на скриншот вкладки «История»

Тестовый скриншот, который имеет другой формат даты

Сравнительный анализ дал:

Обновление тестов по мере необходимости:

При добавлении кода, который изменяет пользовательский интерфейс, обязательно обновите скриншоты тестов. Обновление должно следовать за этими шагами:

1. Запустите тесты на новом экране изменений. Ваши тесты не пройдут в результате преднамеренного изменения пользовательского интерфейса.

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

3. Используйте онлайн-инструмент, чтобы сокрушить недавно созданные скриншоты [найденные в папке вашего устройства wikipedia-app-tests]. Обновите ссылку с этим сжатым изображением в androidTest / assets / espresso / screenshots.

Условные обозначения

  • Java-код должен работать чисто против Checkstyle
  • JavaScript должен работать правильно против JSHint
  • Мы работаем, чтобы быть без ворса! В настоящее время Android Linting имеет много нарушителей, но новые вклады должны помочь нам продвинуться к нулю.
  • Изменения Python должны выполняться корректно против flake8.
  • Все юнит-тесты Android и JVM должны пройти.
  • Сообщения Git commit должны соответствовать Руководство по Gerrit / Commit message
  • Документация должна соответствовать Википедия руководство по стилю
  • При внесении изменений в любой файл strings.xml необходимо добавить соответствующий пояснительный текст в values-qq / strings.xml
  • Сторонние библиотеки должны соответствовать критерии приемки
  • Патчи должны соответствовать нашим соглашения по кодированию

Помогите сделать это лучше!

Выберите задачу от Phabricator:

Тестирование:

Смотрите ожидающие / недавние обзоры кода:

аппендикс

подсказки

Оптимизация сборок Gradle

Система сборки Gradle требует общеизвестно большого количества системных ресурсов, но есть способы ускорить ее и обеспечить ее последовательную работу. Добавьте следующие строки в файл ~ / .gradle / gradle.properties:

org.gradle.daemon = true org.gradle.parallel = true org.gradle.configureondemand = true org.gradle.jvmargs = -Xmx2048M

Отладка WebView в Chrome

Википедия для Android широко использует WebViews. Чтобы отладить действие WebView, перейдите в Google Chrome к устройствам chrome: // inspect / #, а затем нажмите верхнюю ссылку «inspect» в разделе «WebView in org.wikipedia». Оттуда вы можете отлаживать WebView, как и любой другой веб-сайт в Chrome. ,

Полезные команды Gradle

Если вы предпочитаете командную строку, используйте скрипт-оболочку в корне репозитория:

./gradlew

Чтобы запустить чистую отладочную сборку:

./gradlew -q cleanasseDevDebug

Вы можете пропустить чистую часть обычно, что делает ее намного быстрее (от 1 мес. С 5 до 7 с на моей коробке):

./gradlew -q assemblyDevDebug

Чтобы установить сборку на устройство / эмулятор:

./gradlew -q installDevDebug

Чтобы увидеть вывод ProGuard:

./gradlew clean --info proguardDevRelease

Чтобы запустить контрольный стиль:

./gradlew checkstyle

Чтобы запустить Lint:

./gradlew lintDevDebug

Чтобы обновить зависимости (обычно не нужны):

./gradlew --refresh-dependencies

Чтобы перечислить зависимости:

./gradlew app: зависимости --configuration compile

Создание подходящей работы в Ubuntu 64-bit

Если вы используете 64-битные версии Ubuntu, вы можете увидеть эту ошибку при сборке с gradle: «Невозможно запустить программу» ~ / .android-sdk / build-tools / 22.0.1 / aapt ': error = 2, No такой файл или каталог ". Чтобы исправить эту ошибку, установите следующие пакеты:

sudo apt-get установить lib32stdc ++ 6 lib32z1

Работа с Vagrant и контент-сервисом

  • Чтобы работать с локальным экземпляром Vagrant, измените параметр разработчика mediaWikiBaseUri и при необходимости отключите mediaWikiBaseUriSupportsLangCode.
  • Для работы с локальным экземпляром RESTBase обновите RESTBaseUriFormat и при необходимости включите useRestbase_setManually.
  • mediaWikiBaseUriSupportsLangCode контролирует, является ли префикс вики-языка mediaWikiBaseUri.
  • mediaWikiBaseUri и mediaWikiBaseUriSupportsLangCode являются вторым аргументом RESTBaseUriFormat.
  • useRestbase_setManually и useRestbase могут влиять на то, используется ли клиент MediaWiki или RESTBase для внутреннего использования. Когда клиент MediaWiki форсируется, RESTBaseUriFormat не используется.
  • Викисловарный домен в настоящее время жестко запрограммирован. Пример: HTTP: // локальный: 6927 / en.wiktionary.org / v1 / страница / определение / собака
  • Рекомендуется полностью завершить процесс приложения после изменения любого из этих параметров.

Конфигурация бета-кластера

Пример:

RESTBaseUriFormat (по умолчанию):% 1 $ s: //% 2 $ s / api / rest_v1 / mediaWikiBaseUriSupportsLangCode (по умолчанию): включено mediaWikiBaseUri (не по умолчанию): https://wikipedia.beta.wmflabs.org

Локальные MediaWiki с рабочим английским конфигом Content Service

Пример:

RESTBaseUriFormat (не по умолчанию):% 1 $ s: //en.wikipedia.org/api/rest_v1/ mediaWikiBaseUriSupportsLangCode (не по умолчанию): отключено mediaWikiBaseUri (не по умолчанию): HTTP: // локальный: 8080

Конфигурация менеджера аутентификации

RESTBaseUriFormat (по умолчанию):% 1 $ s: //% 2 $ s / api / rest_v1 / mediaWikiBaseUriSupportsLangCode (не по умолчанию): отключено mediaWikiBaseUri (не по умолчанию): http://authmanager.wmflabs.org

Конфигурация локальной службы контента (не работает)

Пример:

useRestbase_setManually (не по умолчанию): включено useRestbase (по умолчанию): включено RESTBaseUriFormat (не по умолчанию): HTTP: // локальный: 6927 /% 2 $ s / v1 / mediaWikiBaseUriSupportsLangCode (по умолчанию): включено mediaWikiBaseUri (по умолчанию): https://wikipedia.org

Это не совсем работает в данный момент. Приложение пытается использовать фид / конечную точку RESTBase, когда страница / необходима для контентной службы.

Локальный бродяга с локальной конфигурацией Content Service (не работает)

useRestbase_setManually (не по умолчанию): включено useRestbase (по умолчанию): включено RESTBaseUriFormat (не по умолчанию): HTTP: // локальный: 6927 /% 2 $ s / v1 / mediaWikiBaseUriSupportsLangCode (не по умолчанию): отключено mediaWikiBaseUri (по умолчанию): HTTP: // локальный: 8080

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

Смотрите также

Сценарии

Настроить

cd скрипты virtualenv -p python2 .env. .env / bin / activit pip install -r needs.txt

Примечание: модуль Python lxml, похоже, зависит от системных пакетов в Debian и Ubuntu. Если вам не хватает заголовков, попробуйте apt установить libxml2-dev libxslt1-dev python-dev.

Устранение неполадок при настройке скрипта

На OS X некоторые из нас столкнулись с проблемой, что `libxml` не может быть скомпилирован. Помогло выполнение следующей команды:

xcode-select --install

Если это все еще не работает, вы также можете попробовать:

pip install sh jinja2 unicodecsv

Различные CSS-файлы для этого проекта создаются файлами * .less, найденными в MobileFrontend а также Мобильное приложение Расширения MediaWiki.

Вам понадобится установка MediaWiki, MediaWiki-Vagrant рекомендуется, чтобы генерировать их.

В каталоге ./vagrant:

vagrant enable-роль mobileapp mobilefrontend vagrant предоставление

Измените URL в скриптах / make-css-assets.bash на http://127.0.0.1:8080/w вместо битов url, затем запустите скрипт и протестируйте.

Примечание. Возможно, вашей системе не удалось запустить эмулятор Android и экземпляр Vagrant / VirtualBox одновременно.

Части кода JavaScript выполняются внутри компонента WebView, который отображает статьи.

Этот код предварительно упакован с использованием хрюкать , который должен быть перезапущен каждый раз, когда главные файлы .js редактируются перед сборкой.

Подготовка:

Сначала установите инструмент Grunt CLI:

npm install -g grunt-cli

Установите зависимости для упаковки:

cd www npm install

Строительство:

cd www grunt

Это создаст выходные файлы в app / src / main / assets, которые будут включены в файл apk.

Хотите попробовать ссылку npm с локальным репозиторием wikmedia-page-library? Пожалуйста, обратитесь [1] и затем следуйте инструкциям выше.

скрипты cd python make-templates.py mv * .java ../app/src/main/java/org/wikipedia/staticdata/

Удаленная настройка

При запуске приложение пытается обновить свою конфигурацию, проверив Файл конфигурации JSON обновляется как часть Мобильное приложение расширение. Этот удаленный файл конфигурации обычно используется для управления EventLogging Частота дискретизации или развертывание новых функций постепенно.

На производственных вики-сайте Викимедиа файл находится по адресу https: // <host> /static/current/extensions/MobileApp/config/android.json.

На Бета кластер или локальная среда MediaWiki (например, MediaWiki-Vagrant ) с расширением MobileApp, файл доступен по адресу //<host>/w/extensions/MobileApp/config/android.json.

Увидеть T162164 подробности обработки статических файлов в производственной среде Викимедиа.

Очистка кэшированной конфигурации (примечание: требуется доступ к рабочей оболочке)

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

Для этого:

ssh tin echo "https://www.wikimedia.org/static/current/extensions/MobileApp/config/android.json" | mwscript purgeList.php --wiki = aawiki

Переводы строковых ресурсов

Строковые ресурсы приложения переведены сообществом добровольцев по адресу Translatewiki.net , Увидеть Перевод строковых ресурсов приложения (и, в частности, раздел Синхронизация TWN для Android ) для деталей.

Альфа-сборочный сервер

Увидеть Альфа-сборочный сервер ,

Хотите попробовать ссылку npm с локальным репозиторием wikmedia-page-library?

Новости

Как сбалансировать юзабилити и дизайн при создании сайта — User House
Красота или уродство в веб-дизайне всегда связаны с восприятием конкретного человека. То, что для одного «красиво», может быть «ужасным» для другого и наоборот. Но как же так получается, что многие популярные

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

Знакомство с юзабилити-тестированием сайта. // webknowledge.ru
Перевод статьи:   An Introduction To Website Usability Testing. Автор:   Thomas Churm. При создании нового сайта необходимо учитывать множество факторов. Для того чтобы у посетителей возникло

Специалист по web-usability – боец невидимого фронта
Ярослав Перевалов Что такое usability engineering? Часто ли вы, бродя по Сети, обращаете внимание на то, насколько качественно структурирована информация на сайте и насколько удобно устроена навигация?

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

25 советов как улучшить юзабилити (usability) вашего сайта. | Блог об интернет деятельности и трудовых буднях Максима Вячеславовича
Доброго времени суток, дорогие друзья! Сегодня мы поговорим с вами о такой важной вещи как U sability (юзабилити) сайта , о том, как улучшить данный фактор, зная его основные принципы и правила.

Что такое юзабилити и зачем оно нужно
Юзабилити включает простоту, удобство в пользовании, тестирование, проведение аудита проекта. Юзабилити сайтов, интернет-магазинов — это неотъемлимая часть выгодного ведения бизнеса. Задача юзабилити

Юзабилити тестирование сайта турагентства
«Когда информации много и она дешева, дорогим становится внимание». James Gleick Представим сайт, владелец которого считает его достаточно хорошим, удобным и привлекательным. Он размещает рекламные объявления

Юзабилити
Юзабилити (от англ. слова «usability» – практичность, простота использования) – это весьма распространенное ныне понятие объединяет максимальное удобство использования сайта и полезность информации, на

5 шагов для успешного юзабилити-тестирования приложения
Представьте: вы придумали и разработали мобильное приложение с приятным, на ваш взгляд, дизайном, удобным функционалом, полезными опциями, выпустили релиз продукта, но… Несмотря на мощную маркетинговую

Карта