Я пытаюсь выпустить приложение 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
Перед запуском
После первого запуска (не делая ничего, кроме запуска приложения)
Это происходит только с комплектом приложений, не так ли Возможно, в bundletool отсутствуют некоторые фрагменты или .aab сгенерирован неправильно?
Заранее благодарен за любую помощь