Проект для моего приложения [дубликат]

Уменьшить делает это довольно легко:

merged.data.frame = Reduce(function(...) merge(..., all=T), list.of.data.frames)

Вот полный пример с использованием некоторых макетных данных:

set.seed(1)
list.of.data.frames = list(data.frame(x=1:10, a=1:10), data.frame(x=5:14, b=11:20), data.frame(x=sample(20, 10), y=runif(10)))
merged.data.frame = Reduce(function(...) merge(..., all=T), list.of.data.frames)
tail(merged.data.frame)
#    x  a  b         y
#12 12 NA 18        NA
#13 13 NA 19        NA
#14 14 NA 20 0.4976992
#15 15 NA NA 0.7176185
#16 16 NA NA 0.3841037
#17 19 NA NA 0.3800352

И вот пример использования этих данных для репликации my.list:

merged.data.frame = Reduce(function(...) merge(..., by=match.by, all=T), my.list)
merged.data.frame[, 1:12]

#  matchname party st district chamber senate1993 name.x v2.x v3.x v4.x senate1994 name.y
#1   ALGIERE   200 RI      026       S         NA      NA   NA   NA         NA   
#2     ALVES   100 RI      019       S         NA      NA   NA   NA         NA   
#3    BADEAU   100 RI      032       S         NA      NA   NA   NA         NA   

Примечание: похоже, что это, возможно, ошибка в merge. Проблема в том, что нет никакой проверки того, что добавление суффиксов (для обработки перекрывающихся имен несоответствий) фактически делает их уникальными. В какой-то момент он использует [.data.frame, который делает make.unique имена, в результате чего rbind терпит неудачу.

# first merge will end up with 'name.x' & 'name.y'
merge(my.list[[1]], my.list[[2]], by=match.by, all=T)
# [1] matchname    party        st           district     chamber      senate1993   name.x      
# [8] votes.year.x senate1994   name.y       votes.year.y
#<0 rows> (or 0-length row.names)
# as there is no clash, we retain 'name.x' & 'name.y' and get 'name' again
merge(merge(my.list[[1]], my.list[[2]], by=match.by, all=T), my.list[[3]], by=match.by, all=T)
# [1] matchname    party        st           district     chamber      senate1993   name.x      
# [8] votes.year.x senate1994   name.y       votes.year.y senate1995   name         votes.year  
#<0 rows> (or 0-length row.names)
# the next merge will fail as 'name' will get renamed to a pre-existing field.

Самый простой способ исправить - это не оставить поле для переименования для полей дубликатов (которых здесь много) до merge. Например:

my.list2 = Map(function(x, i) setNames(x, ifelse(names(x) %in% match.by,
      names(x), sprintf('%s.%d', names(x), i))), my.list, seq_along(my.list))

merge / Reduce будет работать нормально.

14
задан surfer190 26 March 2015 в 14:36
поделиться

5 ответов

Ушел в этот вопрос сегодня. Поскольку проект занимает много времени, чтобы полностью удалить, самый простой способ - создать новый SHA1, просто удалив локальный файл debug.keystore. Он автоматически генерируется при запуске любого приложения после его удаления. Это описано в документах Android здесь .

0
ответ дан Aditya 22 August 2018 в 10:13
поделиться

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

Если вы абсолютно уверены, что в настоящее время нет активных проектов, использующих текущую пару папок / дескрипторов, одна из последних попыток: Сделайте совершенно новые учетные данные. Вам придется заменить свой файл учетных данных в приложении.

Я не ожидал, что это поможет, но это произошло. Может быть, Google каким-то образом кэширует поиск? «Этот поиск packagename / fingerprint / clientID является дубликатом, так что не утруждайте себя поиском снова».

0
ответ дан Brian 22 August 2018 в 10:13
поделиться

Как кто-то может захотеть использовать одно и то же приложение через два или более проектов с базой данных по многим причинам, и поэтому получите эту ошибку, я здесь рассматриваю этот конкретный сценарий. Самый простой способ запуска одного и того же приложения на двух или более различных проектах 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, потому что он имеет другой идентификатор приложения.

0
ответ дан shadowsheep 22 August 2018 в 10:13
поделиться

Эта ошибка возникает, когда существует существующий 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].

16
ответ дан surfer190 22 August 2018 в 10:13
поделиться
  • 1
    поэтому, если я хочу запустить более одного приложения с отладочным хранилищем, то это невозможно? Должен ли я использовать производственное хранилище в такой ситуации? – Hari Krishnan 26 October 2015 в 07:40
  • 2
    Нет, вы можете использовать debug.keystore для нескольких приложений – surfer190 26 October 2015 в 08:37
  • 3
    Тогда у каждого приложения есть другой debug.keystore? иначе все приложения будут воспроизводить один и тот же ключ SHA1? его немного запутывает для меня. пожалуйста, объясни – Hari Krishnan 26 October 2015 в 12:42
  • 4
    У меня возникла проблема с добавлением производства sha1. даже я никогда не использовал его в консоли Google. – عثمان غني 11 July 2016 в 06:01
  • 5
    Я не вижу возможности для удаления всего клиента, хотя меня беспокоит, что будет негативным воздействием на удаление ключей API, находящихся на одной странице. Даже повторный мой проект с разными именами пакетов дает мне тот же неиспользуемый удаленный SHA1 в Gradle signatureReport – Androidcoder 30 March 2018 в 20:02

Если вы используете каждый проект firebase для каждого env как я, может оказаться полезным подход ниже.

В своем градиенте построения создайте новый идентификатор приложения для каждого env:

productFlavors {
        dev {
            applicationId "se.abc.dev"
        }
        stag {
            applicationId "se.abc.stag"
        }
        prod
    }

. В каждом проекте firebase добавьте новый проект с соответствующим идентификатором приложения с тем же отпечатком пальца. Не забудьте загрузить новый json-файл службы google с момента изменения идентификатора приложения. Имя пакета остается таким же, поэтому при загрузке в игру Google это не будет проблемой. Но, конечно же, я оставляю аромат prod пустым, поэтому имя пакета и идентификатор приложения будут одинаковыми для выпуска prod, чтобы избежать проблем.

1
ответ дан thanhbinh84 22 August 2018 в 10:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: