Пакет приложений Android от React Native: вы загрузили пакет приложений APK или Android с недействительной или отсутствующей информацией о подписи для некоторых из его файлов

10

Я пытаюсь впервые опубликовать приложение в магазине Google Play. Я выбрал подписку в Google Play. Я точно знаю, что я подписываю комплект приложений Android правильным ключом, поскольку, когда я загружаю с помощью другого ключа, консоль скажет мне загрузить с помощью другого ключа с определенным идентификатором SHA1. Однако, когда я делаю загрузку с правильным ключом, я получаю эту ошибку:

Вы загрузили пакет APK или приложений для Android с недействительной или отсутствующей информацией для подписи некоторых его файлов.

Я создаю приложение с помощью Android Studio следующим образом: Build> Generate Signed Bundle / APK> Android App Bundle> Выбор хранилища ключей и ввод пароля> release> Finish

Приложение представляет собой приложение React Native, созданное отдельно от Expo / ExpoKit. Загрузка в Apple App Store работает нормально, у меня проблемы только с Play Store. Что мне не хватает?

Обновление 1 : теперь я полностью удалил приложение из Google Play и создал новое. Разве не выбрать в Google Play подписывающейся на этот раз и загрузил подписанный APK. Все та же ошибка.

Обновление 2 : Попробовал с совершенно новым хранилищем ключей и ключом. Все такой же.

Вот краткий обзор настроек проекта, если это как-то важно: Обзор проекта

И вот android/app/build.gradle:

buildscript {
  repositories {
    google()
    maven { url 'https://maven.fabric.io/public' }
  }

  dependencies {
    classpath 'io.fabric.tools:gradle:1.26.1'
  }
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
apply plugin: 'devicefarm'

repositories {
  maven { url 'https://maven.fabric.io/public' }
}

def safeExtGet(prop, fallback) {
  rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
}

android {
  compileSdkVersion safeExtGet("compileSdkVersion", 28)

  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }

  defaultConfig {
    applicationId 'de.***.android'
    minSdkVersion safeExtGet("minSdkVersion", 21)
    targetSdkVersion safeExtGet("targetSdkVersion", 28)
    versionCode 1
    versionName '1.0.2'
    ndk {
      abiFilters 'armeabi-v7a', 'x86'
    }
    multiDexEnabled true
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    // Deprecated. Used by net.openid:appauth
    manifestPlaceholders = [
        'appAuthRedirectScheme': 'host.exp.exponent'
    ]
  }
  dexOptions {
    javaMaxHeapSize System.getenv("DISABLE_DEX_MAX_HEAP") ? null : "8g"
  }

  signingConfigs {
    debug {
      storeFile file('../debug.keystore')
    }
    release {
      storeFile file(System.getenv("ANDROID_KEYSTORE_PATH") ?: "release-key.jks")
      storePassword System.getenv("ANDROID_KEYSTORE_PASSWORD")
      keyAlias System.getenv("ANDROID_KEY_ALIAS")
      keyPassword System.getenv("ANDROID_KEY_PASSWORD")
    }
  }
  buildTypes {
    debug {
      debuggable true
      ext.enableCrashlytics = false
    }
    release {
      minifyEnabled true
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
      signingConfig signingConfigs.release
    }
  }
  lintOptions {
    abortOnError false
  }
  packagingOptions {
    pickFirst "**"
  }
}

devicefarm {
  projectName System.getenv("DEVICEFARM_PROJECT_NAME")
  devicePool System.getenv("DEVICEFARM_DEVICE_POOL")
  executionTimeoutMinutes 40
  authentication {

    accessKey System.getenv("AWS_ACCESS_KEY_ID")
    secretKey System.getenv("AWS_SECRET_ACCESS_KEY")
  }
}

configurations.all {
  resolutionStrategy {
    force 'org.webkit:android-jsc:r245459'
  }
}

// WHEN_PREPARING_SHELL_REMOVE_FROM_HERE

apply from: 'expo.gradle'

// WHEN_PREPARING_SHELL_REMOVE_TO_HERE

apply from: "../../node_modules/react-native-unimodules/gradle.groovy"

