Решение этой проблемы постоянно меняется с течением времени, когда Unity и Android SDK меняются.
Обратите внимание, что его проблема, по-видимому, исправлена в Unity 2017.1.
ПОСЛЕДНЕЕ РЕШЕНИЕ
1) Для Windows загрузите "tools_r25.2.3-windows.zip" и разархивируйте его.
2) Для MacOSX загрузите "tools_r25. 2.3-macosx.zip " и разархивируйте его.
3) Добавьте путь распакованного SDK к настройкам Edit -> ] ---> Внешние инструменты ---> SDK box.
STILL NOT WORKING?
Удалить SDK Tools 25 и Android SDK Tools 26. Удалить как SDK Platform-Tools, так и SDK Tools. Используйте номер версии ниже.
OLD SOLUTION:
Вы не правильно настроили SDK .
Для настройки Android SDK выполните следующие действия.
1. Убедитесь, что в SDKpath нет пробелов. Поэтому создайте папку с именем AndroidSDK
в каталоге C
.
2. Скопируйте папку Android-sdk
в каталог C:/AndroidSDK
.
Теперь ваш путь к SDK должен выглядеть так:
C:/AndroidSDK/Android-sdk
3. Обновите свой Android SDK-путь в редакторе Unity.
Теперь проверьте, работает ли это, пытаясь снова создать для Android.
Если это не удается, продолжайте снизу
4. Загрузите последнюю версию Unity.
5. Перезагрузите SDK , затем скопируйте файл в C:/AndroidSDK/Android-sdk
.
6. Вернитесь в Unity и обновите путь
7. Создайте проект для Android еще раз, он покажет ошибку и попросит вас обновить SDK.
Нажмите кнопку «Обновить Android SDK». Unity автоматически обновит ваш SDK. Затем ваш SDK должен выглядеть как-то внизу. Ваша проблема должна быть удалена.
Главное, что рекомендуемый способ сделать это:
eval "$var=\$val"
с помощью RHS также косвенно. Поскольку eval
используется в одной и той же среде, он будет иметь $val
, поэтому его отсрочка будет работать, и теперь это всего лишь переменная. Поскольку переменная $val
имеет известное имя, нет никаких проблем с цитированием, и она могла бы быть даже записана как:
eval $var=\$val
Но поскольку лучше всегда добавлять кавычки, первое лучше , или даже это:
eval "$var=\"\$val\""
Лучшая альтернатива в bash, которая была упомянута для всего, что полностью исключает eval
(и не так тонко, как declare
и т. д.):
printf -v "$var" "%s" "$val"
Хотя это не прямой ответ на то, что я изначально спросил ...
Несколько лучше, избегая возможных последствий для использования с помощью eval
, является
declare $var="$val"
. Обратите внимание, что declare
является синонимом typeset
в bash
. Команда typeset
более широко поддерживается (ksh
и zsh
также используют ее):
typeset $var="$val"
declare
является расширением стандарта POSIX, он также является синонимом typeset
, который является i>, поддерживаемый другими основными оболочками (ksh
и zsh
, а именно). Корпуса, которые не поддерживают что-то подобное, должны осторожно использовать eval
.
– chepner
16 September 2014 в 16:55
eval "$var='$val'"
не является достаточно осторожным: если содержимое содержит буквенные одиночные кавычки, они могут легко убежать.
– Charles Duffy
14 April 2015 в 01:36
Более новые версии bash поддерживают что-то, называемое «преобразование параметров», задокументированное в одном и том же имени в bash (1).
"${value@Q}"
расширяется до версии с кодами "${value}"
что вы можете повторно использовать в качестве входа.
Это означает, что следующее безопасное решение:
eval="${varname}=${value@Q}"
У Bash есть расширение до printf
, которое сохраняет свой результат в переменной:
printf -v "${VARNAME}" '%s' "${VALUE}"
Это предотвращает все возможные проблемы экранирования.
Если вы используете недопустимый идентификатор для $VARNAME
команда выйдет из строя и вернет код состояния 2:
$ printf -v ';;;' foobar; echo $?
bash: printf: `;;;': not a valid identifier
2
eval "$var=\$val"
Аргумент eval
всегда должен быть одной строкой, заключенной в одиночные или двойные кавычки. Весь код, который отличается от этого шаблона, имеет некоторое непреднамеренное поведение в случаях краев, например имена файлов со специальными символами.
Когда аргумент eval
расширяется оболочкой, $var
заменяется на имя переменной и \$
заменяется простым долларом. Следовательно, строка, которая оценивается, становится:
varname=$value
Это именно то, что вы хотите.
Обычно все выражения формы $varname
должны быть заключены в двойные кавычки. Есть только два места, где кавычки могут быть опущены: переменные назначения и case
. Поскольку это назначение переменной, здесь не нужны кавычки. Тем не менее, они не пострадали, поэтому вы могли бы также написать исходный код:
eval "$var=\"the value is $val\""
eval eval export
. Спасибо Вам большое. Для googlers, перейдите с ответом выше, а не eval eval export format.
– bgStack15
9 February 2016 в 21:57
eval "$var"='$val'
делает ее более ясной. Или, может быть, менее ясны, но теперь у вас есть два фразнга, которые следует учитывать и сравнивать, чтобы убедиться, что вы поняли. :-)
– clacke
2 February 2018 в 09:24