Paquete de aplicaciones de Android de React Native: subiste un paquete de aplicaciones de Android o Android con información de firma no válida o faltante para algunos de sus archivos

10

Intento publicar una aplicación por primera vez en Google Play Store. He optado por la firma de Google Play. Sé con certeza que estoy firmando el paquete de aplicaciones de Android con la clave correcta ya que, cuando estoy cargando con otra clave, la consola me indicará que cargue usando la otra clave con el identificador SHA1 específico. Sin embargo, cuando subo con la clave correcta, aparece este error:

Cargó un paquete de aplicaciones APK o Android con información de firma no válida o faltante para algunos de sus archivos.

Estoy creando la aplicación usando Android Studio de la siguiente manera: Compilar> Generar paquete firmado / APK> Paquete de aplicación Android> Elegir mi almacén de claves e ingresar la contraseña> liberar> Finalizar

La aplicación es una aplicación React Native construida con Expo / ExpoKit separado. Cargar en la App Store de Apple funciona bien, solo tengo problemas con Play Store. ¿Qué me estoy perdiendo?

Actualización 1 : ahora eliminé completamente la aplicación de Google Play y creé una nueva. Lo hizo no opt in para Google Play firma de este tiempo y subido un APK firmado. Sigue siendo el mismo error.

Actualización 2 : Intentado con un almacén de claves y una clave completamente nuevos. Siempre lo mismo.

Aquí hay una descripción general de la configuración del proyecto si de alguna manera esto fuera importante: Descripción del proyecto

Y aquí está el 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
}

Actualización 3 : he creado un APK firmado ahora e intenté validar su firma usando jarsigner:

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

Este comando produce el siguiente error:

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

Para mí, parece que esta podría ser una pieza importante del rompecabezas. Sin embargo, no pude encontrar ninguna información útil sobre este error hasta ahora.

Maximilian Krause
fuente
¿Puedes mostrar tu android / app / build.gradlew?
André Pinto
@ AndréPinto Lo agregó a la pregunta. Censurado el ID de la aplicación en la configuración predeterminada.
Maximilian Krause

Respuestas:

0

Asegúrese de seleccionar cargar como alias clave al hacer APK o AAB, vea la imagen como referencia.

ingrese la descripción de la imagen aquí

B. Mohammad
fuente
0

Puede que no sea la respuesta que está buscando, pero ¿ha intentado usar la línea de comandos para generar almacenes de claves, en lugar de usar Android Studio?

Si esto no funciona, entonces comenzaría a buscar en los módulos, especialmente los de exposición, ya que me han causado un poco de dolor en las últimas semanas.

Reaccionar guía nativa sobre publicación para Android

Ben B
fuente
0

Voy a responder mi propia pregunta aquí, a pesar de que no es una solución para el problema original, sino más bien de ventilar con respecto a ExpoKit.

Ahora eliminé completamente ExpoKit de nuestra aplicación. Anteriormente expulsamos del flujo de trabajo administrado de Expo a ExpoKit ya que necesitábamos otra funcionalidad nativa como WebRTC que todavía no era compatible con Expo. Sin embargo, para ser completamente honesto aquí, probablemente deberíamos haber expulsado a React Native desnudo en lugar de ExpoKit semi-óptimo.

Si puede seguir con el flujo de trabajo administrado, bien, ¡hágalo! Definitivamente hace algunas cosas más fáciles. Sin embargo, si necesita otra funcionalidad nativa no compatible, hágase un favor y vuelva a RN desnudo siempre que pueda hacerlo fácilmente.

Porque, pasar de Expo Kit a RN desnudo no tiene ningún encanto. Tuve que iniciar un proyecto RN completamente nuevo, copiar el JavaScript, reinstalar los módulos uno por uno, solucionar algunos problemas nativos, etc., etc., dos días de trabajo solo para que la aplicación vuelva a funcionar.

Sin embargo, después de todo ese trabajo, ahora estamos con nuestra misma aplicación, solo que sin ExpoKit.

Pros:

  • Subir la aplicación a Google Play finalmente funciona.
  • Se redujo el tamaño de descarga de la aplicación en más del 70% (!)
  • Facilidad de enlace automático a través de RN 0.60 (a pesar de que ExpoKit también lo admite ahora con el SDK más reciente: actualizar el Expo SDK es una ciencia completa para sí mismo, aunque a menudo)
  • Todavía podemos usar módulos Expo que realmente aprendimos a amar como expo-secure-store a través de unimodules.
  • Podría ser un placebo, pero el rendimiento de la aplicación también parece haber mejorado.
  • Los tiempos de compilación de la aplicación de lanzamiento aumentaron aproximadamente un 50% en iOS, un 60% en Android
  • Parece que el inicio de la aplicación está acelerado, mientras que antes tardaba de 2 a 3 segundos en iniciarse en un iPhone 11 Pro, ahora es cuestión de milisegundos.

Contras: No pude encontrar uno hasta ahora.

Maximilian Krause
fuente