Android: Почему нам нужно использовать R2 вместо R с ножом для масла?

Я использую butterknife в течение нескольких месяцев и только что заметил в его документации, что в нем говорится:

Теперь убедитесь, что вы используете R2 вместо R во всех аннотациях Butter Knife.

Почему это? Я использую R, и все работает отлично.


person TheCrafter    schedule 21.02.2017    source источник
comment
Я обнаружил, что значение идентификатора в R2 для любого разрешения (цвет, размер, ...) такое же, как и в R. Только разница в R2 заключается в аннотации, такой как @DrawableRes и @IdRes, и использовал эту аннотацию, чтобы убедиться, что вы вернуть правильный и ожидаемый тип. например, ожидается, что возвращаемое значение @ColorRes будет ссылкой на ресурс цвета, а возвращаемое значение @DrawableRes — ссылкой на ресурс, который можно нарисовать.   -  person Sally    schedule 21.02.2017
comment
@Sally Итак, вы говорите, что если я использую R2, я получу ошибки времени компиляции, если попытаюсь привязать идентификатор к неправильному типу?   -  person TheCrafter    schedule 21.02.2017
comment
За исключением того, что аннотации помогают нам улучшить проверку кода developer.android.com/studio/write /annotations.html   -  person Sally    schedule 21.02.2017


Ответы (1)


Использование R2 необходимо только для создания проектов библиотеки Android.

https://github.com/JakeWharton/butterknife#library-projects

Это связано с тем фактом, что значения в сгенерированном классе R.java не объявляются «окончательными» при построении как части библиотеки. Аннотации, используемые для @BindView(), требуют, чтобы эти значения R. были окончательными и не подлежат дальнейшему изменению.

Я уверен, что кто-то мог бы объяснить все это лучше, но суть в том, что вы можете использовать «R». значения в @BindView в приложении Android

person jpage4500    schedule 07.03.2017
comment
Хорошо, я понял. Спасибо! - person TheCrafter; 07.03.2017
comment
Для дальнейшего объяснения у меня есть ответ здесь stackoverflow.com/questions/48577106/ - person Debdeep; 02.02.2018