Я могу получить имя пакета, используя:
Context.getPackageName()
или
BuildConfig.APPLICATION_ID
Есть ли разница между этими двумя способами? Является предпочтительным для других в конкретных ситуациях? Можно ли предположить, что они всегда дают тот же результат?
В принципе, какой из них лучше ?
BuildConfig
предоставляется Gradle
. Если вы не используете Gradle
вы не можете получить доступ к имени пакета с помощью BuildConfig
.
Использование Context
для получения имени пакета иногда может быть неприменимо, если контекст или контекст не имеют значения null, поэтому вы можете использовать BuildConfig.APPLICATION_ID
.
Я бы использовал Context.getPackageName()
потому что результат предоставляется из операционной системы, а не константа в параметрах построения.
Раньше я использовал getPackageName (), но только использовал BuildConfig.APPLICATION_ID, так как он стал доступен. Быть быстрее, поскольку это только переменная и не звонит – но это не имеет большого значения. Также в библиотеках, использующих getPackageName (), может быть по-прежнему необходимо.
Возможно использовать оба элемента в качестве основной меры против фальсификации пакетов. В вашем приложении вы можете вставить код:
if (!BuildConfig.APPLICATION_ID.equals(getPackageName())) { insert code to report information about tampering to remote server }
Когда-то я получаю странные отчеты, исходящие из некоторого варианта моего приложения, которое было подделано добавлением префикса или суффикса в исходное имя пакета