我将我的应用程序从RN0.57.8升级到RN0.58.4。这包括将com.android.tools.build:gradle:3.1.4
更改为com.android.tools.build:gradle:3.2.1
,以及将 gradle 包装器从 4.4
更改为 4.7
。
现在,我的应用程序在调试和发布配置中运行良好。但我也有自定义构建类型releaseStaging
.我可以成功构建它,但是当我运行它时,它崩溃并出现致命错误:Unable to load script from assets 'index.android.bundle'.
以下是我android/app/build.gradle
的相关片段:
project.ext.react = [
entryFile: "index.js",
// Staging build type:
// named "releaseStaging" and not just "staging" because of code-push requirements
bundleInReleaseStaging: true,
devDisabledInReleaseStaging: true,
jsBundleDirReleaseStaging: "$buildDir/intermediates/assets/releaseStaging",
resourcesDirReleaseStaging: "$buildDir/intermediates/res/merged/releaseStaging"
]
...
buildTypes {
debug {
resValue "string", "app_name", "Myapp DEBUG"
applicationIdSuffix ".debug"
manifestPlaceholders = [excludeSystemAlertWindowPermission: "false"]
}
release {
manifestPlaceholders = [excludeSystemAlertWindowPermission: "true"]
resValue "string", "app_name", "Myapp"
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
signingConfig signingConfigs.release
}
releaseStaging {
initWith release
applicationIdSuffix ".staging"
resValue "string", "app_name", "Myapp STAGING"
matchingFallbacks = ['release']
}
}
为了解决这个问题,我不得不降级到com.android.tools.build:gradle:3.1.4
。不过,我保留了 gradle 包装器的第 4.7
版。
有谁知道一种方法可以使我的应用程序的 gradle 版本与 react-native 保持最新并使用自定义 android 构建类型?
事实证明,Android Gradle 插件 3.2 使用了新的 intermediates/merged_assets
目录而不是 intermediates/assets
。这在此 PR 中已解决,以响应本机。但是,如果您设置自定义路径,例如 jsBundleDirReleaseStaging
.
但是在 react-native 0.58 中,一切都可以在没有自定义路径的情况下正常工作。所以我删除了jsBundleDirReleaseStaging
,现在resourcesDirReleaseStaging
和 gradle 片段如下所示:
project.ext.react = [
entryFile: "index.js",
bundleInReleaseStaging: true,
devDisabledInReleaseStaging: true
]