- Как вернуть проект назад к предыдущей фиксации в студии android
- Настройки и состояние приложения
- Сохранение состояния приложения
- Android Studio как вернуться на предыдущую версию
- Что делает работу в Android Studio такой прекрасной? Горячие клавиши, шаблоны, гит и прочее…
- 1. Горячие клавиши
- 2. Многострочное выделение
- 3. Активные шаблоны
- 4. Постфиксные шаблоны
- 5. Проверяем регулярные выражения
- 6. Интеграция Git
- 7. Удаляем неиспользуемые ресурсы
- Заключение
Как вернуть проект назад к предыдущей фиксации в студии android
Я работаю над проектом в студии Android и хотел бы вернуться к предыдущему нажатию. Я попытался
VCS => Git => Сбросить головку (жесткий)
Но мой проект в Android Studio не изменился, вероятно, потому что я делаю что-то неправильно. Я хотел бы вернуть проект в Android Studio до определенного более раннего коммита, который я нажал, и я вижу на github. Меня не волнуют какие-либо изменения, которые я сделал со времени более раннего толчка.
Кроме того, я хотел бы, чтобы это было сделано через графический интерфейс в Android Studio, если это возможно.
Инструкции Android Studio : если вы хотите сделать это в Android Studio, нажмите alt + 9 чтобы открыть панель управления версиями. Перейдите на вкладку « Log » и щелкните правой кнопкой мыши предыдущую фиксацию. Выберите Checkout Revision .
Инструкции командной строки : откройте инструмент командной строки, который вы используете. Перейдите в каталог Git приложения Android (с помощью cd ). Выполните git log и найдите предыдущую фиксацию, к которой хотите вернуться.
Если это фиксация, к которой вы хотите вернуться, затем выполните git checkout 7c247b .
Значок, окруженный красным прямоугольником на изображении, сделает трюк
Щелкните правой кнопкой мыши папку, в которой находится папка Github, нажмите Git Bash Here и введите git reset —hard
Источник
Настройки и состояние приложения
Сохранение состояния приложения
В одной из предыдущих тем был рассмотрен жизненный цикл Activity в приложении на Android, где после создания Activity вызывался метод onRestoreInstanceState , который восстанавливал ее состояние, а перед завершением работы вызывался метод onSaveInstanceState , который сохранял состояние Actiity. Оба этих метода в качестве параметра принимают объект Bundle , который как раз и хранит состояние activity:
В какой ситуации могут быть уместно использование подобных методов? Банальная ситуация — переворот экрана и переход от портретной ориентации к альбомной и наоборот. Если, к примеру, графический интерфейс содержит текстовое поле для вывода TextView, и мы программно изменяем его текст, то после изменения ориентации экрана его текст может исчезнуть. Или если у нас глобальные переменные, то при изменении ориентации экрана их значения могут быть сброшены до значений по умолчанию.
Чтобы точнее понять проблему, с которой мы можем столкнуться, рассмотрим пример. Изменим файл activity_main следующим образом:
Здесь определено поле EditText, в которое вводим имя. И также определена кнопка для его сохранения.
Далее для вывода сохраненного имени предназначено поле TextView, а для получения сохраненного имени — вторая кнопка.
Теперь изменим класс MainActivity :
Для хранения имени в программе определена переменная name. При нажатии на первую кнопку сохраняем текст из EditText в переменную name, а при нажатии на вторую кнопку — обратно получаем текст из переменной name в поле TextView.
Запустим приложение введем какое-нибудь имя, сохраним и получим его в TextView:
Но если мы перейдем к альбомному режиму, то TextView окажется пустым, несмотря на то, что в него вроде бы уже получили нужное значение:
И даже если мы попробуем заново получить значение из переменной name, то мы увидим, что она обнулилась:
Чтобы избежать подобных ситуаций как раз и следует сохранять и восстанавливать состояние activity. Для этого изменим код MainActivity:
В методе onSaveInstanceState() сохраняем состояние. Для этого вызываем у параметра Bundle метод putString(key, value) , первый параметр которого — ключ, а второй — значение сохраняемых данных. В данном случае мы сохраняем строку, поэтому вызываем метод putString() . Для сохранения объектов других типов данных мы можем вызвать соответствующий метод:
put() : универсальный метод, который добавляет значение типа Object. Соответственно поле получения данное значение необходимо преобразовать к нужному типу
putString() : добавляет объект типа String
putInt() : добавляет значение типа int
putByte() : добавляет значение типа byte
putChar() : добавляет значение типа char
putShort() : добавляет значение типа short
putLong() : добавляет значение типа long
putFloat() : добавляет значение типа float
putDouble() : добавляет значение типа double
putBoolean() : добавляет значение типа boolean
putCharArray() : добавляет массив объектов char
putIntArray() : добавляет массив объектов int
putFloatArray() : добавляет массив объектов float
putSerializable() : добавляет объект интерфейса Serializable
putParcelable() : добавляет объект Parcelable
Каждый такой метод также в качестве первого параметра принимает ключа, а в качестве второго — значение.
В методе onRestoreInstanceState происходит обратный процесс — с помощью метода getString(key) по ключу получаем из сохраненного состояния строку по ключу. Соответственно для получения данных других типов мы можем использовать аналогичные методы:
get() : универсальный метод, который возвращает значение типа Object. Соответственно поле получения данное значение необходимо преобразовать к нужному типу
getString() : возвращает объект типа String
getInt() : возвращает значение типа int
getByte() : возвращает значение типа byte
getChar() : возвращает значение типа char
getShort() : возвращает значение типа short
getLong() : возвращает значение типа long
getFloat() : возвращает значение типа float
getDouble() : возвращает значение типа double
getBoolean() : возвращает значение типа boolean
getCharArray() : возвращает массив объектов char
getIntArray() : возвращает массив объектов int
getFloatArray() : возвращает массив объектов float
getSerializable() : возвращает объект интерфейса Serializable
getParcelable() : возвращает объект Parcelable
Для примера рассмотрим сохранение-получение более сложных данных. Например, объектов определенного класса. Пусть у нас есть класс User :
Класс User реализует интерфейс Serializable , поэтому мы можем сохранить его объекты с помощью метода putSerializable() , а получить с помощью метода getSerializable() .
Пусть у нас будет следующий интерфейс в activity_main.xml :
Здесь определены два поля ввода для имени и возраста соответственно.
В классе MainActivity пропишем логику сохранения и получения данных:
Здесь также сохраняем данные в переменную User, которая предварительно инициализированна некоторыми данными по умолчанию. А при нажатии на кнопку получения получем данные из переменной и передаем их для вывода в текстовое поле.
Источник
Android Studio как вернуться на предыдущую версию
Сегодня обновил студию с версии 3.0 до 3.1
Обновление прошло корректно, но перестали запускаться приложения на внешнем устройстве. Для проверки решил запустить рабочее приложение, с которым не было никаких проблем на версии 3.0
При попытке запуска выдается ошибка IDE и предложение отправить баг разработчикам. Отправил, но хочется работать именно сейчас
Подскажите, как откатить версию назад до 3.0?
Добавлено через 53 минуты
Проверил, формирует ли новая версия студии подписанный пакет. Да, все формирует. Но обнаружилась любопытная вещь. Готовый файл apk меньше файла apk, созданного на версии 3.0 на несколько десятком кбайтов. Но инсталлированное приложение увеличилось в размерах заметно. Было около 13 Мбайт, а созданное на версии 3.1 уже занимает более 20 Мбайт.
Интересно, как это происходит?
Первый пакет создавался через gradle 4.1 второй с 4.4. Ничего в коде не менялось и никакие зависимости не обновлялись
Java,LibGdx,Android Studio обработка на телефоне события вернуться назад
Мне нужна помощь в обработке события вернуться назад при нажатии на аппаратную кнопку.
Скачать предыдущую версию собственной программы с PlayMarket
Можно ли скачать APK предыдущей версии собственной программы, выложенной в PlayMarket?
(Android studio, java) Ошибка при импорте библиотеки cannot resolve symbol android studio
Вот библиотека https://github.com/mik3y/usb-serial-for-android. Устанавливал так, File -> New ->.
Как добавить версию Android
Здравствуйте, появился такой вопрос, можно ли в проект добавить версию андроид(более старую).
Источник
Что делает работу в Android Studio такой прекрасной? Горячие клавиши, шаблоны, гит и прочее…
Не будем говорить об установке, настройке и создании первого проекта — со всем этим можно ознакомиться на официальном сайте, но давайте проверим, все ли прелести легкой и производительной работы с этой средой разработки нам знакомы?
Итак, Android Studio представляет.
1. Горячие клавиши
Hotkeys — один из самых первых и простых инструментов по увеличению скорости работы с проектом.
Полный перечень горячих клавиш можно найти здесь.
Остановлюсь на тех, что ежедневно использую в своей работе, запомнить их достаточно легко.
Для начала поиск и замена:
SHIFT + SHIFT — поиск по всему, включая классы, файлы, символы и даже команды самой студии.
CTRL + F (Command + F) — поиск в текущем файле (общепринятая комбинация, ну кто этого сочетания не знает? Но если не использовали раньше, запомнить просто F — find).
CTRL + R (Command + R) — замена (запоминаем так же просто R — replace).
Теперь помощь для амнезии частичной:
CTRL + SHIFT + Space — когда вылетело из головы название класса или метода, пишем начальные символы и призываем автодополнение.
CTRL + P (Command + P) — когда не помним параметров метода, тут тоже запомнить просто (P — parameters).
Наконец, переходим к быстрой генерации кода:
CTRL + О — выбираем переопределенный метод для класса (запоминаем О — Override).
CTRL + I — генерируем методы из интерфейсов (запоминаем I — Implement).
CTRL + ALT + T (Command + Option + T) — создаем (а также оборачиваем готовый код в) условные конструкции, циклы, отлов исключений.
CTRL + В (Command + В) — переходим к объявлению метода, класса, интерфейса, переменной и обратно к использованию.
CTRL + / (Command + /) — оформляем линейные комментарии (со слеша комментарии и начинаются, так и запоминаем).
CTRL + SHIFT + / (Command + Shift + /) — для комментариев блочных.
Соблюдаем стиль написания кода и оптимизируем импорты:
CTRL + ALT + L (Command + Option + L) — чтобы наверняка избавиться от лишних (или пропущенных) пробелов, некорректных переносов, неиспользуемых импортов.
Как же эти горячие клавиши запомнить? Говорят, привычка формируется в среднем за 66 дней, примерно на 67 использовании комбинации (4 — 5 день, как это было у меня) вы поймаете себя на том, что делаете это автоматом. А до тех пор оставьте себе рядом с монитором заметки, подсматривайте в поиске по действиям, но большинство горячих клавиш запоминаются моментально, ведь связаны своим обозначением с действием — просто дайте себе это осознать.
2. Многострочное выделение
Крайне удобная фича, позволяющая поставить курсор сразу в нескольких строках с кодом и произвести необходимые изменения.
Горячие клавиши: ALT + J (СTRL + G).
3. Активные шаблоны
Еще один полезный инструмент для быстрой генерации кода. Работает он следующим образом: вводим ключевое слово и нажимаем Tab.
Более полный перечень активных шаблонов можно посмотреть здесь.
Приведу активные шаблоны, которыми активно пользуюсь:
Toast + Tab — на выходе получаем Toast.makeText(, «», Toast.LENGTH_SHORT).show()
newInstance + Tab — создаем new Fragment instance метод с аргументами.
psf + Tab — дает нам public static final можно добавить к шаблону первый символ типа и сгенерировать вместе с ним (к примеру psfi — public static final int )
ifn + Tab — приводит к генерации if (data == null)
Кроме того, можно создать свои собственные активные шаблоны. Подробнее об этом здесь.
4. Постфиксные шаблоны
Еще один инструмент генерации. Здесь принцип действия следующий: Выражение + точка + шаблон + Tab.
Всевозможные постфиксные шаблоны можно посмотреть в самой студии, выбрав File — Settings — Editor — General — Postfix Templates.
Мне не особо удобны постфиксные шаблоны в работе, поэтому использую я их крайне редко, но для примера приведу:
аrray.fori — for (int i = 0; i
5. Проверяем регулярные выражения
И такая возможность Android Studio предоставлена. Ставим курсор на регулярное выражение, вызываем контекстное меню (CTRL + ENTER) и выбираем пункт CheckRegex. В открывшемся окне вводим пример данных и проверяем результат.
6. Интеграция Git
Все еще управляетесь с репозиторием из консоли? Выберите опцию VCS и посмотрите насколько студия способна облегчить эту работу!
Прекрасная статья о работе с Git через Android Studio. От себя хочу указать то, что особенно дорого в этой работе мне:
Удобное окно коммита, позволяет просмотреть все измененные файлы, отображая код последнего коммита и изменений, к выбранному файлу и выбранной строке можно сразу и перейти. Также просмотреть изменения можно во вкладке Version Control в Local Changes.
В Local Changes можно выбрать и отменить локальные изменения. Используем RollBack.
В Log можно изменить сообщение любого коммита, выбрав в контекстном меню Edit commit message.
Удобный механизм решения конфликтов при слиянии веток. Просто, быстро и наглядно.
Amend commit — выбрав этот чекбокс в окне нового коммита, можно дополнить изменения последнего коммита.
Нужно изменить историю коммитов? Редактировать коммит? Слить коммиты? Используем Rebase.
Можно узнать автора любой строчки кода и, что куда важнее, коммит, в котором строчка кода была изменена. Для этого вызываем контекстное меню на панели с номерами строк и выбираем Annotate.
В Local History автоматически сохраняются все совершенные вами изменения (осторожно! время хранения ограничено, как и сам размер хранилище). Вызвав хранилище на пакете, можно вернуть удаленные из него файлы, выбрав команду Revert, этой же командой можно вернуться к любому локальному изменению.
7. Удаляем неиспользуемые ресурсы
Ловить единорога для исполнения этого желания не нужно. Выбираем Refactor — Remove unused resources и получаем подчищенный каталог res, будут удалены все файлы из res, на которые нет ссылок в проекте.
Заключение
Применение этих практик делает работу в Android Studio куда комфортнее)
Источник