Что нового готовит JDK 13?
Первые бета сборки JDK 13 уже доступны, можно пощупать. Релиз планируется в Сентябре 2019.
Из новинок: сырые строковые литералы (которые не вошли в JDK 12) и switch expressions.
Тег
Записей: 48
Первые бета сборки JDK 13 уже доступны, можно пощупать. Релиз планируется в Сентябре 2019.
Из новинок: сырые строковые литералы (которые не вошли в JDK 12) и switch expressions.
Когда вы получили IntPtr на нативный Android объект, то GC может в какой-то момент почистить её (скорей всего, после выхода из локального скопа). Из-за того, что я одну ссылка не сохранил, дебажил код много часов, чтоб причину крашей найти.
Ещё хуже то, что стектрейс при краше никак не помогает.
Все мы знаем, насколько важен компонент TextView. Вероятно, из визуальных элементов он используется чаще всего. Вот почему Google неустанно улучшает этот компонент. В новой версии SDK нам приготовил много вкусностей.
В Unity3d есть классы для работы с пушами под iOS. Но нет стандартных средств сделать тоже самое и под Android. Приходится писать свой плагин на Java, который затем можно закинуть в Plugins/Android и делать native вызовы к нему. Если вас интересует, как создать свой плагин (в частности, плагин для отправки локальных пушей), заходим под кат.
По установке Java какие-то длинные статьи пишут, что-то ручками вводить предлагают. Проще один раз скриптик написать. Только иногда версию Java менять, если есть необходимость.
Представьте себе компанию, у которой есть какое-то SDK для абстрактного устройства. После обновления прошивки этих устройств до последней версии начинают крашится некоторые приложения. Эта компания знает о проблеме, но не обновляет sdk для исправления оной. Да, речь про Google. Уже не первый раз сталкиваюсь с такой проблемой, когда их сорсы допиливать приходится =/

