加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

React原生Android应用程序在一部手机上工作,但在另一部手机上崩

发布时间:2020-12-15 20:30:52 所属栏目:百科 来源:网络整理
导读:我有使用React Native(不是expo)开发的 android移动应用程序.我在模拟器(android和IOS)上测试它,它工作正常.然后我把它发布到谷歌播放.我在3台设备上测试了它: 1)一加一 – 工作正常 2)三星S8 – 崩溃 3)三星S7 – 崩溃 我找到了崩溃的原因.三星正在采用app
我有使用React Native(不是expo)开发的 android移动应用程序.我在模拟器(android和IOS)上测试它,它工作正常.然后我把它发布到谷歌播放.我在3台设备上测试了它:
1)一加一 – 工作正常
2)三星S8 – 崩溃
3)三星S7 – 崩溃

我找到了崩溃的原因.三星正在采用app-arm64-v8a-release.apk,而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

            }
        }
    }
}

解决方法

由于RN目前仅支持32位应用程序,因此您需要使用最新的RN版本0.58.3

我已成功使用它并测试64位应用程序,或者您可以删除应用程序的64版本,然后playstore将自动为用户安装32位版本的应用程序.

只支持32位支持替换你的

包括“x86”,“x86_64”,“armeabi-v7a”,“arm64-v8a”

包括“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位问题here

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读