React Native'den Android Uygulama Paketi: Bazı dosyaları için geçersiz veya eksik imza bilgileri içeren bir APK veya Android Uygulama Paketi yüklediniz


10

Google Play Store'da ilk kez bir uygulama yayınlamaya çalışıyorum. Google Play İmzalamayı seçtim. Başka bir anahtar kullanarak karşıya yüklerken, Konsol bana belirli SHA1 tanımlayıcısına sahip diğer anahtarı kullanarak yüklememi söyleyeceğinden, Android Uygulama Paketi'ni doğru anahtarla imzaladığımı biliyorum. Ancak, doğru anahtarla yüklediğimde şu hatayı alıyorum:

Bazı dosyaları için geçersiz veya eksik imza bilgileri içeren bir APK veya Android Uygulama Paketi yüklediniz.

Uygulamayı şu şekilde Android Studio kullanarak yapıyorum: Oluştur> İmzalı Paket Oluştur / APK> Android Uygulama Paketi> Anahtar depomu seçme ve şifreyi girme> bırak> Son

Uygulamaya müstakil Expo / ExpoKit ile inşa React Yerli app. Apple App Store'a yükleme gayet iyi çalışıyor, yalnızca Play Store ile ilgili sorun yaşıyorum. Neyi kaçırıyorum?

Güncelleme 1 : Şimdi uygulamayı Google Play'den tamamen sildim ve yeni bir tane oluşturdum. Mü değil bu sefer açma işlemi, Google Play için kaydolun ve imzalı APK yüklediniz. Yine de aynı hata.

Güncelleme 2 : Tamamen yeni bir anahtar deposu ve anahtar ile denendi. Hala aynı.

Bir şekilde önemli olacaksa proje kurulumuna genel bakış: Projeye Genel Bakış

Ve işte 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
}

Güncelleme 3 : Şimdi imzalı bir APK oluşturdum ve jarsigner kullanarak imzasını doğrulamaya çalıştım:

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

Bu komut aşağıdaki hatayı üretir:

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

Bana göre bu bulmacanın önemli bir parçası olabilir. Ancak, şu ana kadar bu hatayla ilgili herhangi bir yararlı bilgi bulamadım.


Android / app / build.gradlew gösterebilir misiniz?
André Pinto

@ AndréPinto Soruya ekledi. DefaultConfig içinde applicationId sansürlendi.
Maximilian Krause

Yanıtlar:


0

APK veya AAB yaparken lütfen anahtar takma adı olarak yüklemeyi seçtiğinizden emin olun, referans için resme bakın.

resim açıklamasını buraya girin



0

Burada kendi soruma cevap verecek, orijinal soruna bir çözüm olmasa da, ExpoKit ile ilgili daha fazla hava tahliye.

Artık ExpoKit'i uygulamamızdan tamamen kaldırdım. Daha önce Expo tarafından desteklenmeyen WebRTC gibi diğer yerel işlevlere ihtiyaç duyduğumuzdan, yönetilen Expo iş akışından ExpoKit'e çıkardık. Bununla birlikte, burada tamamen dürüst olmak gerekirse, muhtemelen yarı optimal ExpoKit yerine çıplak React Native'i çıkarmamız gerekirdi.

Yönetilen iş akışıyla gidebilirseniz, tamam! Kesinlikle bazı şeyleri kolaylaştırır. Bununla birlikte, başka, desteklenmeyen yerel işlevselliğe ihtiyacınız varsa, kendinize bir iyilik yapın ve kolayca yapabildiğiniz sürece çıplak RN'ye geri dönün.

Çünkü Expo Kit'ten çıplak RN'ye geçmek hiç de cazip değil. Tamamen yeni bir RN projesi başlatmak zorunda kaldı, JavaScript kopyalayın, modülleri tek tek yeniden yükleyin, bazı yerel sorunları vb. Düzeltmek - sadece uygulamayı geri çalıştırmak için iş iki gün.

Ancak, tüm bu çalışmalardan sonra, şimdi sadece ExpoKit olmadan aynı uygulamamızla duruyoruz.

Artıları:

  • Uygulamayı Google Play'e yüklemek sonunda çalışıyor.
  • Uygulama indirme boyutunu% 70'in üzerinde azalttı (!)
  • RN 0.60 ile otomatik bağlantı kolaylığı (ExpoKit şimdi en yeni SDK ile de destekliyor olsa da - Expo SDK'yı güncellemek çoğu zaman kendisi için tam bir bilimdir)
  • Aslında sevmeyi öğrendiğimiz Expo modüllerini unimodüller aracılığıyla expo-güvenli-mağaza gibi kullanabiliriz.
  • Plasebo olabilir, ancak uygulamanın performansı da iyileşmiş gibi görünüyor.
  • Yayın uygulaması oluşturma süreleri iOS'ta yaklaşık% 50, Android'de% 60 arttı
  • Uygulama lansmanı hızda gibi görünüyor - daha önce bir iPhone 11 Pro'da başlatmak yaklaşık 2 ila 3 saniye sürerken, şimdi milisaniye meselesi.

Eksileri: Şimdiye kadar bulamadım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.