Bundle แอพ Android จาก React Native: คุณอัปโหลด Bundle แอพ APK หรือ Android ที่มีข้อมูลการเซ็นชื่อไม่ถูกต้องหรือหายไปสำหรับไฟล์บางไฟล์


10

ฉันพยายามเผยแพร่แอพเป็นครั้งแรกที่ Google Play Store ฉันสมัครเข้าใช้ Google Play แล้ว ฉันรู้ว่าฉันลงนามใน Android App Bundle ด้วยปุ่มขวาตั้งแต่เมื่อฉันอัปโหลดโดยใช้คีย์อื่นคอนโซลจะบอกให้ฉันอัปโหลดโดยใช้คีย์อื่นด้วยรหัส SHA1 ที่ระบุ อย่างไรก็ตามเมื่อฉันอัปโหลดด้วยคีย์ที่ถูกต้องฉันได้รับข้อผิดพลาดนี้:

คุณอัปโหลด APK หรือ Android App Bundle ด้วยข้อมูลการเซ็นชื่อที่ไม่ถูกต้องหรือขาดหายไปสำหรับไฟล์บางไฟล์

ฉันกำลังสร้างแอพโดยใช้ Android Studio เช่น: Build> สร้าง Bundle ที่ลงชื่อแล้ว / APK> Android App Bundle> การเลือกที่เก็บคีย์และป้อนรหัสผ่าน> ปล่อย> เสร็จสิ้น

แอพนี้เป็นแอป 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

@ AndréPintoเพิ่มไว้ในคำถาม ตรวจสอบ applicationId ใน defaultConfig
Maximilian Krause

คำตอบ:


0

โปรดตรวจสอบให้แน่ใจว่าได้เลือกการอัปโหลดเป็นนามแฝงสำคัญเมื่อสร้าง APK หรือ AAB ให้ดูรูปภาพสำหรับการอ้างอิง

ป้อนคำอธิบายรูปภาพที่นี่


0

อาจไม่ใช่คำตอบที่คุณกำลังมองหา แต่คุณลองใช้บรรทัดคำสั่งเพื่อสร้างที่เก็บคีย์แทนการใช้ Android Studio

ถ้าสิ่งนี้ไม่ได้ผลฉันจะเริ่มมองหาโมดูลโดยเฉพาะอย่างยิ่งงานแสดงสินค้าเพราะพวกเขาทำให้ฉันเศร้าใจในช่วงสัปดาห์ที่ผ่านมา

ตอบโต้คู่มือเนทีฟเกี่ยวกับการเผยแพร่สำหรับ Android


0

จะตอบคำถามของฉันเองที่นี่แม้ว่ามันจะไม่ใช่วิธีแก้ปัญหาดั้งเดิม แต่ก็มีอะไรเพิ่มเติมที่เกี่ยวกับ ExpoKit

ตอนนี้ฉันลบ ExpoKit ออกจากแอพของเราอย่างสมบูรณ์แล้ว ก่อนหน้านี้เราได้นำออกจากเวิร์กโฟลว์ Expo ที่มีการจัดการไปยัง ExpoKit เนื่องจากเราต้องการฟังก์ชั่นพื้นฐานอื่น ๆ เช่น WebRTC ที่ยังไม่ได้รับการสนับสนุนจาก Expo แต่จะสมบูรณ์ซื่อสัตย์ที่นี่เราอาจจะได้ถูกขับออกมาจะเปลือย React พื้นเมืองแทน ExpoKit กึ่งดีที่สุด

หากคุณสามารถไปกับเวิร์กโฟลว์ที่มีการจัดการทำได้ดี! ทำให้บางสิ่งง่ายขึ้นแน่นอน อย่างไรก็ตามหากคุณต้องการฟังก์ชั่นพื้นฐานอื่น ๆ ที่ไม่รองรับให้ทำตามใจชอบแล้วย้อนกลับไปหา RN เปล่า ๆ ตราบใดที่คุณทำได้อย่างง่ายดาย

เพราะการเปลี่ยนจาก Expo Kitเป็น RN นั้นไม่มีเสน่ห์อะไรเลย ต้องเริ่มต้นโครงการ RN ใหม่ทั้งหมดคัดลอก JavaScript ไปที่ติดตั้งโมดูลใหม่ทีละรายการแก้ไขปัญหาพื้นฐานบางอย่าง ฯลฯ - สองวันทำงานเพื่อให้แอปทำงานได้อีกครั้ง

อย่างไรก็ตามหลังจากการทำงานทั้งหมดตอนนี้เรายืนอยู่กับแอพเดียวกันของเราโดยไม่ต้อง ExpoKit

ข้อดี:

  • ในที่สุดการอัปโหลดแอปไปยัง Google Play จะใช้งานได้ในที่สุด
  • ขนาดการดาวน์โหลดแอปลดลงกว่า 70% (!)
  • ความสะดวกในการตรวจสอบอัตโนมัติผ่าน RN 0.60 (แม้ว่า ExpoKit จะรองรับเช่นกันในขณะนี้ iirc ด้วย SDK ใหม่ล่าสุด - การอัปเดต Expo SDK เป็นศาสตร์ทั้งหมดสำหรับตัวเอง แต่บ่อยครั้ง)
  • เรายังคงสามารถใช้โมดูล Expo ที่เราเรียนรู้ที่จะรักอย่างร้านเอ็กซ์โปที่ปลอดภัยผ่าน unimodules
  • อาจเป็นยาหลอก แต่ดูเหมือนว่าประสิทธิภาพของแอพจะดีขึ้นเช่นกัน
  • เวลาในการปล่อยแอพเพิ่มขึ้นประมาณ 50% ใน iOS และ 60% สำหรับ Android
  • การเปิดตัวแอพดูเหมือนจะเร็ว - ในขณะที่ก่อนหน้านี้ใช้เวลาประมาณ 2 ถึง 3 วินาทีในการเปิดตัว iPhone 11 Pro ตอนนี้มันเป็นเรื่องของมิลลิวินาที

จุดด้อย: หาไม่เจอ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.