Создание ключа под Windows с помощью keytool

Ключом называется файл с расширением.keystore зашифрованный вашим персональным паролем. Ключ является чрезвычайно важной штукой при создании приложений как для Android, так и для iOS. В первую очередь ключ необходим при обновлении приложения. Система сравнивает ключ новой и существующей версии программы и обновляет программу только при совпадении у них ключей. Если ваше приложение опубликовано в Google Play, то сервис позволит сделать обновление опять же только при совпадении ключей. Таким образом при утере самого файла с ключом или пароля от него вы или кто-либо другой больше никогда не сможете обновить версию приложения. Создать заново утерянный ключ невозможно!

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

Сам ключ имеет срок действия, после окончания которого обновить приложение не удастся. Поэтому рекомендуется устанавливать срок действия на 25 лет и более.

В Corona SDK идёт отладочный ключ debug.keystore, с помощью которого можно подписать приложения для тестирования на устройствах. Но лучше сразу сделать свой ключ с помощью утилиты keytool, она идёт в комплекте с Java. JDK 6 у вас уже должен быть установлен, в противном случае Corona не запустится.

Создание ключа под Windows с помощью keytool

Для начала проверьте, запускается ли вообще keytool через консоль. В Windows нажмите Win + R , введите cmd и Enter . Далее наберите в командной строке keytool и опять Enter . Если выведется сообщение об ошибке, то придётся для начала покопаться в переменных окружения. Щёлкните правой кнопкой на Мой компьютер и выберите Свойства . В появившемся окне выберите пункт Дополнительные параметры системы и нажмите кнопку .

В блоке Системные переменные нажмите кнопку Создать... и введите следующее.

Имя переменной: JAVA_HOME
Значение переменной: C:\Program Files (x86)\Java\jdk1.6.0_45

Если путь к JDK отличается, внесите соответствующие правки.

Теперь два раза щёлкаете по переменной Path в том же окне и в значение добавляете в самом конце после точки с запятой %JAVA_HOME%\bin

Стирать существующую строку не надо, только дописать её. Проверьте, что точка с запятой указана верно, все пути заданы правильно без ошибок. Перезагрузите систему и запустите keytool ещё раз. Появление ошибки означает, что переменные среды были заданы некорректно, вернитесь на предыдущий шаг и проверьте всё ещё раз.

В консоли перейдите в желаемую папку, в которой вы хотите создать ключ, с помощью команд cd и d:, где d - имя желаемого диска. И там уже наберите следующее.

Keytool -genkey -alias <алиас> -keystore <имя>.keystore" -validity 10000

Здесь:
<алиас> - название ключа; <имя> - желаемое имя файла с расширением.keystore. Срок действия ключа установлен в 10000 дней.

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

Можно упростить генерацию ключа с помощью командного файла, тогда не придётся редактировать переменные окружения. Итак, создайте файл key.cmd со следующим содержанием и запустите его.

"C:\Program Files (x86)\Java\jdk1.6.0_45\bin\keytool.exe" -genkey -alias myalias -keystore "D:\Work\mykey.keystore" -validity 10000


Иногда ошибки Code 1 типа "синий экран", связанные с аппаратным обеспечением, могут быть вызваны повреждением оперативной памяти (RAM). Если вы сталкиваетесь со случайными перезагрузками компьютера, звуковыми сигналами при загрузке или другими неисправностями компьютера (в дополнение к ошибкам BSOD 1), то весьма вероятно, что имеются повреждения памяти. На самом деле, почти 10% падений приложений в ОС Windows вызваны повреждениями памяти.

Если вы недавно добавили новую память в компьютер, мы рекомендуем временно убрать ее, чтобы убедиться, что она не является причиной ошибки Code 1. Если это действие устранило BSOD, знаичит, это источник проблемы, и, следовательно, новая память либо несовместима с каким-то вашим оборудованием, либо повреждена. В таком случае, вам потребуется замена новых модулей памяти.

Если вы не добавляли новой памяти, на следующем этапе необходимо провести диагностический тест имеющейся памяти компьютера. Тест памяти позволяет провести сканирование на наличие серьезных сбоев памяти и периодических ошибок, которые могут быть причиной вашего синего экрана смерти 1.

Хотя последние версии Windows содержат утилиту для проверки оперативной памяти, я крайне рекомендую вместо нее использовать Memtest86 . Memtest86 представляет собой тестирующее программное обеспечение на основе BIOS, в отличие от других тестовых программ, запускаемых в среде Windows. Преимущество такого подхода в том, что утилита позволяет проверять ВСЮ операционную память на наличие ошибок Code 1, в то время как другие программы не могут проверять области памяти, занятые собственно программой, операционной системой и другими запущенными программами.