Google работает над новым набором инструментов для разработки под Android, который позволит сократить время сборки проекта, а так же уменьшить зависимости между другими инструментами. Были представлены Jack (Java Android Compiler Kit) and Jill (Jack Intermediate Library Linker) - два новых инструмента.
Пока что можно пощупать лишь первую экспериментальную версию для тестирования ваших приложений. В посте кратко расскажу о том, как работать с этой новой тулзой.
Android 5.0 Lollipop - крупнейшее обновление Android на сегодняшний день, включающее новый визуальный стиль, повышение производительности, и многое другое. Новый концепт Android 5.0 Lollipop будет применяться для смартфонов и планшетов, а также будет основной особенностью Android Wear.
Навигационные кнопки на экране были упрощены до базовых треугольника, круга и квадрата. Минимализм во все поля ~^__^~
Для начала разработки и тестирования на Android 5.0 Lollipop лучше глянуть поподробнее инфу по обновлению, почитать доки, посмотреть новые видео.
Возникла необходимость overscroll'а у ListView. Сделать так, чтобы работало на 2.3+, оказалось не так-то просто =/
Плюс решил ещё сделать фичу с замедлением, когда вы будто не скролите список, а именно тяните.
Компонент работает на Android устройствах с 2.3+
Очень хочется именно в Eclipse просмотреть какие-то файлы на устройстве или содержание таблиц базы данных. Просматривать файлы на самом телефоне не вариант. Так как же отобразить скрытые (и системные) директории в File Explorer в DDMS?
Довольно часто возникает необходимость растянуть изображение на всю ширину с подгоном по высоте.
Если делать с помощью стандартных MATCH_PARENT или WRAP_CONTENT, то ничего путного не выйдет. Что же делать?
Предпочтительный метод для задания положения MediaController - использовать метод setAnchorView. Вот только VideoView после загрузки всё сбивает, и MediaController может появится не там, где нам хочется.
Порой необходимо создавать элементы динамически, или же размер элементов может сильно варьироваться. Как же тогда организовать перенос элементов на другую строку? Ни LinearLayout, ни RelativeLayout этого не позволяют.
Много раз уже просили написать статью о том, как в приложении реализовать платное отключение рекламы. Вообще, реализовать рекламу легко, по In-app так же есть куча информации в официальной документации. Ну, если кому-то всё же статья пригодится, то хорошо.
Понадобилось для одной задачи получать данные из сервиса в сети. Но там была необходима аутентификация. Пару часов провозился пытаясь с хэдерами разобраться. Оказалось всё как обычно: есть уже готовые механизмы для этого.
Чтобы в приложении выполнять тяжелые задачи можно вводить отдельный поток и использовать Handler для обратной связи и обновления экрана. Для решения подобных задач сделали отдельный класс – AsyncTask. Т.е. его цель – это выполнение тяжелых задач и передача в UI-поток результатов работы. При этом нам не надо задумываться о создании Handler и нового потока. Для отправки запросов вроде как тоже рекомендуется использовать AsyncTask.
С момента публикации игры постоянно люди просили выложить исходники. Решил всё-таки поделиться ими. Может кому-нибудь и поможет в изучении LibGDX.
Решил всё-таки публиковать все уроки на github'е. И мне так работать проще, и людям удобнее, как мне кажется.
В прошлой статье показал, как можно работать с WAV и Ogg форматами в ndk с помощью OpenaAL. Вот только в той реализации файлы целиком в память грузились. Кое-что дописал для работы с WAV, теперь файл можно грузить кусками по мере необходимости.
Для порта игры пришлось работать с OpenAL. Можно конечно было выкинуть весь C++ код и переписать всю работу со звуков на Java, но это не интересно. Решил поделиться опытом и показать как на Android работать с OpenAL и форматами WAV, OGG.
В прошлых статьях показал, как вызвать C++ методы из Java и вызвать Java методы из C++. В данной статье покажу, как обратиться к ресурсам приложения из C++, используя AAssetManager из ndk.
В прошлой статье кратко рассмотрел Android NDK, показал как вызывать нативные методы из Java. Разумным продолжением той статьи будет описание того, как вызвать Java методы из C++.
Использование нативного кода, написанного на C или С++ — это тема, которую многие разработчики не затрагивают вовсе. Но порой использование C++ в приложениях намного упрощает/ускоряет разработку. В этой статье будут рассмотрены основные принципы работы с native кодом.
Обновил Eclipse, после чего перестал SDK Manager запускаться. Довольно странным способом решил проблему.
Ради интереса решил посмотреть сколько в принципе можно заработать на рекламе в не очень раскрученном приложении. Как раз дописывал Lode Runner'а, в него и запихнул. Решил показать, как добавить в свои игры на LibGDX рекламу.
В прошлой статье рассматривалась работа с ContactListener. Вот только примеры, которые я использовал, были не совсем верно выбраны. В Box2D есть намного более удобные средства для фильтрации столкновений, а именно - фильтры. О них и напишу в этот раз.
Прошлые статьи в целом были вводными. Но только при помощи них уже можно написать свою игру. Правда в этом случае придётся всю физику самому продумывать. Для написания многих типов игр идеально бы подошёл встроенный в LibGDX движок - Box2D. О нём и пойдёт речь в этой статье.
Уже не первый проект, где выскакивает ошибка при быстром включении/выключении звука. Почему-то libgdx плохо справляется со стерео.
В Box2D есть специальный интерфейсный класс ContactListener, реализовав который, можно обрабатывать коллизии. В этой статье покажу как его использовать на практических примерах.
Не разобрался как следует с отрисовкой объектов и стал жаловаться. А оказалось, что объект то повернуть не так сложно. Ну, текстуру объекта.
Не так давно начал обкатывать физические движок Box2D, который в libGDX входит. Довольно не мало проблем с ним возникло. Последние дни мучился с различными силами.
В играх на Android очень важно организовать управление удобное. Я пока Bomberman'а делал, перепробовал различные варианты. Рассмотрим в этой статье возможные альтернативы.
Попросили для Bomberman'a сделать возможность управлять стрелками, а не джоем. При чём, хотели возможность самим задавать положение всех 4-х стрелок. Вместо того, что бы рисовать все 4, тем самым забивая лишними битами атлас, решил всего одну стрелку сделать, а потом просто поворачивать. Довольно забавно ведут себя методы по повороту спрайта.
Такая вот ошибка возникала периодически. Причина была непонятна. Иногда ошибка не выскакивает в течении часа, иногда каждую минуту...Абсолютный рэндом. Решение проблемы необычно.
Та архитектура, что я привёл довольно хороша, но избыточна. Зачем изобретать велосипед? В действительности в libGDX есть пакет scene2d, который позволяет на его основе создать хорошую архитектуру.
При написании игры больше всего времени тратится именно на работу с графикой. В этой статье рассмотрим как работать с графикой (текстурами, регионами и т.д.) в libGDX. Помимо описания принципов основных дам пару советов об оптимизации рендеринга.
Статья, по сути, являтся переводом официальной документации. Может что-то будет отличаться. libGDX включает в себя несколько модулей, предоставляющих определённые возможности при разработке. Думаю, очевидно, какие модули должны присутствовать в такого рода библиотеке.
После рассмотрения жизненного цикла игры сразу стоит рассмотреть архитектуру (каркас). Вообще Роллингс и Моррис (Rollings and Dave Morris) в своей книге "Game Architecture and Design" подробно описывают создание игр с точки зрения архитектуры. В своё время я правда не особо проникся этой книгой, но вам может понравится. Я же опишу архитектуру, которую стараюсь использовать сам.
В прошлой статье создали простенькое приложение для проверки работоспособности. Теперь стоит узнать о жизненном цикле игр. Впрочем, это относится не только к играм, любое приложение в Android имеет такой жизненный цикл.
Начиная с libGDX работать, уже тогда подумал над написанием туторила по этой библиотеке. Когда начал освещать процесс написания игры, то вопросы посыпались на мыло и в твиттер по некоторым аспектам разработки. Так что, начнём. Список всех статей (да и какие-нибудь другие материалы) буду размещать на странице о libGDX. В новом уроке будет использоваться исходник предыдущего и что-то дописываться.
Реализовал анимацию взрыва. Оказалось всё довольно-таки не просто. Обойтись одним объектом не получалось никак. Да и ещё сложность была в том, что анимация взрыва по краям и в центре разная. Но, обо всё по порядку.
Доработал слегка управление, слегка анимацию оптимизировал. Контролы будут снизу справа (установка бомбы, взрыв и т.д). Для управления пока тачем. Если нажали левее перса, то идёт влево, если выше, то вверх и т.д. Если есть клава, то двигаться можно стрелками, а бомбу устанавливать пробелом.
В любой игре есть меню, из которого вы уже попадаете на игровой экран. В общем-то различных экранов может быть много. Можно, конечно, полностью перерисовывать всё, когда необходимо переключение между экранами. В libgdx всё намного проще оказалось.
Добавил врагов на уровне. Balloom не просто двигаются по карте, но и взаимодействуют с миром. По мимо того, что умеют обходить препятствия, они ещё и могут убить нашего персонажа.
Озвучку движения игрока сделал. Слегка пришлось повозиться, правда (: Обычно я эмулятор использовал только для игр, но они, как выяснилось, позволяют дебажить игры и вытаскивать из них ресурсы =D
Продолжаю допиливать движок Bomberman. Реализовал анимацию на спрайтах.
Решил всё-таки плотно заняться разработкой игр под Android. На чистом OpenGL как-то ломало всё писать, решил поискать движки готовые. Остановился на libgdx.