React Native安卓应用在一个手机上能运行但在另一个手机上崩溃(通过Google Play商店发布)。

7

我已经用React Native(非expo)开发了一个Android手机应用程序。我在模拟器(Android和IOS)上进行了测试,它可以正常运行。然后我将应用发布到谷歌商店,在三个设备上进行了测试:

1)One plus one - 可以正常运行; 2)Samsung S8 - 崩溃; 3)Samsung S7 - 崩溃。

我发现了崩溃的原因。在安装1+1时,谷歌商店会安装app-armeabi-v7a-release.apk,而三星却会选择安装app-arm64-v8a-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

            }
        }
    }
}

你使用的是哪个版本的React Native?如果你的RN版本低于0.57,则arm64-v8a将无法工作。 - warl0ck
嗨@warl0ck,我正在使用RN:0.57.8。 - sushil bansal
是的,根据最新的讨论支持64位版本,您将需要使用RN 0.58.3,或者可以跳过64位构建,因为32位也可以正常工作。 - warl0ck
好的,谢谢@warl0ck提供的信息。我会从我的列表中删除这个特定的apk。 - sushil bansal
在这种情况下,删除"x86_64"和"arm64-v8a"。 - warl0ck
1个回答

1

目前RN仅支持32位应用程序,因此您需要使用最新的RN版本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位问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接