Kumpulan Aplikasi Android dari React Native: Anda mengunggah APK atau Kumpulan Aplikasi Android dengan informasi penandatanganan yang tidak valid atau tidak ada untuk beberapa file-nya

10

Saya mencoba untuk menerbitkan aplikasi untuk pertama kalinya ke Google Play Store. Saya telah memilih ikut Google Play Signing. Saya tahu pasti bahwa saya menandatangani Bundel Aplikasi Android dengan kunci yang tepat karena, ketika saya mengunggah menggunakan kunci lain, Konsol akan meminta saya untuk mengunggah menggunakan kunci lainnya dengan pengidentifikasi SHA1 tertentu. Namun, ketika saya mengunggah dengan kunci yang benar, saya mendapatkan kesalahan ini:

Anda mengunggah APK atau Kumpulan Aplikasi Android dengan informasi penandatanganan yang tidak valid atau tidak ada untuk beberapa file-nya.

Saya sedang membangun aplikasi menggunakan Android Studio seperti ini: Build> Generate Signed Bundle / APK> Bundel Aplikasi Android> Memilih keystore saya dan memasukkan kata sandi> lepaskan> Selesai

Aplikasi ini adalah aplikasi Bereaksi Asli yang dibangun dengan Expo / ExpoKit yang terpisah. Mengunggah ke Apple App Store berfungsi dengan baik, saya hanya memiliki masalah dengan Play Store. Apa yang saya lewatkan?

Pembaruan 1 : Saya sekarang benar-benar menghapus aplikasi dari Google Play dan membuat yang baru. Apakah tidak memilih dalam untuk Google Play Penandatanganan saat ini dan upload APK ditandatangani. Masih kesalahan yang sama.

Perbarui 2 : Mencoba dengan kunci dan kunci yang benar-benar baru. Masih sama.

Berikut adalah ikhtisar pengaturan proyek jika ini entah bagaimana menjadi penting: Ulasan Proyek

Dan inilah 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
}

Pembaruan 3 : Saya telah membuat APK yang ditandatangani sekarang dan mencoba memvalidasi tanda tangannya menggunakan jarsigner:

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

Perintah ini menghasilkan kesalahan berikut:

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

Bagi saya sepertinya ini mungkin bagian penting dari teka-teki. Namun, sejauh ini saya tidak dapat menemukan informasi bermanfaat mengenai kesalahan ini.

Maximilian Krause
sumber
Bisakah Anda menunjukkan android / app / build.gradlew Anda?
André Pinto
@ AndréPinto Menambahkannya ke pertanyaan. Disensor applicationId di defaultConfig.
Maximilian Krause

Jawaban:

0

Pastikan memilih unggahan sebagai alias kunci saat membuat APK atau AAB, lihat gambar untuk referensi.

masukkan deskripsi gambar di sini

B. Mohammad
sumber
0

Mungkin bukan jawaban yang Anda cari, tetapi apakah Anda sudah mencoba menggunakan baris perintah untuk menghasilkan keystores, sebagai lawan menggunakan Android Studio.

Jika ini tidak berhasil, maka saya akan mulai melihat ke dalam modul, terutama yang expo, karena mereka telah membuat saya sedih selama beberapa minggu terakhir.

Bereaksi panduan asli tentang penerbitan untuk Android

Ben B
sumber
0

Akan menjawab pertanyaan saya sendiri di sini, meskipun itu bukan solusi untuk masalah asli, lebih banyak ventilasi tentang ExpoKit.

Saya sekarang benar-benar menghapus ExpoKit dari aplikasi kami. Kami sebelumnya dikeluarkan dari alur kerja Expo yang dikelola ke ExpoKit karena kami membutuhkan fungsionalitas asli lain seperti WebRTC yang belum didukung oleh Expo. Namun, untuk benar-benar jujur ​​di sini, kita mungkin harus dikeluarkan untuk telanjang React Native daripada ExpoKit semi-optimal.

Jika Anda bisa mengikuti alur kerja yang dikelola, baiklah, lakukanlah! Pasti membuat beberapa hal lebih mudah. Namun, jika Anda memerlukan fungsionalitas asli lain yang tidak didukung, bantulah diri Anda sendiri dan kembali ke RN telanjang selama Anda dapat melakukannya dengan mudah.

Karena, beralih dari Expo Kit ke RN yang kosong bukanlah daya tarik apa pun. Harus memulai proyek RN baru, menyalin JavaScript, menginstal ulang modul satu per satu, memperbaiki beberapa masalah asli dll dll - dua hari kerja hanya untuk mendapatkan aplikasi kembali berjalan.

Namun, setelah semua pekerjaan itu, sekarang kita berdiri dengan aplikasi yang sama, hanya tanpa ExpoKit.

Pro:

  • Mengunggah aplikasi ke Google Play akhirnya berhasil.
  • Ukuran unduhan aplikasi berkurang hingga lebih dari 70% (!)
  • Kemudahan autolinking melalui RN 0,60 (meskipun ExpoKit mendukungnya juga sekarang di sekitar dengan SDK terbaru - memperbarui Expo SDK adalah ilmu pengetahuan untuk dirinya sendiri meskipun sering kali)
  • Kita masih bisa menggunakan modul Expo yang sebenarnya kita pelajari sukai seperti expo-secure-store melalui unimodules.
  • Mungkin menggunakan plasebo, tetapi kinerja aplikasi tampaknya telah meningkat juga.
  • Rilis waktu pengembangan aplikasi meningkat sekitar 50% di iOS, 60% di Android
  • Peluncuran aplikasi sepertinya sedang dalam kecepatan - sementara sebelumnya butuh sekitar 2 hingga 3 detik pada iPhone 11 Pro untuk diluncurkan, sekarang tinggal hitungan milidetik.

Cons: Tidak dapat menemukannya sejauh ini.

Maximilian Krause
sumber