dependencies {
    implementation project(':react-native-torch')
    implementation project(':react-native-twilio-video-webrtc')
    implementation project(':react-native-exit-app')
    implementation project(':react-native-fs')
    implementation project(':react-native-document-picker')
    implementation project(':rn-fetch-blob')
    implementation project(':react-native-onesignal')
    implementation project(':react-native-vector-icons')
    implementation project(':react-native-randombytes')
  implementation fileTree(dir: 'libs', include: ['*.jar'])

  compile project(':tipsi-stripe')

  implementation 'com.android.support:multidex:1.0.1'

  // Our dependencies
  implementation "com.android.support:appcompat-v7:$supportLibVersion"

  // Our dependencies from ExpoView
  // DON'T ADD ANYTHING HERE THAT ISN'T IN EXPOVIEW. ONLY COPY THINGS FROM EXPOVIEW TO HERE.
  implementation "com.android.support:appcompat-v7:$supportLibVersion"
  implementation 'com.facebook.android:facebook-android-sdk:5.0.1'
  implementation('com.facebook.android:audience-network-sdk:5.1.1') {
    exclude module: 'play-services-ads'
  }
  compileOnly 'org.glassfish:javax.annotation:3.1.1'
  implementation 'com.jakewharton:butterknife:9.0.0'
  implementation 'de.greenrobot:eventbus:2.4.0'

  implementation 'com.squareup.picasso:picasso:2.5.2'
  implementation 'com.google.android.gms:play-services-gcm:15.0.1'
  implementation 'com.google.android.gms:play-services-analytics:16.0.1'
  implementation 'com.google.android.gms:play-services-maps:15.0.1'
  implementation 'com.google.android.gms:play-services-auth:15.0.1'
  implementation 'com.google.android.gms:play-services-location:15.0.1'
  implementation 'com.google.android.gms:play-services-ads:15.0.1'
  //annotationProcessor 'com.raizlabs.android:DBFlow-Compiler:2.2.1'
  //implementation "com.raizlabs.android:DBFlow-Core:2.2.1"
  //implementation "com.raizlabs.android:DBFlow:2.2.1"
  implementation "com.madgag.spongycastle:core:1.53.0.0"
  implementation "com.madgag.spongycastle:prov:1.53.0.0"
  debugImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta1'
  // debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.4-beta1'
  releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta1'
  implementation 'com.facebook.device.yearclass:yearclass:2.1.0'
  implementation 'commons-io:commons-io:1.4'
  implementation 'me.leolin:ShortcutBadger:1.1.4@aar'
  implementation 'com.theartofdev.edmodo:android-image-cropper:2.7.0'
  implementation 'commons-codec:commons-codec:1.10'
  implementation 'com.segment.analytics.android:analytics:4.3.0'
  implementation 'com.google.zxing:core:3.3.3'
  implementation 'net.openid:appauth:0.4.1'
  implementation 'com.airbnb.android:lottie:2.5.6'
  implementation('io.nlopez.smartlocation:library:3.2.11') {
    transitive = false
  }
  implementation "com.android.support:exifinterface:${safeExtGet("supportLibVersion", "28.0.0")}"
  implementation 'com.squareup.okio:okio:1.9.0'
  implementation 'com.facebook.soloader:soloader:0.6.0'

  // expo-file-system
  implementation 'com.squareup.okhttp3:okhttp:3.10.0'
  implementation 'com.squareup.okhttp3:okhttp-urlconnection:3.10.0'

  // Testing
  androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
  // We use a modified build of com.android.support.test:runner:1.0.1. Explanation in maven-test/README
  androidTestImplementation 'com.android.support.test:runner:1.0.1'
  androidTestImplementation "com.android.support:support-annotations:${safeExtGet("supportLibVersion", "28.0.0")}"
  androidTestImplementation 'com.google.code.findbugs:jsr305:3.0.0'
  androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'
  androidTestImplementation 'com.azimolabs.conditionwatcher:conditionwatcher:0.2'

  testImplementation 'junit:junit:4.12'
  testImplementation 'org.mockito:mockito-core:1.10.19'
  testImplementation 'org.robolectric:robolectric:3.8'
  testImplementation 'com.android.support.test:runner:1.0.2-alpha1'
  testImplementation 'com.android.support.test:rules:1.0.2-alpha1'


  implementation('host.exp.exponent:expoview:35.0.0@aar') {
    transitive = true
    exclude group: 'com.squareup.okhttp3', module: 'okhttp'
    exclude group: 'com.squareup.okhttp3', module: 'okhttp-urlconnection'
  }




  api 'org.webkit:android-jsc:r245459' // needs to be before react-native
  api 'com.facebook.react:react-native:35.0.0'




  addUnimodulesDependencies([
      modulesPaths : [
        '../../node_modules'
      ],
      configuration: 'api',
      target       : 'react-native',
      exclude      : [
        // You can exclude unneeded modules here.
        // By default we exclude FaceDetector
        // and Stripe payments APIs.
        'unimodules-face-detector-interface',
        'expo-face-detector',
        'expo-payments-stripe'

        // Adding a name here will also remove the package
        // from auto-generated BasePackageList.java
      ]
  ])

}

