Android R. Идентичны ли сгенерированные идентификаторы между сборками?

Идентификаторы Android R создаются интегрированной средой разработки (Android Studio или Eclipse ADT).

Они идентичны между сборками?

Если да, будут ли они одинаковыми, если сгенерированы на разных машинах?


person mrd    schedule 26.03.2015    source источник
comment
Вы не должны беспокоиться об этом. Вы должны никогда не ссылаться на значения идентификатора непосредственно.   -  person Phantômaxx    schedule 27.03.2015
comment
Я спрашиваю, потому что мне нужно сохранить ссылку на строковые ресурсы в sqlite для локализации. Как я могу этого добиться?   -  person mrd    schedule 27.03.2015
comment
Зачем вам это нужно? Какова ваша конечная цель - возможно, есть лучший способ.   -  person Nicklas Jensen    schedule 27.03.2015
comment
Конечная цель: у меня есть объекты, у которых есть имя свойства. Эти объекты сохраняются в базе данных. Но в пользовательском интерфейсе их имя нужно перевести на английский или немецкий язык. Итак, я хотел бы получить доступ к их имени, как к строковому ресурсу, который можно локализовать.   -  person mrd    schedule 27.03.2015
comment
Почему ты сам не видишь? Выведите значение идентификатора ресурса. Затем добавьте пару новых ресурсов. Затем снова напечатайте значение того же идентификатора ресурса. Вы увидите, что значения изменились.   -  person Alex Lockwood    schedule 27.03.2015
comment
Я не хочу делать тест. Я хочу знать наверняка, официальным, задокументированным способом.   -  person mrd    schedule 27.03.2015
comment
Используйте отражение, для этого.   -  person Phantômaxx    schedule 27.03.2015
comment
Идентификаторы, на которые вы указываете android.R.id.*, являются постоянными. Например. android.R.id.list будет иметь то же значение в API 22, что и в API 4. Это неверно для любых идентификаторов, определенных в вашем проекте или библиотеках, которые использует ваш проект (R.id.*).   -  person Eugen Pechanec    schedule 27.03.2015
comment
Недавно я отвечал на аналогичный вопрос. stackoverflow.com/a/29182221/2649012 замените drawable строкой.   -  person Phantômaxx    schedule 27.03.2015
comment
@DerGolem отлично! Ссылка в этом сообщении stackoverflow.com/questions/6945678/ - это именно то, что я искал! Спасибо! Это решает мою проблему.   -  person mrd    schedule 27.03.2015
comment
Похоже, что объекты сгруппированы, поскольку их имена могут иметь общий идентификатор ресурса (строку). Вместо того, чтобы хранить ссылку на имя, вы должны вместо этого сохранить идентификатор группы, который вы можете преобразовать в строку (читай: имя) на уровне вашего представления. Таким образом, вы всегда можете добавить дополнительные фрагменты презентации, не обновляя базу данных.   -  person Nicklas Jensen    schedule 27.03.2015


Ответы (1)


Во-первых, идентификаторы Android генерируются не IDE, а aapt, инструментом командной строки, который запускается во время сборки. Да, IDE в конечном итоге запускает его, но это не строго часть Android Studio, это часть пакета инструментов сборки.

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

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

Я довольно подробно изучил это несколько лет назад, когда писал декомпилятор APK для исправления ресурсов.

person Airsource Ltd    schedule 26.03.2015