Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Ушел в этот вопрос сегодня. Поскольку проект занимает много времени, чтобы полностью удалить, самый простой способ - создать новый SHA1, просто удалив локальный файл debug.keystore. Он автоматически генерируется при запуске любого приложения после его удаления. Это описано в документах Android здесь .
Отмечу, что если ваше приложение указано в магазине воспроизведения, вы, вероятно, не захотите изменить имя пакета, и вы, вероятно, не захотите заменить производственный ключ (так как вы будете вынуждены сделайте новый список).
Если вы абсолютно уверены, что в настоящее время нет активных проектов, использующих текущую пару папок / дескрипторов, одна из последних попыток: Сделайте совершенно новые учетные данные. Вам придется заменить свой файл учетных данных в приложении.
Я не ожидал, что это поможет, но это произошло. Может быть, Google каким-то образом кэширует поиск? «Этот поиск packagename / fingerprint / clientID является дубликатом, так что не утруждайте себя поиском снова».
Как кто-то может захотеть использовать одно и то же приложение через два или более проектов с базой данных по многим причинам, и поэтому получите эту ошибку, я здесь рассматриваю этот конкретный сценарий. Самый простой способ запуска одного и того же приложения на двух или более различных проектах firebase (скажем, производства и постановки) заключается в добавлении к вашему модулю уровня build.gradle
файла варианта сборки (скажем, постановки), такого как:
apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.firebase-perf'
android {
compileSdkVersion 27
buildToolsVersion "27.0.3"
defaultConfig {
applicationId "com.mydomain.myapp"
minSdkVersion 19
targetSdkVersion 27
versionCode 18
versionName "2.8"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
staging {
initWith debug
applicationIdSuffix ".staging"
versionNameSuffix = "-staging"
}
}
}
dependencies {
[...]
}
// Firebase
apply plugin: 'com.google.gms.google-services'
В варианте сборки staging
наиболее важна строка:
applicationIdSuffix ".staging"
Это приведет к тому, что во время сборки будет добавлен суффикс «.staging» к вашему идентификатору приложения, чтобы вы автоматически have
applicationId "com.mydomain.myapp.staging"
Вам нужно добавить это приложение ("com.mydomain.myapp.staging"
) в проект промежуточной подготовки Firebase, и вы сможете добавить в это приложение тот же "com.mydomain.myapp"
SHA1, потому что он имеет другой идентификатор приложения.
Эта ошибка возникает, когда существует существующий SIGNING CERTIFICATE FINGERPRINT (SHA1)
в Google Developers, связанный с другой учетной записью.
Решение заключается в удалении проекта, который использует SHA1
в console.developers.google.com
для старого / неправильный проект.
Вы не можете изменить отпечаток SHA1 после его установки. Помните, что удаление проекта занимает 7 дней, чтобы полностью удалить его.
Еще одна опция - удалить debug.keystore
и сгенерировать новый с помощью:
keytool -genkey -v -keystore debug.keystore -alias androiddebugkey
-storepass android -keypass android -keyalg RSA -validity 14000
Помните, что вам нужно удалите приложение, иначе вы получите ошибку [INSTALL_FAILED_UPDATE_INCOMPATIBLE]
.
debug.keystore
для нескольких приложений
– surfer190
26 October 2015 в 08:37
Если вы используете каждый проект firebase для каждого env как я, может оказаться полезным подход ниже.
В своем градиенте построения создайте новый идентификатор приложения для каждого env:
productFlavors {
dev {
applicationId "se.abc.dev"
}
stag {
applicationId "se.abc.stag"
}
prod
}
. В каждом проекте firebase добавьте новый проект с соответствующим идентификатором приложения с тем же отпечатком пальца. Не забудьте загрузить новый json-файл службы google с момента изменения идентификатора приложения. Имя пакета остается таким же, поэтому при загрузке в игру Google это не будет проблемой. Но, конечно же, я оставляю аромат prod пустым, поэтому имя пакета и идентификатор приложения будут одинаковыми для выпуска prod, чтобы избежать проблем.