Реагируйте на родной пакет gradlewRelease и запустите - android --variant = release, чтобы сделать разные APK - PullRequest
1 голос
/ 11 февраля 2020

Я пытаюсь выпустить приложение React Native (v0.61.5) в Google Play Store, но формат пакета приложений не создает правильный APK (пробовал на OnePlus 6t, Xiaomi Redmi Note 7 и Android эмулятор Pixel 3 API 29 (Google API) x86_64)

У меня есть Android вариантов настройки следующим образом:

flavorDimensions "server"
productFlavors {
    local {
        dimension "server"
        applicationIdSuffix ".local"
        versionNameSuffix "-local"
    }
    staging {
        dimension "server"
        applicationIdSuffix ".staging"
        versionNameSuffix "-staging"
    }
    production {
        dimension "server"
        versionName "1.0.0"
    }
}

Когда я запускаю приложение с запуском - android работает как следует:

npx react-native run-android --variant=productionRelease

Но если я попытаюсь сделать .aab приложение запускается, но при первой загрузке загружает 20 ~ МБ пользовательских данных, а при запуске приложения оно имеет случайное поведение, лаги и зависает, и я не могу определить, что это может быть:

cd android && ./gradlew clean && ./gradlew bundleProductionRelease

На Android / build.gradle У меня есть следующее:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ext {
        buildToolsVersion = "28.0.3"
        minSdkVersion = 19
        compileSdkVersion = 28
        targetSdkVersion = 28
        supportLibVersion = "28.0.0"
        googlePlayServicesVersion = "15.0.1"
    }
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath('com.android.tools.build:gradle:3.5.3')
        // FIREBASE
        classpath 'com.google.gms:google-services:4.3.3'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        mavenLocal()
        maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url("$rootDir/../node_modules/react-native/android")
        }
        maven {
            // Android JSC is installed from npm
            url("$rootDir/../node_modules/jsc-android/dist")
        }

        google()
        jcenter()

        maven { url 'https://jitpack.io' }
        maven { url "https://maven.google.com" }
    }
}

subprojects { subproject ->
    afterEvaluate {
        if ((subproject.plugins.hasPlugin('android') || subproject.plugins.hasPlugin('android-library'))) {
            android {
                variantFilter { variant ->
                    def names = variant.flavors*.name
                    if (names.contains("reactNative51") || names.contains("reactNative55")) {
                        setIgnore(true)
                    }
                }
            }
        }
    }
}

Я использую Gradle 5.5:

distributionUrl=https\://services.gradle.org/distributions/gradle-5.5-all.zip

В gradle.properties я включил AndroidX и Jetifier:

android.useAndroidX=true
android.enableJetifier=true

org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.configureondemand=false
org.gradle.jvmargs=-Xmx2g -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

В android / app / build.gradle я также изменил:

def enableSeparateBuildPerCPUArchitecture = true

def enableProguardInReleaseBuilds = true

project.ext.react = [
    entryFile: "index.js",
    enableHermes: false,  // clean and rebuild if changing
    bundleInRelease: false,
]

buildTypes {
    debug {
        signingConfig signingConfigs.release
        multiDexEnabled true
    }
    release {
        signingConfig signingConfigs.release
        minifyEnabled enableProguardInReleaseBuilds
        proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
        shrinkResources true
        debuggable false
        jniDebuggable false
        renderscriptDebuggable false
        pseudoLocalesEnabled false
        zipAlignEnabled true
        multiDexEnabled true
    }
}


Из-за bundleInRelease: false Я делаю связку перед вызовом Gradle с помощью:

npx react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/

Я проверяю .aab с bundletool * 103 1 * с:

java -jar ./bundletool-all-0.13.0.jar build-apks --bundle=./app-production-release.aab  --output=./release.apks --ks=./myapp-upload-key.keystore --ks-pass=pass:mypassword --ks-key-alias=myapp-key-alias --key-pass=pass:mypassword

А потом я устанавливаю APK на устройство:

java -jar ./bundletool-all-0.13.0.jar install-apks --apks=./release.apks

Перед запуском

before launch

После первого запуска (не делая ничего, кроме запуска приложения)

after first launch

Это происходит только с комплектом приложений, не так ли Возможно, в bundletool отсутствуют некоторые фрагменты или .aab сгенерирован неправильно?

Заранее благодарен за любую помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...