Проксирование R.java

#java #android #r.java-file

Вопрос:

Мне жаль, если название вопроса немного загадочное. Я просто не мог придумать ничего лучшего.

У меня есть проект, в котором я хотел немного поиграть с именем пакета в AndroidManifest. Пожалуйста, не спрашивайте, почему я это сделал или почему я просто не использовал идентификатор приложения build.gradle.

Дело в том, чтобы не приходилось постоянно корректировать импорт для R.java везде при изменении имени пакета я создал прокси-класс для R.java это выглядит так:

 import static com.package.main.R.*;

public class RProxy {
    public static final class R{
        public static anim anim;
        public static attr attr;
        public static bool bool;
        public static color color;
        public static drawable drawable;
        public static dimen dimen;
        public static id id;
        public static integer integer;
        public static layout layout;
        public static menu menu;
        public static plurals plurals;
        public static raw raw;
        public static string string;
        public static style style;
        public static styleable styleable;
    }
}
 

Теперь я просто изменил импорт R в каждом классе на RProxy, а каждое использование R на RProxy.R. Теперь мне нужно изменить импорт R только один раз, в RProxy.
Все это компилируется и запускается.

А теперь вот мои вопросы:

  1. Сейчас я получаю несколько предупреждений (по одному на RProxy.R использование, если быть точным), говоря: Static member com.package.main.R.id.firstId accessed via instance reference. Я понимаю, почему я их получаю, но я не знаю, как сделать проксирование другим способом. Как я мог от них избавиться?
  2. Должен ли я избегать такого рода взлома? Почему?
  3. Был бы лучший способ сделать такое проксирование?

Пожалуйста, обратите внимание, что мой основной интерес в получении ответа заключается в основном в образовательных целях (старое доброе любопытство), но это не значит, что я не буду высоко ценить любой ответ!

Комментарии:

1. Первый показывает, как вы ссылаетесь на статический элемент нестатическим образом (через экземпляр, а не непосредственно из класса)

2. @Vince Emigh Да, я вроде как в курсе этого, но я не знаю, как сделать проксирование другим способом

3. не могли бы вы, пожалуйста, объяснить эту строку: «Я хотел немного поиграть с именем пакета в AndroidManifest». У меня тоже такая же проблема, но я не могу понять вашу реплику