Мы рассматривали несложный механизм, позволяющий процессам в ОС реагировать на внешние события. Рассматривались способы отправки сигналов процессам при помощи kill , а также обработка поступающих сигналов в сценариях оболочки. Аналогично сигналам, коды возврата позволяют процессам взаимодействовать с вызвавшими их процессами. Эта тема частенько игнорируется пользователями, однако довольно! Сегодня мы поговорим о кодах возврата и работе с ними.

Чем являются коды возврата

Предлагаю начать наше знакомство с простой команды известной практически каждому — mv , которая перемещает файл из одного места файловой системы в другое и, возможно, переименовывает его. Как вы уже, наверное, заметили, при работе mv могут возникать ошибки в случае, если отсутствует исходный файл, или же возникли какие-то другие обстоятельства, помешавшие mv выполнить свою работу. Например:

$ mv ~/missing ~/missing2 mv: cannot stat `/home/ashep/missing": No such file or directory

Вы видите сообщение об ошибке. Очевидно, что команда не сработала. И в то же самое время за кулисами оболочки инициализируется переменная оболочки, содержащая так называемый «код возврата» последней выполненной команды. При желании мы можем получить значение этой переменной. Попробуйте:

$ mv ~/missing ~/missing2 mv: cannot stat `/home/ashep/missing": No such file or directory $ echo $? 1 $ echo "Test me" Test me $ echo $? 0

Если команда выполняется без ошибок, то обычно её код возврата равен нулю . После выполнения команды оболочка автоматически устанавливает значение переменно $? равным этому коду. Если же команда завершится с ошибкой, то, как правило, её код возврата будет отличным от нуля . В примере выше мы сперва пытаемся переместить несуществующий файл при помощи команды mv . Естественно, мы получаем ошибку, о чём свидетельствует сообщение самой программы, а также код возврата равный единице. Затем мы выполняем команду echo , которая завершается успешно. Её код возврата равен нулю.

Давайте теперь обратимся к info-странице документации программы mv (info coreutils mv ). В конце документа есть абзац, говорящий о том, что нулевой код возврата команды означает успешное выполнение, а ненулевой — об ошибке . Небогатый выбор, скажем честно, негде развернуться душе сисадмина!

Вот grep предлагает более широкий выбор средств диагностики результатов своей работы. Фрагмент из документации: «Обычно нулевой код возврата означает, что искомые строки были найдены, и код равный единице в противном случае. Если же при запуске grep использовалась опция -q , --quiet или --silent , строки были найдены, но возникла какая-то ошибка, то возвращается код 2.»

Ниже приведён список определённых системных кодов возврата:

  • 1: общие ошибки;
  • 2: ошибки работы встроенных средств оболочки;
  • 126: невозможно вызвать запрошенную команду;
  • 127: команда не найдена;
  • 128: некорректный аргумент exit ;
  • 128 + n: сигнал критической ошибки (например, kill -9 = 137);
  • 130: скрипт прерван по Ctrl+C .

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

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

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

#!/bin/bash mkdir /usr echo \$? = $? if [ $? -ne 0 ] ; then echo "mkdir /usr failed: we have an exit code of $?" exit 1 fi echo "made the requested directory. Why is "/" world writable?" exit 0

Оказывается, есть нюанс при работе с переменной $? , который вызван выполнением команд, вроде echo . Взгляните на результат работы сценария:

$ ./test.sh mkdir: /usr: File exists $? = 1 made the requested directory. Why is "/" world writable?

Увидели в чём проблема? Код возврата сразу после вызова mkdir равен единице, и это логично, поскольку каталог /usr существует. Но когда мы проверяем значение переменной $? в конструкции if , оказывается, что её значение равно нулю! Почему так? Потому что в этот момент значение переменной $? содержит код возврата предыдущего вызова echo , а не команды mkdir .

Получившуюся проблему можно решить, например, так:

#!/bin/bash mkdir /usr error=$? if [ $error -ne 0 ] ; then echo "mkdir /usr failed: we have an exit code of $error" exit 1 fi

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

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

Alternates=" http://www.example.com/test.pdf http://www.example2.com/test.pdf http://www.example3.com/test.pdf " gotit=0 for file in $alternates do wget $file if [ $? -ne 0 ]; then echo "Unable to get $file else gotit=1 break fi done

Сокрытие сообщений об ошибках

Теперь, когда вы знаете, как анализировать код возврата программы, вы можете заменять текст сообщений об ошибках программы на свой собственный. Это можно сделать при помощи оператора >& , который перенаправляет стандартный поток вывода и поток ошибок. Например, в нашем первом простом сценарии вывод команды mkdir можно перенаправить таким образом:

Mkdir /usr >& /dev/null

Вместо >& можно с тем же успехом использовать &> или 2>&1 . Конечно, если вы проверяете код возврата команды, то особого смысла в замене текста сообщений об ошибках нет.