React原生Android应用程序在一部手机上工作,但在另一部手机上崩溃(通过谷歌游戏商店生产)

sus*_*sal 5 android react-native

我有使用React Native(不是expo)开发的android移动应用程序.我在模拟器(android和IOS)上测试它,它工作正常.然后我把它发布到谷歌播放.我在3台设备上测试了它:1)一加一 - 工作正常2)三星S8 - 崩溃3)三星S7 - 崩溃

我找到了崩溃的原因.三星正在拿起app-arm64-v8a-release.apk而1 + 1正在通过谷歌播放安装app-armeabi-v7a-release.apk.如果我在三星手机上手动下载app-armeabi-v7a-release.apk(而不是通过谷歌播放),那么应用程序工作正常.一些问题:

1)三星应该下载它正在下载的内容(app-arm64-v8a-release.apk)?2)如果是(我认为是对的)那么可能是什么问题?我如何调试生产应用程序.

注意:如果我在1 + 1和三星手机上手动安装通用apk,应用程序崩溃.

这是我的gradele.build文件

def enableSeparateBuildPerCPUArchitecture = true

def enableProguardInReleaseBuilds = true

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion

    defaultConfig {
        applicationId "com.bakbakapp.bakbak"
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 3
        versionName "3.0"
    }
    signingConfigs {
        release {
            if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
                storeFile file(MYAPP_RELEASE_STORE_FILE)
                storePassword MYAPP_RELEASE_STORE_PASSWORD
                keyAlias MYAPP_RELEASE_KEY_ALIAS
                keyPassword MYAPP_RELEASE_KEY_PASSWORD
            }
        }
    }
    splits {
        abi {
            def isReleaseBuild = false

            gradle.startParameter.taskNames.find {
                if (it ==~ /:app:assemble.*Release/) {
                    isReleaseBuild = true
                    return true // break
                }
                return false // continue
            }
            reset()
            enable enableSeparateBuildPerCPUArchitecture
            universalApk true  // If true, also generate a universal APK
            include "x86", "x86_64", "armeabi-v7a", "arm64-v8a"
        }
    }
    buildTypes {
        release {
            minifyEnabled enableProguardInReleaseBuilds
            shrinkResources true
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
            signingConfig signingConfigs.release
        }
    }
    // Map for the version code that gives each ABI a value.
    def abiCodes = ['x86':1, 'x86_64':2, 'armeabi-v7a':3, 'arm64-v8a':4]

    // applicationVariants are e.g. debug, release
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def abi = output.getFilter(OutputFile.ABI)
            if (abi != null) { 
                output.versionCodeOverride = abiCodes.get(abi, 0) * 1048576 + defaultConfig.versionCode

            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

war*_*0ck 1

由于 RN 目前仅支持 32 位应用程序,您需要使用最新RN version 0.58.3

我已经成功使用它并测试了 64 位应用程序,或者您可以删除该应用程序的 64 位版本,然后 Playstore 会自动为用户安装该应用程序的 32 位版本。

对于仅 32 位支持,请替换您的

include "x86", "x86_64", "armeabi-v7a", "arm64-v8a"

include "x86" "armeabi-v7a"

和类似地

def abiCodes = ['x86':1, 'x86_64':2, 'armeabi-v7a':3, 'arm64-v8a':4]

def abiCodes = ['x86':1, 'armeabi-v7a':2]

您可以在此处跟踪 RN 64 位问题