Splash activity Uncaught exception handling + logging Кастомизация билд-системы android-проекта Автоматизированное UI-тестирование (Selenium like) Декомпиляция.

Презентация:



Advertisements
Похожие презентации
ArtfulBits inc. aiMinesweeper. Первая в Украине игра для Android. Android custom components Anti-piracy движение Готовые решения для Android-разработчиков.
Advertisements

Saint Petersburg, 2011 Java Lecture #06 Exceptions.
Не даем роботу падать Тестирование Android приложений Дмитрий Ситников.
Часть 1. Основы ООП Исключения.. Структурный подход Неисправимые ошибки – вывести информацию и умереть. Исправимые ошибки – уведомить вызывающую.
Проектирование и анализ ПО Дмитриев Андрей Владиславович
Selenium: Начало.. Особенности WEB-приложений Множество браузеров, отличающиеся реализацией Отсутсвие строгих правил в HTML Различные конфигурации на.
Программная инженерия Дмитриев Андрей Владиславович
Обзор возможностей Инверсия управления Аспектно-ориентированное программирование.
Решения для автоматизации тестирования Web-приложений на базе Selenium Быкадоров Дмитрий. ЗАО Мастерхост.
JSF/JSP/Tomcat Введение в технологию. JavaServer Faces JSF - фреймворк для веб-приложений, написанный на Java JSF основывается на использовании компонентов.
2.4. Проект C++Builder Стандартный состав проекта: Unit1.cpp –программный файл реализации модуля, связанный с первой формой (Unit i.cpp – программный.
Исключения в Java. Исключения – это механизм взаимодействия между кодом, приведшим к ошибке, и кодом, обрабатывающим ошибку Исключение выбрасывается (throw),
Обзор возможностей Инверсия управления Аспектно-ориентированное программирование.
Test 6 Вопрос 1. Как можно уничтожить объект в Java? a)присвоить null всем ссылкам на объект b)вызвать Runtime.getRuntime().gc() c)вызвать метод finalize()
Основано на теории, практике, размышлениях, Lessons Learned.
Java: интерфейсы, наследование, обработка исключительных ситуаций Вашенков Олег Евгеньевич.
Практическое использование Java Макаревич Л. Г.. Инсталляция Java Документация в docs Прописать PATH (каталог bin в JSDK) Прописать CLASSPATH (путь к.
Пользовательские действия (custom actions) в JSP. JSTL.
Java Advanced Apache Ant. 2 СПбГУ ИТМО Georgiy KorneevJava Advanced / Описание и проверка структуры XML Содержание 1.Введение 2.Задания 3.Цели 4.Проекты.
Team System - фреймворк для автоматизации тестирования от Microsoft Футорняк Елена Apriorit Сообщество Тестировщиков Днепропетровска 29/09/2011.
Транксрипт:

Splash activity Uncaught exception handling + logging Кастомизация билд-системы android-проекта Автоматизированное UI-тестирование (Selenium like) Декомпиляция apk-файлов Начинающим разработчикам

Задача при запуске приложения загрузить какие-либо данные с сервера, либо синхронизироваться с сервером Splash activity входная точка приложения, выполняет эти операции, потом переходим на главный скрин приложения

public class Splash extends GenericActivity public void onCreate() { // Можем показывать пользователю картинку либо progress bar пока идёт загрузка setContentView(R.layout.splash); new AsyncTask () protected void doInBackground() { synchronizeWithServer(); loadData(); // Из AsyncTask можно обновлять UI c помощью // publishProgress(int progress); protected void onPostExecute() { // После выполнения синхронизации запускаем // главный скрин приложения startActivity(MainActivity.class); } }.execute(); } }

Логирование в файл во время работы приложения Обработчик для uncaught исключений. Отправка с логами при возникновении исключения. Удобно для отладки. Thread.setDefaultUncaughtExceptionHandler(new DebugExceptionHandler()); public class DebugExceptionHandler implements UncaughtExceptionHandler public void uncaughtException(Thread thread, Throwable throwable) { // Логируем ошибку, пишем в лог-файл Logger.e(getClass(), getStackTrace(throwable)); // Отправляем отчёт на почту Logger.sendReport(); // Удаляем log-файл Logger.clear(); } }

Задача приложение с большим объёмом графики, нужна поддержка устройств с различными разрешениями, для которых много графики различается Версии 320x240, 480x320, 800x480, 1024x600 (android 2 и 3), 1280х768 (android 2 и 3) Объём графики: 4 Мб для каждой версии Общая графика: 1.5 Мб Графика для каждого разрешения: 2.5 Мб Итого: 19 Mб! в основном не нужная пользователю графика пользователь не захочет скачивать приложения из-за большого объёма При добавлении новых разрешений устройств, объём приложения будет только расти

Решение отдельная apk для каждого разрешения только со своей графикой Реализация Сборка приложения ant-скриптом с подставлением нужной графики, bat-файл для сборки семи apk

Утилита для автоматизации сборки приложений (аналог утилиты make в UNIX) Процесс сборки описывается в XML-файле build.xml

Targets (функции) Откомпилировать весь проект, очистить временные файлы, … Между ними можно устанавливать зависимости Tasks (элементарные действия) javac – откомпилировать java-код copy – скопировать файлы delete – удалить файлы exec – вызвать программу и т.д.

Скрипты находятся в папке с SDK …/Android/android-sdk/tools/ant Типы скриптов: main_rules (приложения) test_rules (тестовые проекты) lib_rules (библиотеки) Targets, которые можно переопределить -pre-build (перед началом сборки) -pre-compile -post-compile

MyAndroidApplication /android2 /res_320x240 /drawable /values /res_480x320 /res_800x480 /res_1024x700 /res_1280x768 /src /assets /bin /build /gen /src /res /drawable /values /lib AndroidManifest.xml build.xml Скрипт копирует содержимое res_320x240 в res и выполняет сборку приложения

call ant release -Dresolution.current=320x240 -Dsdk.current=android2 call ant release -Dresolution.current=480x320 -Dsdk.current=android2 call ant release -Dresolution.current=800x480 -Dsdk.current=android2 call ant release -Dresolution.current=1024x600 -Dsdk.current=android2 call ant release -Dresolution.current=1280x768 -Dsdk.current=android2 call ant release -Dresolution.current=1024x600 -Dsdk.current=android3 call ant release -Dresolution.current=1280x768 -Dsdk.current=android3 Собираются семь apk-файлов за один запуск!

Как Selenium, только для Android Пишем тест-кейсы, фреймворк прокликивает приложение Не обязательно иметь исходный код приложения, достаточно apk

public class MyApplicationUITest extends ActivityInstrumentationTestCase2 { private Solo solo; public NotePadTest() { super("com.mycompany.myapp.activity", MyActivity.class); } public void setUp() throws Exception { solo = new Solo(getInstrumentation(), getActivity()); } // Тут пишем тесовые public void tearDown() throws Exception { try { //Robotium will finish all the activities that have been opened solo.finalize(); } catch (Throwable e) { e.printStackTrace(); } getActivity().finish(); super.tearDown(); } }

@Smoke public void testAddNote() throws Exception { // Go to help page ImageView navigation = (ImageView) solo.getView(R.id.view_navigation); // View about screen solo.clickOnView(navigation); solo.assertCurrentActivity("help", HelpActivity.class); // Return from help to main screen TextView title = (TextView) solo.getView(R.id.view_navigation_title); solo.clickOnView(title); solo.assertCurrentActivity("MyActivity", MyActivity.class); } Пример тестового метода

Black box не знаем кода приложения и id элементов интерфейса White box есть исходный код, знаем id элементов пользовательского интерфейса сложней, если id меняются больше возможностей

assertCurrentActivity(String message, Class expected) clickLongOnScreen(int x, int y) clickOnScreen(int x, int y) ArrayList getAllOpenedActivities() sleep(int time) clickOnView(View view) enterText(EditText editText, String text) В документации ещё много интересных штук! drag(float fromX, float toX, float fromY, float toY, int stepCount)

Хочу посмотреть, как у них сделано… 1. Распаковываем apk-файл обычным winrar-ом classes.dex, xml: binary, картинки 2. Декомпилируем classes.dex dex2jar (open source) 3. Просмотр jar-файлов JDGui (open source) Декомпиляция xml-файлов Apktool (open source)

Enviroment Android SDK, Eclipse + ADT plug-in, драйвера на телефон Что почитать developer.android.com – туториалы, документация vogella.de/android.html – хорошие туториалы stackoverflow.com – часто пользуюсь этим сайтом Базовые понятия Activity, Intent, layouts (LinearLayout, RelativeLayout) работа с ресурсами (string, dimen, images, layouts) AndroidManifest.xml Core Java ООП, паттерны проектирования, unit-тестирование (JUnit 3,4) Девайс или эмулятор

Спасибо за внимание!