// This has to be down here for some reason
apply plugin: 'com.google.gms.google-services'
googleServices {
  disableVersionCheck = true
}

Обновление 3 : я создал подписанный APK сейчас и попытался проверить его подпись с помощью jarsigner:

jarsigner -verify -verbose -certs /***/app-release.apk

Эта команда выдает следующую ошибку:

jarsigner: java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

Мне кажется, что это может быть важной частью головоломки. Однако я не смог найти никакой полезной информации об этой ошибке.

Максимилиан Краузе
источник
Можете показать свой android / app / build.gradlew?
Андре Пинто
@ AndréPinto добавил это к вопросу. Цензурированный идентификатор приложения в defaultConfig.
Максимилиан Краузе

Ответы:

0

Пожалуйста, не забудьте выбрать загрузку в качестве псевдонима ключа при создании APK или AAB, см. Рисунок для справки.

введите описание изображения здесь

Б. Мухаммед
источник
0

Возможно, это не тот ответ, который вы ищете, но вы пытались использовать командную строку для создания хранилищ ключей, в отличие от использования Android Studio.

Если это не сработает, то я начну изучать модули, особенно выставочные, так как они вызвали у меня некоторое горе в последние недели.

Реагируйте с родным руководством по публикации для Android

Бен Б
источник
0

Собираюсь ответить на мой собственный вопрос здесь, хотя это и не совсем решение исходной проблемы, а еще немного о ExpoKit.

Теперь я полностью удалил ExpoKit из нашего приложения. Ранее мы извлекли из управляемого рабочего процесса Expo в ExpoKit, так как нам были нужны другие, встроенные функции, такие как WebRTC, которые еще не поддерживались Expo. Однако, чтобы быть полностью честным здесь, мы, вероятно, должны были обнажить Реагировать Native вместо пола-оптимального ExpoKit.

Если вы можете использовать управляемый рабочий процесс, хорошо, сделайте это! Определенно делает некоторые вещи проще. Однако, если вам нужны другие, неподдерживаемые встроенные функции, сделайте себе одолжение и вернитесь к голой RN, если вы можете сделать это легко.

Потому что, идя от Экспо Кит к голой RN - это не очарование. Пришлось инициировать целый новый проект RN, скопировать JavaScript, переустановить модули один за другим, исправить некоторые собственные проблемы и т. Д. И т. Д. - два дня работы только для того, чтобы снова запустить приложение.

Однако, после всей этой работы, теперь мы стоим с тем же приложением, только без ExpoKit.

Плюсы:

  • Загрузка приложения в Google Play наконец работает.
  • Уменьшен размер загрузки приложения более чем на 70% (!)
  • Простота автоматического связывания через RN 0,60 (хотя ExpoKit и сейчас поддерживает это с помощью новейшего SDK - обновление Expo SDK - это целая наука для себя, хотя часто)
  • Мы все еще можем использовать модули Expo, которые мы научились любить, как expo-secure-store через unimodules.
  • Возможно, это плацебо, но производительность приложения, похоже, тоже улучшилась.
  • Время выпуска приложений увеличилось примерно на 50% на iOS, на 60% на Android
  • Похоже, что запуск приложения идет быстро, хотя на iPhone 11 Pro раньше требовалось 2-3 секунды, а сейчас - считанные миллисекунды.

Минусы: не смог найти пока.

Максимилиан Краузе
источник