Недавно я столкнулся с этой проблемой, и очень расстраивает то, что что-то вроде идентификатора приложения Facebook интерпретируется как целое число, приводящее к проблемам из-за переполнения (конечно). Я бы подумал / надеялся, что можно будет переопределить неявную типизацию. Например, вместо:
<meta-data android:name="value" android:value="12345678901234567890" />
было бы неплохо, если бы мы могли написать:
<meta-data android:name="value" android:type="string" android:value="12345678901234567890" />
Чтобы компенсировать это, я написал некоторый вспомогательный код, который требует, чтобы атрибуты манифеста выглядели следующим образом:
<meta-data android:name="value1" android:value="string/12345678901234567890" />
<meta-data android:name="value2" android:value="integer/12345" />
<meta-data android:name="value3" android:value="boolean/true" />
<meta-data android:name="value4" android:value="float/1.34" />
<meta-data android:name="value5" android:value="float/6" />
Обратите внимание, что это похоже на синтаксис Android @string
/ @integer
, за исключением того, что я отбросил @
, интерпретируя это как снижение уровня косвенности.
Наряду с решением первоначальной задачи [0-9] +, всегда интерпретируемой как целые числа, кажется, она также позволяет указывать числа с плавающей точкой, несмотря на то, что они выглядят как целое число.
Еще одним преимуществом этого является то, что можно произвольно расширять набор типов. например,
<meta-data android:name="myfrac" android:value="fraction/3/7" />